From 7b52149939e1b7abfff58ad0e6d50721d3e1a5a8 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Fri, 22 Mar 2024 14:02:49 +0100 Subject: [PATCH 001/141] update dpid url --- .env.example | 2 ++ desci-server/src/routes/v1/attestations/schema.ts | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.env.example b/.env.example index 3a0e72c91..e31d46aa0 100755 --- a/.env.example +++ b/.env.example @@ -120,3 +120,5 @@ ETHEREUM_RPC_URL=http://host.docker.internal:8545 # Use this for Sepolia testnet # ETHEREUM_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/demo + +DPID_URL_OVERRIDE=https://dev-beta.dpid.org \ No newline at end of file diff --git a/desci-server/src/routes/v1/attestations/schema.ts b/desci-server/src/routes/v1/attestations/schema.ts index ea9511d65..13a5392f0 100644 --- a/desci-server/src/routes/v1/attestations/schema.ts +++ b/desci-server/src/routes/v1/attestations/schema.ts @@ -34,8 +34,10 @@ export const getAttestationCommentsSchema = z.object({ }), }); -export const dpidPathRegex = /^https:\/\/beta\.dpid\.org\/(?\d+)\/(?v\d+)\/(?\S+.*)?/m; -export const DPID_BASE_PATH = 'https://beta.dpid.org/'; +export const dpidPathRegex = + /^https:\/\/(?dev-beta|beta)\.dpid\.org\/(?\d+)\/(?v\d+)\/(?\S+.*)?/m; +// /^https:\/\/beta\.dpid\.org\/(?\d+)\/(?v\d+)\/(?\S+.*)?/m; + export const dpidPathSchema = z .string() .url() From 2e8dbdaf02bf9a7b54821370eae08a298aa6c125 Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 25 Mar 2024 22:01:18 +0700 Subject: [PATCH 002/141] add uuid to contributors in RO models --- desci-models/src/ResearchObject.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/desci-models/src/ResearchObject.ts b/desci-models/src/ResearchObject.ts index 95b460051..30408b37d 100644 --- a/desci-models/src/ResearchObject.ts +++ b/desci-models/src/ResearchObject.ts @@ -92,6 +92,8 @@ export interface ResearchObjectV1Component { * Contributor listing for a research object. */ export interface ResearchObjectV1Author { + /** Random UUID to identify the contributor */ + id: string; /** Name of the contributor */ name: string; /** Orcid handle of the contributor */ @@ -417,4 +419,3 @@ export type License = | 'EPL-2.0' | 'AGPL-3.0' | 'Unlicense'; - From d6c0264dbdcc8a3bb732830efef3eb9738b902d5 Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 25 Mar 2024 22:02:02 +0700 Subject: [PATCH 003/141] bump models version in package.json --- desci-models/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-models/package.json b/desci-models/package.json index ab394fa76..5329ff06e 100644 --- a/desci-models/package.json +++ b/desci-models/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/desci-models", - "version": "0.2.4-rc1", + "version": "0.2.5", "description": "Data models for DeSci Nodes", "main": "dist/index.js", "types": "dist/index.d.ts", From 92d954eceae036a115aec01362b6a95f0fac59e4 Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 25 Mar 2024 22:10:20 +0700 Subject: [PATCH 004/141] test fix --- desci-models/src/transformers/RoCrateTransformer.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/desci-models/src/transformers/RoCrateTransformer.ts b/desci-models/src/transformers/RoCrateTransformer.ts index a3aff4773..7cfe1142e 100644 --- a/desci-models/src/transformers/RoCrateTransformer.ts +++ b/desci-models/src/transformers/RoCrateTransformer.ts @@ -81,6 +81,7 @@ export class RoCrateTransformer implements BaseTransformer { const mainEntity = crate['@graph'].find((entity: any) => entity['@type'] === 'Dataset'); const authors = mainEntity.creator?.map((creator: any) => ({ + id: Date.now(), name: creator.name, orcid: creator['@id'].startsWith('https://orcid.org/') ? creator['@id'] : undefined, googleScholar: creator['@id'].startsWith('https://scholar.google.com/') ? creator['@id'] : undefined, From c962ade9787b45848b44a51ee8edf1e86a8ba1d5 Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 25 Mar 2024 22:14:00 +0700 Subject: [PATCH 005/141] fix ro crate transformer tests --- desci-models/src/transformers/RoCrateTransformer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-models/src/transformers/RoCrateTransformer.ts b/desci-models/src/transformers/RoCrateTransformer.ts index 7cfe1142e..5273c015b 100644 --- a/desci-models/src/transformers/RoCrateTransformer.ts +++ b/desci-models/src/transformers/RoCrateTransformer.ts @@ -154,7 +154,7 @@ export class RoCrateTransformer implements BaseTransformer { } private mapAuthor(author: ResearchObjectV1Author): any { - const id = formatOrcid(author.orcid) || author.googleScholar; + const id = formatOrcid(author.orcid) || author.googleScholar || Date.now(); return { ...(id ? { '@id': id } : {}), '@type': 'Person', From 0fb1bc47657a4705cd972349cc51f2c1b1cd382d Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 25 Mar 2024 22:15:37 +0700 Subject: [PATCH 006/141] transformer test fixes --- desci-models/src/transformers/RoCrateTransformer.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desci-models/src/transformers/RoCrateTransformer.ts b/desci-models/src/transformers/RoCrateTransformer.ts index 5273c015b..f03e63203 100644 --- a/desci-models/src/transformers/RoCrateTransformer.ts +++ b/desci-models/src/transformers/RoCrateTransformer.ts @@ -81,7 +81,7 @@ export class RoCrateTransformer implements BaseTransformer { const mainEntity = crate['@graph'].find((entity: any) => entity['@type'] === 'Dataset'); const authors = mainEntity.creator?.map((creator: any) => ({ - id: Date.now(), + id: Date.now().toString(), name: creator.name, orcid: creator['@id'].startsWith('https://orcid.org/') ? creator['@id'] : undefined, googleScholar: creator['@id'].startsWith('https://scholar.google.com/') ? creator['@id'] : undefined, @@ -154,7 +154,7 @@ export class RoCrateTransformer implements BaseTransformer { } private mapAuthor(author: ResearchObjectV1Author): any { - const id = formatOrcid(author.orcid) || author.googleScholar || Date.now(); + const id = formatOrcid(author.orcid) || author.googleScholar || Date.now().toString(); return { ...(id ? { '@id': id } : {}), '@type': 'Person', From b6426160b8ce82456b7f8f514047bd3cc7d01f71 Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 25 Mar 2024 22:17:50 +0700 Subject: [PATCH 007/141] contributor id optional for backwards compatability --- desci-models/src/ResearchObject.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/desci-models/src/ResearchObject.ts b/desci-models/src/ResearchObject.ts index 30408b37d..1e009dd3e 100644 --- a/desci-models/src/ResearchObject.ts +++ b/desci-models/src/ResearchObject.ts @@ -92,8 +92,10 @@ export interface ResearchObjectV1Component { * Contributor listing for a research object. */ export interface ResearchObjectV1Author { - /** Random UUID to identify the contributor */ - id: string; + /** Random UUID to identify the contributor - optional for compatability with old models + * Going forwards assignment is best practice. + */ + id?: string; /** Name of the contributor */ name: string; /** Orcid handle of the contributor */ From b878dd1e211a64939a667f96e63ce6a2df1bc85b Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 02:30:24 +0700 Subject: [PATCH 008/141] return orcid on profile search for autofilling --- desci-server/src/controllers/users/search.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/desci-server/src/controllers/users/search.ts b/desci-server/src/controllers/users/search.ts index 50206911a..04d6e50dc 100644 --- a/desci-server/src/controllers/users/search.ts +++ b/desci-server/src/controllers/users/search.ts @@ -16,7 +16,7 @@ export type SearchProfilesResBody = error: string; }; -export type UserProfile = { name: string; id: number }; +export type UserProfile = { name: string; id: number; orcid?: string }; export const searchProfiles = async (req: SearchProfilesRequest, res: Response) => { const user = req.user; @@ -34,7 +34,11 @@ export const searchProfiles = async (req: SearchProfilesRequest, res: Response ({ name: profile.name, id: profile.id })); + const profilesReturn: UserProfile[] = profiles.map((profile) => ({ + name: profile.name, + id: profile.id, + ...(profile.orcid && { orcid: profile.orcid }), + })); return res.status(200).json({ profiles: profilesReturn }); } } catch (e) { From aecfda399db0a4e39bf8740a482514bc374ccfd9 Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 02:45:27 +0700 Subject: [PATCH 009/141] add search nodes profiles by orcid functionality --- desci-server/src/controllers/users/search.ts | 19 +++++++++++++++---- desci-server/src/utils.ts | 7 +++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/desci-server/src/controllers/users/search.ts b/desci-server/src/controllers/users/search.ts index 04d6e50dc..17b63725e 100644 --- a/desci-server/src/controllers/users/search.ts +++ b/desci-server/src/controllers/users/search.ts @@ -3,8 +3,9 @@ import { Request, Response } from 'express'; import { prisma } from '../../client.js'; import { logger as parentLogger } from '../../logger.js'; +import { orcidRegex } from '../../utils.js'; -export type SearchProfilesRequest = Request & { +export type SearchProfilesRequest = Request & { user: User; // added by auth middleware }; @@ -20,18 +21,28 @@ export type UserProfile = { name: string; id: number; orcid?: string }; export const searchProfiles = async (req: SearchProfilesRequest, res: Response) => { const user = req.user; - const { name } = req.query; + const { name, orcid } = req.query; const logger = parentLogger.child({ module: 'Users::searchProfiles', body: req.body, userId: user.id, name, + orcid, + queryType: orcid ? 'orcid' : 'name', }); - if (name.toString().length < 2) return res.status(400).json({ error: 'Name query must be at least 2 characters' }); + if (orcid && orcidRegex.test(orcid) === false) + return res + .status(400) + .json({ error: 'Invalid orcid id, orcid must follow either 123456780000 or 1234-4567-8000-0000 format.' }); + + if (name.toString().length < 2 && !orcid) + return res.status(400).json({ error: 'Name query must be at least 2 characters' }); try { - const profiles = await prisma.user.findMany({ where: { name: { contains: name as string, mode: 'insensitive' } } }); + const profiles = orcid + ? await prisma.user.findMany({ where: { orcid: orcid } }) + : await prisma.user.findMany({ where: { name: { contains: name as string, mode: 'insensitive' } } }); if (profiles) { const profilesReturn: UserProfile[] = profiles.map((profile) => ({ diff --git a/desci-server/src/utils.ts b/desci-server/src/utils.ts index 8ff1ba91d..f5bff38ba 100644 --- a/desci-server/src/utils.ts +++ b/desci-server/src/utils.ts @@ -236,3 +236,10 @@ export function omitKeys(obj: Record, filterList: string[]): Record .filter((key) => !filterList.includes(key)) .reduce((newObj, key) => ({ ...newObj, [key]: obj[key] }), {}); } + +/** + * Accepts either 16 digits or 4 groups of 4 digits separated by hyphens. + * e.g. 0000-0000-0000-0000 + * or 0000000000000000 + */ +export const orcidRegex: RegExp = /^\d{4}-?\d{4}-?\d{4}-?\d{3}[\dX]$/; From a5361dabae12f785bb42b0e78c1555d221a96018 Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 03:31:54 +0700 Subject: [PATCH 010/141] ensure consistent orcid search format --- desci-server/src/controllers/users/search.ts | 10 +++++++--- desci-server/src/utils.ts | 13 +++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/desci-server/src/controllers/users/search.ts b/desci-server/src/controllers/users/search.ts index 17b63725e..cd908b1b9 100644 --- a/desci-server/src/controllers/users/search.ts +++ b/desci-server/src/controllers/users/search.ts @@ -3,7 +3,7 @@ import { Request, Response } from 'express'; import { prisma } from '../../client.js'; import { logger as parentLogger } from '../../logger.js'; -import { orcidRegex } from '../../utils.js'; +import { formatOrcidString, orcidRegex } from '../../utils.js'; export type SearchProfilesRequest = Request & { user: User; // added by auth middleware @@ -20,8 +20,10 @@ export type SearchProfilesResBody = export type UserProfile = { name: string; id: number; orcid?: string }; export const searchProfiles = async (req: SearchProfilesRequest, res: Response) => { + debugger; const user = req.user; - const { name, orcid } = req.query; + const { name } = req.query; + const { orcid } = req.query; const logger = parentLogger.child({ module: 'Users::searchProfiles', body: req.body, @@ -36,7 +38,9 @@ export const searchProfiles = async (req: SearchProfilesRequest, res: Response, filterList: string[]): Record * or 0000000000000000 */ export const orcidRegex: RegExp = /^\d{4}-?\d{4}-?\d{4}-?\d{3}[\dX]$/; + +/** + * Converts a non hyphenated orcid ID to hyphenated format. + */ +export function formatOrcidString(orcidId: string): string { + // Remove any existing hyphens from the input string + const orcidWithoutHyphens = orcidId.replace(/-/g, ''); + + // Insert hyphens at the appropriate positions + const formattedOrcid = orcidWithoutHyphens.replace(/(\d{4})(\d{4})(\d{4})(\d{3}[\dX])/, '$1-$2-$3-$4'); + + return formattedOrcid; +} From c774225ebb796072383ec952b47ae429e3bbbe66 Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 03:34:12 +0700 Subject: [PATCH 011/141] ensure orcids are correctly added in hyphenated format when adding contributors via orcids --- desci-server/src/services/Contributors.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 25dd6a380..b6e826bff 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -1,10 +1,12 @@ +import { format } from 'path'; + import { Node, NodeContribution, User } from '@prisma/client'; import ShortUniqueId from 'short-unique-id'; import { prisma } from '../client.js'; import { logger as parentLogger } from '../logger.js'; import { getIndexedResearchObjects } from '../theGraph.js'; -import { hexToCid } from '../utils.js'; +import { formatOrcidString, hexToCid } from '../utils.js'; type ContributorId = string; @@ -52,6 +54,7 @@ class ContributorService { orcid, userId, }: AddNodeContributionParams): Promise { + if (orcid) orcid = formatOrcidString(orcid); // Ensure hyphenated // Check if contributor is already registered let registeredContributor; if (email) registeredContributor = await prisma.user.findUnique({ where: { email } }); @@ -86,6 +89,7 @@ class ContributorService { orcid, userId, }: AddNodeContributionParams): Promise { + if (orcid) orcid = formatOrcidString(orcid); // Ensure hyphenated // Check if contribution is already verified let registeredContributor; if (email) registeredContributor = await prisma.user.findUnique({ where: { email } }); From 68044578fdd722deb882a4cbcf6eee6d07aca2fe Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 03:36:30 +0700 Subject: [PATCH 012/141] fix search user nodes profile via orcid --- desci-server/src/controllers/users/search.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/desci-server/src/controllers/users/search.ts b/desci-server/src/controllers/users/search.ts index cd908b1b9..4307f3e64 100644 --- a/desci-server/src/controllers/users/search.ts +++ b/desci-server/src/controllers/users/search.ts @@ -20,10 +20,10 @@ export type SearchProfilesResBody = export type UserProfile = { name: string; id: number; orcid?: string }; export const searchProfiles = async (req: SearchProfilesRequest, res: Response) => { - debugger; + // debugger; const user = req.user; const { name } = req.query; - const { orcid } = req.query; + let { orcid } = req.query; const logger = parentLogger.child({ module: 'Users::searchProfiles', body: req.body, @@ -38,7 +38,7 @@ export const searchProfiles = async (req: SearchProfilesRequest, res: Response Date: Tue, 26 Mar 2024 21:12:09 +0700 Subject: [PATCH 013/141] fix share links gen for contributor invites --- desci-contracts/migration-data/migrationData.json | 1 - .../migrationData_Fri Mar 15 2024.json | 1 - .../migrationData_Thu Jan 18 2024.json | 1 - .../migrationData_Thu Mar 14 2024.json | 1 - .../migrationData_Wed Feb 14 2024.json | 1 - .../migrationData_Wed Mar 13 2024.json | 1 - .../src/controllers/nodes/contributions/create.ts | 2 +- desci-server/src/services/Contributors.ts | 15 +++++++++++---- 8 files changed, 12 insertions(+), 11 deletions(-) delete mode 100644 desci-contracts/migration-data/migrationData.json delete mode 100644 desci-contracts/migration-data/migrationData_Fri Mar 15 2024.json delete mode 100644 desci-contracts/migration-data/migrationData_Thu Jan 18 2024.json delete mode 100644 desci-contracts/migration-data/migrationData_Thu Mar 14 2024.json delete mode 100644 desci-contracts/migration-data/migrationData_Wed Feb 14 2024.json delete mode 100644 desci-contracts/migration-data/migrationData_Wed Mar 13 2024.json diff --git a/desci-contracts/migration-data/migrationData.json b/desci-contracts/migration-data/migrationData.json deleted file mode 100644 index 5b80dcdc6..000000000 --- a/desci-contracts/migration-data/migrationData.json +++ /dev/null @@ -1 +0,0 @@ -[{"from":"0x41a933bab03126d9c1ad5052267edadf265f58b4","uuid":"0x4d3f0ee8f61bc55037076ef55b7c8129b9cf86cf2e3c0146c1378e7356baa99a","cid":"0x0f015512209a40c7ac52c80bdf4480a69945e10b2e79e7c873f8efb70e3c0c5e984d0e47f6","timestamp":1675737468,"dpid":"0"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818608,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818404,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220c17fc203b637a2439ed29b4f8f96610c87ec84aa82b611c08bb30d540ededbb4","timestamp":1675781796,"dpid":"1"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220d502ebf0825885dbdf87a89ce524108290858fc0187b31e97c868e9dd98a0d18","timestamp":1676096820,"dpid":"2"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220eb95d36d9b314299a04e7e90f589e390beff9d94cccb951678a3db9cdc6a100e","timestamp":1676095440,"dpid":"2"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x14c6658aa83701bb18a8225e94ee008bec535c1cd430ffa3279a0df333fa452d","cid":"0x0f015512200d14a1bc62c9ca9d8256c76f0f7c64c228461fe932790ccb63d40087a1666f88","timestamp":1676725008,"dpid":"3"},{"from":"0xaf6d67eb6a07cd7f3d2d690499841042fecd137b","uuid":"0x2ce2eecf9cf99de291623a577afc6f453659a5eed14e0297fd3c4b0a7c88276e","cid":"0x0f015512204adeb2ae11ad4dad8fd61507ecf4bb56e8f85558e6f9d511a55edde1d8f8d47f","timestamp":1676988612,"dpid":"4"},{"from":"0x12ab259853038a8b542b77d4ebf3af671b7e8e73","uuid":"0xeb4670ff98c76bc9c87bbb0c9b48ac34b4416a60f419ed1e12927c7270f231bc","cid":"0x0f01551220f10709a2264cfe211072cc76ad6e6d3c68eb859651af5c17054bd2bdef041103","timestamp":1676996292,"dpid":"5"},{"from":"0x6f5e440d9fad549913512104a8956098c7c7272a","uuid":"0xf90b7a0acdd1e4f958f0955ba9b6de5f1822d34bfce88748db767957c3e1c4af","cid":"0x0f0155122084f827480eb0f8e772e99292c8bcea8194f46f71c831277a35bbeea388568e9a","timestamp":1677066240,"dpid":"6"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122058ae4caf6f4bd65bde8d4190931b4571bac4a8dd277ddbe522bc8b886b65f17a","timestamp":1677081012,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122068d207508426ee3c8a17616846ef9958c99d9d9d0ad1cc78ee2bd987f6bd6db1","timestamp":1677080820,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x38009c640482b5a7880f78014f467be987151e5abaf8cf698601d7e8f2dee8df","cid":"0x0f015512202d3d21c9ad0494f149c2f1289dcb5a3b35f117fc6bc0ef5328637789424fb8c5","timestamp":1677144720,"dpid":"8"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x71b1b81b823d60c7ccd855e030188c91941e0b2120391166228daa8fa0b105ee","cid":"0x0f01551220c94af041db6bfe0b46a4e07389ad78e462219fbd448076089596ad12a6801f79","timestamp":1677230328,"dpid":"9"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220be730fe1e9ae927e4bc786c068fced1e7583f41bec29c1ad8481c843934d3b9e","timestamp":1677511224,"dpid":"10"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220e110cc29d132026ab3842231caa37fde7be2b30275a272ab7a93992386ff7fb2","timestamp":1677510672,"dpid":"10"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x447fbec7a42e617052e792b1edfda430aa0faffec7f105dd7a54ff95bd5ea985","cid":"0x0f01551220dfe8aef953593b5444fdb684b23a5bcbde97476dcf42b32803b6794476aff2a0","timestamp":1678309056,"dpid":"11"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x5f6d2d91fa15a5004d4b7af407ffd8ce768694f5cab631f36c0984894f6f8c6c","cid":"0x0f01551220d520bc99de67d90929118eafefed5927995e541c6b201a455afd5f3f155c4b15","timestamp":1678771692,"dpid":"12"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512207cc5fff1a8eb0b2fa342d6523d8d452ca602d82af065daec2677fd0e61a864a7","timestamp":1680117252,"dpid":"13"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512208dccc1916b787f489adb0c311502e94cbf8ae04af45ff199fadd145361121220","timestamp":1678814328,"dpid":"13"},{"from":"0x60b059dd7799d156f035e6d3ea51262862bc9d4e","uuid":"0x642e30a12bfdce5c5d300578ac7242742a5f359b5561fdb86aba885349118468","cid":"0x0f0155122012bfe6212a9372be0fe15f2274faf82e5bbad020eb568cdc7a6fc2845ae6f067","timestamp":1679014104,"dpid":"14"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219484,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219328,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f01551220a9a416c935b1d5567b5e2991a9dc8b36338704d32c7715933f39a772de69150e","timestamp":1679219244,"dpid":"15"},{"from":"0x32b1f642d5ce695be9ca853aff84d59af5e02116","uuid":"0x21be1e83d8b580427585617ab76531420dea3ca384d3eb5328610c081b2c5756","cid":"0x0f01551220dafc5b29ff71836069925876f573c4e084c770d66371ecd48f3407c5803cc70d","timestamp":1679343324,"dpid":"16"},{"from":"0xa5c21ba7e36cae9af5a5894a9a8a65bac3f752ad","uuid":"0xbf4e8ccc9e5b411edfd246c92b3ec1d829ca4b1eb41701366ec0ff21d9017920","cid":"0x0f01551220c632038257b7e5b73160725957b4f4da2af52004a2bd47981009c94db9c1066c","timestamp":1679409324,"dpid":"17"},{"from":"0x71ad8aee76d7792ec41f3cae707b65594c67373f","uuid":"0x0dc8d351f011ac36a92a714073c6b2ad6e4d5107eb81ff70670c6737a4b6a94e","cid":"0x0f01551220c63b85344cc17c92bf11664a86b7d35e9fb2e6fcd02dfe2a1df19630a124d521","timestamp":1679409744,"dpid":"18"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x1737974bc778096d399921cffb55fa2a0a58b7413eee9a5d9772ea544a56d3ce","cid":"0x0f01551220551b199b7e78003e35010a0fc62759290d362affd13d6f01872cf9846e21b12c","timestamp":1679539764,"dpid":"19"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512202dbe5b2beaf6182583a63a23d587a5c7a573d8637d453445e1d8325a50abe867","timestamp":1680554796,"dpid":"20"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512209e0dcbfa6f3cec9ba0315f70a4941d6e410456899691ab0701904b4592d9a4be","timestamp":1679540424,"dpid":"20"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637288,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637252,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220823b961f7d6323255c47e996afe192c96cb0babd5cf91383c5ca505b00af88e6","timestamp":1679637204,"dpid":"21"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x7a041ca4f95c29e37f84e084752aba25cdc5e4a57e2eef8e6ba02622e97cad63","cid":"0x0f015512207c1f3bcd940e08a792dcfddcca0fd350fa6d05afe6dbbba0f94ed56e1878d807","timestamp":1679658768,"dpid":"22"},{"from":"0xaa572e27403dcabd42f0afe938bdd18c3b52523f","uuid":"0xaeb5c1f0576f6c24fd087c9ca9837452c0ac5f8d41104becb848b057d4cbcf76","cid":"0x0f01551220b97f2b4a0ed522b7b888b3d447a9653143098fe0991482cd02cabea69951b6b2","timestamp":1680567024,"dpid":"23"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0xece33e446b40791e7d5079daf61fc5d7a5ef41c0029297b8fa4aef09ec9c1825","cid":"0x0f0155122050118b2b1175fa6b3dbbac44651b048694f7de272bee5a53cb122a3aab03ae23","timestamp":1681191960,"dpid":"24"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xba82c370711c6a35946fa10ac32d27019ec1d0981057fed3d1aa9025297c44b8","cid":"0x0f0155122008f915011dc3f8bed078321740440a869c23a0238938f0902f94567291bae372","timestamp":1681495752,"dpid":"25"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f01551220413f7132abee3941f9db9c875ac4ab2c84888249d2558496cec2f01f7fa0b8c2","timestamp":1681497900,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f015512201237f9c3c73a3fa6a55b80d67bd744fbdd7b19693ed32fb0465485c1d1bdf8cc","timestamp":1681497684,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa94370567701bbaaca632e502b4a84c07441daf07bf1a23ca2a46004a35fede0","cid":"0x0f01551220874f2f08bd5d67a432327d6d7ca987b4bbfc83b0db03c76453d73a9395899450","timestamp":1681505184,"dpid":"27"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x7664a535b66afbf011d6884a50a280ae9a503ce94acc9497728d459a153d827d","cid":"0x0f01551220eca5152df9f89f614a5521ba8f8a796719772286152a11e4e8c4659f4d505efc","timestamp":1681506588,"dpid":"28"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220574146a7501807df98a7547c0b3d0bdbfcfc0b29704c823ff86571b9a3deab85","timestamp":1681736628,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220c82d987df438ab758c9b557259e8fa0f4e1c2278651c802608fbdf8033419821","timestamp":1681736556,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220be43004fa14f3ca7e2e9cf01f1a0b7906b3728e53c8b1af19e309e1568f85cc5","timestamp":1681762272,"dpid":"30"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220734c2b0c3a1f21c05663f5a9d2b258d3baae0847e06da7699959aadc6616c026","timestamp":1681761420,"dpid":"30"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x57e2c2007b7af4859a04a5a1ed555f17f4d54a969158bc73f079b7f85a133ad5","cid":"0x0f0155122007140ffce5d9d7cd93e847b4ddaa75400b0baab040ddc2ccc56c33a141458556","timestamp":1681805808,"dpid":"31"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x5207335dee8c3818e7cf16b4a11ade55ab52d3957b8bd179cf351b8578746c03","cid":"0x0f015512200053d8f17531e05fb7d33978d35eb4fb6028dc8414369fbdf5a660cb22914ab9","timestamp":1681830960,"dpid":"32"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x8e794cafc680e76baeeb09e74ea413c816fedf6b716337d07abdd5657f69f822","cid":"0x0f015512205aca92353605ea8a45e732995d51da82d0dcb08089f907420dbe60ff1795dafe","timestamp":1682014560,"dpid":"33"},{"from":"0x134e95ce73fbb2a223e52351f8492088a86991ec","uuid":"0xf1a54e169d7c721a532b63fe25a070c673dee267f9688537ea9005f9fce8f118","cid":"0x0f015512202a09ce4187780645e8e49efff4ea3b0caef18ed60c42d9647890fe296db7d3a1","timestamp":1682144088,"dpid":"34"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f015512208076546c5b3eab9a046d4c3c7c214fa94bc80a6d67c6b310e8b3d8e4da0c17c3","timestamp":1682813004,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f0155122060953bffcc76ff9af880b9c7dc0e69ab8f8c2c2b9d01afb982d1b6f38bd3eca8","timestamp":1682746284,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f01551220fc56171ee7ae7bd3eb3e36d2e88c34d26eef0deb8a2850aa70874734324a5c72","timestamp":1682534976,"dpid":"35"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x66ec71949b03ac1cda5600f93a042cf0ef4a5fbc114abb5ab00f879320e67429","cid":"0x0f01551220a2e49ddbb71fabd49f69c44aeeb69f597fadff2061adf6c46a7d6a8f77848d09","timestamp":1682670864,"dpid":"36"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f0155122003fd6d8a9eef363a8f0331c364da74dabf485fa2c90142d6d68a5045f1d7068d","timestamp":1682793408,"dpid":"37"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f015512200370361d9eabcbcab401ef4d4f97005094f536d3b7f89353d84349deb8014c66","timestamp":1682793228,"dpid":"37"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682822136,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682814000,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f0155122006c38ee5c3d87df8f1871df54b987c1ce43726f892a9ddfb08be670863bc4970","timestamp":1682813880,"dpid":"38"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122091768c624c35d1bb57139837d71eec4bf81c2888616f5a3cffbc0351a172f6c1","timestamp":1682849124,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682821080,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682820648,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122033259ecc232dd46a608ff88651128a8da6bdccc2c917a0c2ef56b4dc27f7e498","timestamp":1682820372,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821884,"dpid":"40"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821224,"dpid":"40"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220ac1f68266f0f2a9e7fa96731e46c54a86aa36bdbd4a22cf1a5c08b2ee9957600","timestamp":1682854344,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220e49575cb06ca399247ae08fae9a8b3a3ff5de24b6a8dc29e44ac3ab6115c1539","timestamp":1682854224,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0xc73b88a9747fb3eb3fb051bbb3971faaf4819d1b8cd041028cc5531e3f9c6e94","cid":"0x0f015512209cf107adddf229ae090c27cc3998b51daf075dac2e3824d828cc71e1c3782903","timestamp":1682856480,"dpid":"42"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x13ce389478fadc96534f666ea8a035dc54c4d08f12ec16bbbbbb0dded66e93fb","cid":"0x0f01551220d46086ee0c05a4f167ae2637ee677a562ea1832d38cd953900b43d4836d5ec3e","timestamp":1682951112,"dpid":"43"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0xfba4b603620f33f51b5afbdf87de9ae79796d5ac1d4ac6f19329460615a8eae5","cid":"0x0f01551220f078470899aff3081b145084f68c9a2445b99322dcd658a2650f62a75fffe89d","timestamp":1682962248,"dpid":"44"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5e53b3b10212b4ce9cdec84c8fafbd305d80df6c778375e2977620d1b3f366c2","cid":"0x0f01551220e5895006b048366ad69277566cb11b20ff47201fe00f40dbf36f3d36c5137456","timestamp":1682993892,"dpid":"45"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512208f74fda7bac4317f39ff66c233ae140290d6ec58c604e73d0259ee384040eac2","timestamp":1683299940,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512202dda4e35c872736baecfe8d06d38854bda736485adb616f220fb4b19919e4562","timestamp":1683298680,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220bb1fb9ca4d11adaaa6514289cdee3c0b7ee3cbb848b49be0f9da3dd8a1dc0b0e","timestamp":1683227616,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220fd53a16eb6b7a09035a0f62c96a6a7dfe38948b84b44ffc8a8107938c87af450","timestamp":1683222132,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512201a6d456535ce453d3f62ce0f0671f8970ec00638d2271bf52b03c0520a1871f5","timestamp":1683053508,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x90ba1ee3a35ac4377b45b8576d2bad8dd590b8d97fc907966b08eb15061b874e","cid":"0x0f015512201f746518f1f6b93acd19aa5a9af16baa4cbe66e48c71548d8087f6067e1d454d","timestamp":1683222948,"dpid":"47"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x3afb6232b1af22d2d2b32c8b8f93f51cd826fde329b43c1ad296b090810ea96c","cid":"0x0f01551220803851d9e43a70fed0e93da3f8e720cba9f4b9e34130a3648b6a67cad93d60bd","timestamp":1683232692,"dpid":"48"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220a4e515a62882a47bc943ffe60338a81d5f0c3effff4f4494c84565f95141a50b","timestamp":1683237288,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220d866d792ea34c8f71d6d855dd3901605bb91d0b451a6e7c5637da941408544df","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f015512202fd9deb76c3a394930c41135746ae86abed45816500dceaa5483d2b4d206e278","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f0155122093f39a0766cc860ab7853207cbe2f52a3ba9d6eeb7baaec5180b3b63de07259d","timestamp":1683236460,"dpid":"49"},{"from":"0xe861856c961f853dc47e5f2ad1fa2b9ea20e4e88","uuid":"0x29d466756bc5ad7e00d1197785c6e18c9adbf139ed8cd9669a381d4d3ab5185e","cid":"0x0f0155122031700de6766f972518cc770961fe4a4aabcb4e482700cea3eea5735315b25518","timestamp":1683886968,"dpid":"50"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220124bbb6ca94ad4bbe9d46a6049df553c4fcd886f9dab60fb55b5b3b393cd572c","timestamp":1683931428,"dpid":"51"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220e4266d1c3697778cd48f4f600ea15b7694dcebcbc5a80ab7a5d425987e411b00","timestamp":1683930000,"dpid":"51"},{"from":"0x9fcc55e782c2e43dfadcc428c4f2f8f32e095782","uuid":"0x136d9f9e3810666980107d2d4cbdb0032ed4f67f591ad82ade1658a29702fff8","cid":"0x0f0155122057b7679b0135b03fdfa0f49ecf5599a50be9f2838eb96b55ca54e450a2c66caf","timestamp":1684412244,"dpid":"52"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f01551220b49ba9590a9b78640004d71de051fb2079d42a111e46ca808c842b227e3a890e","timestamp":1686612108,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f015512201fc246787a63ba676c4780494f7c3e1b4dc2ee82868e33923a5f14221c63c962","timestamp":1684862784,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220ee15b4b25f3f6e7922d998effc6a1c2415db9872c55cdb7eced06e84b69b64b5","timestamp":1685098776,"dpid":"54"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220d32c64e3089d45cc9e0ea93553a81932a265d37240f7255ca118cf93a0812891","timestamp":1685098464,"dpid":"54"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x814875f70b49d8855ca70a4b842ec18e0cbfed86f7dacc406451b6c74946b061","cid":"0x0f01551220547ea04b46ceaa946574346f2afb4be20c3706d7510cff38d316ef1d6aceceab","timestamp":1685442360,"dpid":"55"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512207e406a140574f56a8a0b6bf22ac7b1e30a751ccfdae880f623883365a8fd5ca1","timestamp":1685448060,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512208897402d12a4ca848c6bc5acad80b318044ad8aeb83fdfd00aa138a422030e8c","timestamp":1685444172,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5a82718776361e7b3218a895525f3bf16954747a919ad4279cd9a51f8153613a","cid":"0x0f01551220145c239a14db836ddec6d984dbd3e855902c3a3625b4f89deb169f9d2b23a12b","timestamp":1685525952,"dpid":"57"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512203a32dbfccc4f9fb3f87f0ef22596afcb03399aff87b49763bd67f1bbd8935e5b","timestamp":1685536224,"dpid":"58"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512206bbc0246759b51a6d9c3dae6eb449e98acf52fea38d2bb4c70be3b1360932349","timestamp":1685526132,"dpid":"58"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220d5a01de71ad36c74e536b75ec1d64e8b38272f8e1245274886ed6802b255d102","timestamp":1685613240,"dpid":"59"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220c9d4ab3fb535d36f96e59cd3d120a4cf2a72773a2b14a384aefd1381a52e5255","timestamp":1685613060,"dpid":"59"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f01551220ac71c7dfb47eb844988b61f0ee67e0464256473d52f9e2cc8393d6c7585c7a05","timestamp":1685613708,"dpid":"60"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f0155122085924ebb47c11438d9086ecea1a9a840ea3ee15cd36f5b731945d2e3d06b3a5c","timestamp":1685613216,"dpid":"60"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x23d7465583afc75276d7ec121fd82d34d4d38b6456be9990ab50fe6b2aec11b5","cid":"0x0f015512207dad824f451fe44d3192a14e5b1212ee20e4e11669819ee7df6141fddf26d96a","timestamp":1685614104,"dpid":"61"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x71e940680347c5c59fe91b01784ecc9c6ffcc4c65ebfab0d5b8ff9dc02166a99","cid":"0x0f015512200f484328bac037a779eed442d60d55fe19ce84ab0b52d951e45c24b700ebe1a4","timestamp":1685615388,"dpid":"62"},{"from":"0x008292e57a2d9b34525d82876068652e639e61d8","uuid":"0xc2ee84577e3896e376fb8ddb1f5b8c776b14a641e301db88e4995d2992946486","cid":"0x0f015512204961cc8ec829abb48db7362aac5600e643c38879009114809a0f5ffa21a20392","timestamp":1685615724,"dpid":"63"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xff282722074468174bbcca8902d81de7fb794a493c26edcca8ac007cf7638ebd","cid":"0x0f015512203a8aa5608277fc2026e1971013089a38b172b9211211e512bac708fb54964a2a","timestamp":1685719428,"dpid":"64"},{"from":"0x813eabba8e094bef89fe77b4f497810b9795ea66","uuid":"0x7c56741adb2e6f53a1bd354a7863b817a42d1e00d602450d351b5a3b57d96e59","cid":"0x0f01551220a3c2ca0411fc58b9de718eb7408872a6dfc3420518096fdb632d2a38f757d08a","timestamp":1686220584,"dpid":"65"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f0155122085acd5e30aabbc367b6d6ab8929c7410502f8a7256a0a5ab0f68624e8d60a37b","timestamp":1687805484,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f01551220245a17d29a145e9db11ef5f9bf760e0aae95182abe8f9830a2dfd54507f2d756","timestamp":1687805292,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220747a2fa16ca8ca254aeb3e9ae987d6522fa4e5be266b095f517eabfc37c6ce7f","timestamp":1687808232,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220195d0afb118d9073215302753e64759f9e9fcc5c37abb2aadc97e7e82cd1ca08","timestamp":1687807524,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x58703be0a37ec8b08984024a4659667901d03a7e1c66612766ca3a99ca369ac7","cid":"0x0f01551220e054f76eecf6ab486d3b64e5f12310d65753d8cbcca1bd8b2ec1d058f8b396ce","timestamp":1687812132,"dpid":"68"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5825084093f35bf3b98bb9ecd724400a0f01ed6c3a2ca27b16ea69b53306faa6","cid":"0x0f01551220c522c541b31394352d279616369fce5804ded295e299cbece7f0ed81c934051b","timestamp":1687812804,"dpid":"69"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xc335bda4b1f79e72ff0c5d061e6fdf7af21a86ebac698e90f0cca5ac69b3020e","cid":"0x0f015512204068d1d21f66b52f65c3caf15e4a522d0bc37dee1b425a337386769fd229a8de","timestamp":1687817568,"dpid":"70"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122063982338abc89465b4f573bf9aa1579bfa654f6aa2f12db15ab756d9220726e9","timestamp":1688024676,"dpid":"71"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122021e9bb44b2e4a93be54db472c3f8c5a2604c41ce29230923b7d1b86276f28479","timestamp":1688024628,"dpid":"71"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xfd54b8d85ecd02cac3e64144ab492cb75faf8167b75e73b7141a3404e639c1df","cid":"0x0f0155122049e0b9c318e2763599d6c4de8ac0d7e2a5678d1ebac71a38b47e31e2bd890020","timestamp":1688552688,"dpid":"72"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1689009768,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1688720808,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x04be83778e156d843a2551448780727a3c0bf21107d66d08e2f50f370be98712","cid":"0x0f01551220b0ba939c3c33cfe4d4bf663a635ef823ed188388efb15ef6bb3efcc4c3d21fb2","timestamp":1689041640,"dpid":"74"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x6047e10d820b878a9c553073a5c140bf1023fa3426bb25348037826399913556","cid":"0x0f015512203392d7b04341c36abbb607f36e02e46ce09e87563b089a20ab291637ab816ffa","timestamp":1689294216,"dpid":"75"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220735441775977d79d9e9bd0c1680b1efd6c5c85f01c63bd8b03ea6948bf967a1c","timestamp":1702045944,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f0155122051014af7073b576391b1065f67952d07b510ce2ac4fdd7da516c2c551e52acd5","timestamp":1702045680,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512205cb228099c1cb09650d8b3e5404241058843a2ee706708e025cc638d4186b2b5","timestamp":1702000140,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220a62e52b9c6a2cee08be12a4502664b51d950666fe4a5af90a3cfa913a613d349","timestamp":1701997248,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220513199f4bee602755360752169105632d04fc23173f1003bef320d0337d16c14","timestamp":1692330000,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220c6ddd5e72684c2dad436b6946ded360f9fdf84b73e99c08787030f57312c535e","timestamp":1692182952,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512201348deea506b711b91e43f1ec9d7b8d1a56c13d2226b346e9fdc4b14f56a8409","timestamp":1689518988,"dpid":"76"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f015512208e1e764e2b216acdc6a81d7da26016d4a1185a1137803a378c1059a7e0a65f2b","timestamp":1691496348,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f01551220e9765441e96679a63152b92240d3b59eec842b19660aee519b62b23faaae33ac","timestamp":1691493636,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f0155122010bc45102349d2dead31c0893a00c3959e0f75799d4dddd2860a8cb1ae286cfc","timestamp":1691492520,"dpid":"77"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x985b7ff62652f432b38e1b8aba5d3f4fedbc36345d2f818fdd0011c42fc1a43e","cid":"0x0f01551220a8bb15e9a0913fa0e63caea2bdb8f84b37521252b639231b8050e51c41ab8eec","timestamp":1691501736,"dpid":"78"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x10fd63608937c5589c65117fb50a3736196e854c2746e5afa18616352fc15da5","cid":"0x0f0155122033a510449f17a7331d387be0514110675b2036408cf5751a429e7574a348ad28","timestamp":1692472464,"dpid":"79"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f01551220475e5ebbbde7ce1cedb1a937a6cd13947adece0f50f7be0f0c39f5ce29d55302","timestamp":1693246872,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f0155122016b13ce97577c13677246cb18439f1b197ef62c31b7eeb4afeee59c2d169b004","timestamp":1693245804,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f015512204f1a4a775cdb3605abb7db7bc372fc1fb548752f87df0607c090228a49da8d61","timestamp":1700147784,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f01551220842e076e8c09994d9ede0411b1885e7f5673840507c70756c676028003a9bbe6","timestamp":1693246440,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2985ad1a8ec856aae4e741ec6442b1cb31df4e689741850cc7f401a2d23c74df","cid":"0x0f015512204cac6289a604e10132a917dabca35f3f75d77234d829cdf8aa81780ccbe18880","timestamp":1693247148,"dpid":"82"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f01551220710ec51c7187f14485779174c132b73a601e6db96295e0f70cc3090513f514ef","timestamp":1700147268,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f015512201e109b99ffc1d6eea87e4bae6e62057362d4ca88358ffedc970207ecf87a0a8d","timestamp":1693247616,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f015512206554b159bfb54e5c2ca68f6f8fe3ff431474fd459edafebec2cdf4a1e1e9b84e","timestamp":1700146980,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f01551220262bd98464a8a798f60c4df021584568feb20fe8428de4866b8d3ccb5d8a01fb","timestamp":1693248192,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f0155122089b4726dd6758d6ecff4793315bfefd5e5a275fa886fb87cc3fe711415411a12","timestamp":1700146392,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f015512204730b046919be6e2dd88cfc619840866713f532895fe7e110a4a68814bfe379f","timestamp":1693248672,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f015512206b80bc92b65b2cdf7739f7f926c2c1ffedece7cc7e24b7eba23a2af8d55597f2","timestamp":1700145552,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f01551220f784661a9ee6ddb4da6c0778a9a44fd0ab582072e1feab0e5b5f24775e464932","timestamp":1693249560,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f01551220204550a97883e629602079e67248acec5a82315e82563fc01f8da6fe26739b5b","timestamp":1700146176,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f015512206b0eb5f87cd5afb5a44d84b56435a3faf324149a72750a023e4002622f787afd","timestamp":1693249908,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220bf26daa8622f079ea3adb5fc871b28d814fe539b3094c8ee77ea7839eb50ab39","timestamp":1700146776,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220237e23eaae482991b11035fa1faf61af5ad65cbc8abe7992a7f7683f472de936","timestamp":1693250244,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x87cfcaf39a1c482f5866bfbe48d4f63d65d7db9fb992b6837c688d2013940c87","cid":"0x0f015512206fd907cd2fc2464c48bba2fe4acbbd967f4ea17277f533f6190ebc88fe583e8b","timestamp":1693251900,"dpid":"89"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512205e6eafe4aeb2971047b54a0f1dcb449c69321094bf55b9e6674434f3704a7db9","timestamp":1695653376,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512206afa0e08ee564a4bcf5a739a57dd19d5b835df7f5da459da3c442d3962d5b77b","timestamp":1694187648,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f0155122016df22da6fcfd0840b276673f1732fdc8276316d0fdbf3529fa06e63565399ed","timestamp":1694114940,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f0155122073452cfb6096325fb8f41f91eb93223f7d424352ebafb240bc61bc62040167bd","timestamp":1695653220,"dpid":"91"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f01551220cf13504896eb49ca532783f3b14b105c7882a0a712f19c031adfec44e08fd56d","timestamp":1694197140,"dpid":"91"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x43c4629df6245fc911ed28bd3e4fd92899dbed0e70d6086467ddf89407c41fe1","cid":"0x0f0155122050265ea5c933a4b296c88a16862c006698445750eb177f512e3613b9d364345f","timestamp":1695218412,"dpid":"92"},{"from":"0x262b4f07e42bbc33f597fcf0d854e9dafaf3d469","uuid":"0x9db9db43f2e485f733b91814cbeb189c03f6a4ca18c4f07729cdb9bc9d88f852","cid":"0x0f015512209a7f7d3d0f68ffb55d85d6da6c442c9e2b2389ea0b1261b13159fa9f098102d0","timestamp":1695246144,"dpid":"93"},{"from":"0x9452d0680a39195f59cc8a8b794aec0a81d51cc9","uuid":"0x6d7d697d017315f644992600e7c28f2914a3908ed134aa6b1e49ebe708c16dfe","cid":"0x0f01551220106cfb1003c1e512f5187ca90dfdc66fe8a4df16d7889413c38c5457fb4bdb1e","timestamp":1695246324,"dpid":"94"},{"from":"0x64b3f6f1eace5ba2d49c430ffbf085f4847bdec7","uuid":"0xba7fc52a499293973b4b35f8bbcfda823a2059c9a8a175b13cf35d24707b50b9","cid":"0x0f0155122083f5c28f77367e6084020d3c3621c39a17f108dfd21ef4d157c0aa9d5107c5f6","timestamp":1695324696,"dpid":"95"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x26a149a3b1efaa583e80571482cec997f375990f70bee46e3230bed5ba78fc55","cid":"0x0f01551220d48c3bca9221e49074d1cd6df4f0bbff5852baa1cbd24a9bdcd8ce54efbb9a50","timestamp":1695816576,"dpid":"96"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f015512204818e564ec9e3bbae2feff07d68040876da0436fb6d89fb5f54daf95a98d72b0","timestamp":1696594740,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696481172,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480884,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480764,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480608,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696479552,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696468416,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466964,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466820,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466724,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459584,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459560,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440036,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299912,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299876,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299600,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299000,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696296012,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696295376,"dpid":"97"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303944,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303560,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536972,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536936,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536912,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536888,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536828,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536804,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536756,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696469268,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696336296,"dpid":"99"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512207d74909d018b17bf267e9983f5a4ff1b1b7cb91314c7f4e3fb99ec60e3f6089e","timestamp":1696840824,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f01551220e88a7c59024cac199699b88226bf15f3dad2079ad7f8de522cd58d212a7e4cb7","timestamp":1696507296,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512203a2cbe6fe0167c0984e4139576143faff5e3afbda15e52091379c4788bcc34f0","timestamp":1696506528,"dpid":"100"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe3bcfed1e03918f9d7a48903f9a96e2589f8823d1c47b6293cd744b7d7d57161","cid":"0x0f015512200e0e343667925a707bc9194a7581e9350e73aacb16423757faf047229216ebe4","timestamp":1696589760,"dpid":"101"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x9e102f9a7ce12cd3dd4944b13d51493e7079ab344acc5d84e6f5ea05a12353fd","cid":"0x0f0155122044410acab6cec9a6fad6d5e92f690eecdfb0bebab46b04d4dfaa4cc50ab3cbb1","timestamp":1696605300,"dpid":"102"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x69114e8fa768f26d452f12090831b9c6e8d58ae100ac16ec68cbd661ee8b3997","cid":"0x0f01551220be7eb409dbc450417545a5612651c26d3ac6085bd09c11017d700d25e02331a7","timestamp":1696841976,"dpid":"103"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f0155122081133e104e9fce1fc05bcfca24152c735c24639fa938b2751fdb5dcc9bbfb699","timestamp":1698779592,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f015512209bfe5c87d9e68468f132e569e0583f33a30e2a4721d7e250481d43c0edeadb40","timestamp":1697792352,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f01551220149da347cc8d88f970c3a014de162231bbe2c6b6f8b977f45c2b60b0d2052084","timestamp":1696842144,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1698911760,"dpid":"105"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1696842444,"dpid":"105"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512204a990fa9cf6ec736ee690ab111e9bde63b2615384a56b40db50eaa3bfa19d1fc","timestamp":1696961232,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512205c33c5b575919cd5dfdbcae96b335681a9fd72d8cca0482bf761ef6f2bb815b9","timestamp":1696944228,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220e46482f58f98a662de09515c518875d19ad5815effe0305a19ae113ee24e4c03","timestamp":1696942104,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220210b3fed6c321b8b3258241c07b791b8f64f07cfd349afefba85f1cf50d7481a","timestamp":1696941732,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x8f79e11baf8d51b43253181d18c55f177041ded43dc9c9672995a777468b3640","cid":"0x0f015512204694fa680941e0723a66f03b755e81baba5ac3d7d0b48569b76649e8f5bebb4b","timestamp":1697040396,"dpid":"107"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x65be6859a644c7bc213656bc2ffbb228819097e5a830a0d84f681597d30df140","cid":"0x0f01551220b93efc4a93e3930240b6b73bc0bb8cc248a91f81b75af382d9ac24d72ac345ef","timestamp":1697792640,"dpid":"108"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xb8ebf456801e699d1ac6aa26330c041d6c28ceedb7062de145d478a69b7e5820","cid":"0x0f0155122028ca283b93da193e6e73785f3bb9bdaac6bb44c4433d0141ced0f9ef18c7d0db","timestamp":1698054684,"dpid":"109"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698323460,"dpid":"110"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698079308,"dpid":"110"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512200b0096b5867205f23384349f18aefee7e47e1927be1079c2b84a1ddca165a157","timestamp":1698178344,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512208992878828526d44bf352a455357ce72f77d7dc2b1f71b248db7f3c4df04679f","timestamp":1698177444,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f01551220af0bc91008bdfcf0f05188052122ed4262d2667c87a6aa962cabb11e31bc933f","timestamp":1698747864,"dpid":"112"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f0155122053cb052093615303fae1741d71f86fe18d656f43f70602bc379d8eb6dfc69ad7","timestamp":1698747720,"dpid":"112"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xaa6e41ba11eae99e35c56cab24c16a6e5473e49d9be3f59901f15bc3ac5449d4","cid":"0x0f01551220da6ad5231abc31c3ae5edf69b5b52e339df6a453731adb2068c26eb2013d9707","timestamp":1698782484,"dpid":"113"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x4c693ef748d114e76316c3407a0d442f9d9d64f1a7ab9a9c318a2bd4a5b14a77","cid":"0x0f015512203203a4104a1e2478ed314ea918b7fa667bf04a0e84f2e57f0c396841df3983f1","timestamp":1698782652,"dpid":"114"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f015512204765f0ba19163ce27730a917da91b1fe448a8ab0722aceca648dcddb85ffccea","timestamp":1699355784,"dpid":"115"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f01551220109f00c84c67068052e782043d08af74cab99a4ec56e442f041dca2de44c5a9e","timestamp":1699355412,"dpid":"115"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512202411f0188e2db2e46dd1a7d3cd736926228deeecfbf9397c8b76067191272434","timestamp":1699954776,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f0155122089afb0c6def46745efc1eaabf44254d8fc4ca943f53e4d82dcdd8a2cbded7981","timestamp":1699887960,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512207c93e0ec1b4c56a3f08934f555791a62be8abd7e78456758d5b65c0cdd7a836f","timestamp":1699608000,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f0155122072f88be300d505c2c03197f114be1377b1c58b6f7554198eb17a6708fabd36a0","timestamp":1700053860,"dpid":"117"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f015512208f0866a3d06693c7e1c7916894085864690643caaf7ab0055264f677e0bd667e","timestamp":1699954800,"dpid":"117"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220b66a4185023ca8ce27e10c8ff6752e78fb60d67ff4dfe3960f0758e6b593022e","timestamp":1702053972,"dpid":"118"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220f5fd32994c198aa5588ed19f93b74116fedd046951ad9797242eee0f12c5e2a7","timestamp":1699979532,"dpid":"118"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220e73795df1898e6aab1dc02dfa9ba1164871b98b359b74b72886cb08712e12f12","timestamp":1699984152,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220a895d90ce662de4cb21c88029bcbb7b6fe49e03fa8c35cce7869bd09de36aaea","timestamp":1699983900,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0xc3fb14242b8038ff617d4e31b26ad0d2594e59c7e010b5b25bd1f5d1d1ab49de","cid":"0x0f01551220ae6d7d9e91b90af9c55aa7da36ceca6c0184a0ace57f24a6216c9ff452ec7339","timestamp":1699984440,"dpid":"120"},{"from":"0xec29aca1a8740b8c5e2e06ebb52290700b9a2c40","uuid":"0x0ae8abde65748fe1ced55a91190483d29ac72384593e0dee1eb4a36ebf9c31a0","cid":"0x0f01551220df36b21446f6dc9e3ba055f20d5a727a2c7230a1f93f21a5bfe0fd7326aa63c3","timestamp":1699984896,"dpid":"121"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x6221f9c34c95bdbaf8b3bd7685c13bf50ace7a160bf28d98aff645ec3fb8e6a0","cid":"0x0f0155122067995ecfc055df88a582b9a1e1f1dc2587c1a76dd5afa1dec281c47f76d5ed67","timestamp":1700005716,"dpid":"122"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x2859eed83647d87114be9fb521ed5a51e7cdb924cf493d7e59e4b73d6bc8c346","cid":"0x0f01551220b4c0bcdb82ae88ecd2584487a63c8732e53b4f910e3cb4b2aec008d878c4579b","timestamp":1700006352,"dpid":"123"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f015512209993f6809c47dd8bc0443c4125ee92e525f4893acf2ca315c3cfc5413412f1ec","timestamp":1700046552,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f01551220e8df95ee93c95e2741fce2acef1a6ae153cf3b8474ddefa7a99ddc2c1eb13931","timestamp":1700046432,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f0155122042b4a34b09a4e8a6ce04608c7dffeae6bc062c6d26f7a333b07d4021a3b49732","timestamp":1700046408,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f0155122069111964df6b4928906d649e3ba2aa55569c9a2aeabd0616da9f51a44d673b9b","timestamp":1700058384,"dpid":"125"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f01551220721aff2f3e00530a72d440a38bf7570b21ae0eb6cfd0ef4b8fb10875fac95c1f","timestamp":1700057772,"dpid":"125"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0xa3e130367fbebd19013318124d7d089536db6d5688e75c80772875e65b050ecc","cid":"0x0f015512203ecfb122b716f2bcbc7c4f1bff0489210d52e295bc7bd008a18c56f720de8ec7","timestamp":1700059584,"dpid":"126"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220a60380f7f954d667b0583b954fb72ffd94c59ad3417377fd8513e58e06903a5b","timestamp":1700063832,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220306b0b6e24f14ab86367db5427347e39bc5d49ba718931a4efe0d807ab168e4b","timestamp":1700063400,"dpid":"127"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0x2cc8cd59679bd6e95683ed68b681add38c62e459406047f00a34e8ed0549d9bb","cid":"0x0f01551220e931c8247b57d7c261d00f509960dd637db0ae80bd542a17c34d615932dc6c63","timestamp":1700063832,"dpid":"128"},{"from":"0x13b71b614715db683d0985f15dfd9888c429317b","uuid":"0x782136c47d959413bd15ed0b9fd5fdecb7a06437751bd5dee317f87a09d019f1","cid":"0x0f01551220d36e5b943c41f27942bdac19364f79f95f76df926aba53cb01d150b552e4206f","timestamp":1700754096,"dpid":"129"},{"from":"0x73e4d86f1686671761c640556fe2e12a2a94c4ad","uuid":"0x0aba8b597b2877138a8785d7cb0a8ed230cb1a9b2f52517d6676cb832947d39a","cid":"0x0f0155122008b11e04f4fba10c61564ffc65ecca9d232a20dcdc001b38736c4c6aa0f3d3ea","timestamp":1701434724,"dpid":"130"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122000e10fa0b2965d2666d5a108fdc6bcb01af37c8bfd5a3afc9d6c1aa354f6098c","timestamp":1701703056,"dpid":"131"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122076eabcb47c97f19d71ab1bfcfce0987be7f5109b066569d8b4be421f38c14c46","timestamp":1701702708,"dpid":"131"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x1d8ff65463a48809e6c4a9da98d864dbb39a6e70f952a7850513d9f6343fd307","cid":"0x0f01551220b0be3482781d35a1648e29cbe848ec7d1d83c9028b4a7c27392dcbe2ba9492d1","timestamp":1701788316,"dpid":"132"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xeac3f6244306f4afa2e4d202e80909d4818a49dc0c6a14aec56d0a05b8195a64","cid":"0x0f01551220b8bd404569b21cd44f6ad5451edfc21336494145e4e8bde5c702acea494d4a05","timestamp":1701795900,"dpid":"133"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xbf07d6a25bf38eec9a87eee75afc5a9b287c6c8473a9d8cf367d6e796323623a","cid":"0x0f01551220d4e5ef8956132f8481027b41c94323c6e76b2335f30c4f3f3fce66e77aca73c1","timestamp":1701872976,"dpid":"134"},{"from":"0xf44fb21f73df7b54c3305f1326df86ab073731d4","uuid":"0x7292bd468b30e40b3c40a39b4dffee06500286bb1a44c59070291a5f1ef56ca9","cid":"0x0f01551220e5e75323762d53eba66756b3cbdb6e9e45e9ff741d3894066d3b2857d46a660c","timestamp":1701875664,"dpid":"135"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220b876e7933f617fc1fcdaf86797254fbefc4754b793def83164cb554c17996b07","timestamp":1702202688,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220089b9550d2cb5b107014545de8d459181cd7a152943c02c552af57b54a1d94e1","timestamp":1702145736,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220fd36de1434faf71b4b1ab2a12342504678055ee2685af920de7fcc897315b382","timestamp":1702142316,"dpid":"136"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220dd652b98741db1d28d7b990e5ea1f3ba54112b3b8e6ec3bb01018d853279ba4c","timestamp":1702439796,"dpid":"137"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220819b84a99e498da48505323e46852640da77d055cbc0036d657d6dc7c6bf5007","timestamp":1702430448,"dpid":"137"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220995897dfa81254a1f3d870bc8a57c16e22b890c7958d414904de766516d9aa2c","timestamp":1702512600,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x7e008f972f815b02881457ea07f03b9a4eaa1b4a45b61fc22c925b7f50015a6b","cid":"0x0f01551220535462ad82251639194ea94cdf68db782fec335c8f2f73a13134457483286b6b","timestamp":1702512876,"dpid":"139"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f0155122039e36aab0d90bb2772154b2063089c213a012d86b3fb1ca77526b78ee7a8f630","timestamp":1702513068,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f01551220aa4db6c4cf880f0674a5edd4835dba05e0bac117adfe566361b5ac1765487706","timestamp":1702513164,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f015512206b5f100c2ea07ae1083a6fd93e172efb81a0d4ab2b43d6138f3fafc6288dbeec","timestamp":1702513344,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220697369ba9d9da8fa571a5bcc53986e020252a7d6d64f3661c1ba9590e7cba65b","timestamp":1702513392,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512208e3570f0b0dfa9a93d17fe0ef6a82fc2b72b29e59c2fc12711a5c9f51a0de453","timestamp":1702513452,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f0155122021a6c2afd04b4770042982b0c74418082374380741cc3802fa85cc594f56569e","timestamp":1702513524,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xac8e69eeea26aae8b657e3466fbec53d2f5afe65fbbf0d6d1c6f656b3f390a74","cid":"0x0f0155122083dc3d796d1391aa931301a744d65283969f452d5289cb5c71c548c6edb55859","timestamp":1702513584,"dpid":"146"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f015512200f50a0f502a5b405c40fac0fc9cf3765eb63da20dc42be1b02eaf83b375f599c","timestamp":1702513620,"dpid":"147"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220904c16b294634d220959d0e3d9d1f443e929a53604f6104fc53e050b44cc53e1","timestamp":1702907160,"dpid":"148"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220267c4eb8eb592d8d167f1b55f89bc96f7660fe3d8e2ca29ecc307a817474cb79","timestamp":1702559448,"dpid":"148"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122048ddb39fb53041b0ef9039b376a406e6b263cda0eeb58815f0976171fecd4f4b","timestamp":1703072388,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220de5bfdaf769cd2d703f8eacdc5de1d982901f05fe6258df98f1599d0474d967e","timestamp":1703003868,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220c21697f0031be23b923a7db26af93c6fb3fc8797252cb626b5e17cfe2d1a14f2","timestamp":1703003448,"dpid":"149"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x85d5f216ff2be7742bc640646b4d9b9836a20a852ff25ce715e095b3e1f4255e","cid":"0x0f01551220bb03814b82b0fcae80ab12471446407608899e0933665cea73c14f391d445b90","timestamp":1703205816,"dpid":"150"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x2add80498110745a1115061b43c7067c92018c667f6e0da0bf0fee267241a3d2","cid":"0x0f01551220502682b3241166c26f25cdec935653ffd85b4024ad5316dabba71f689d623adf","timestamp":1703212224,"dpid":"151"}] \ No newline at end of file diff --git a/desci-contracts/migration-data/migrationData_Fri Mar 15 2024.json b/desci-contracts/migration-data/migrationData_Fri Mar 15 2024.json deleted file mode 100644 index ea6bf99d0..000000000 --- a/desci-contracts/migration-data/migrationData_Fri Mar 15 2024.json +++ /dev/null @@ -1 +0,0 @@ -[{"from":"0x41a933bab03126d9c1ad5052267edadf265f58b4","uuid":"0x4d3f0ee8f61bc55037076ef55b7c8129b9cf86cf2e3c0146c1378e7356baa99a","cid":"0x0f015512209a40c7ac52c80bdf4480a69945e10b2e79e7c873f8efb70e3c0c5e984d0e47f6","timestamp":1675737468,"dpid":"0"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818608,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818404,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220c17fc203b637a2439ed29b4f8f96610c87ec84aa82b611c08bb30d540ededbb4","timestamp":1675781796,"dpid":"1"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220d502ebf0825885dbdf87a89ce524108290858fc0187b31e97c868e9dd98a0d18","timestamp":1676096820,"dpid":"2"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220eb95d36d9b314299a04e7e90f589e390beff9d94cccb951678a3db9cdc6a100e","timestamp":1676095440,"dpid":"2"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x14c6658aa83701bb18a8225e94ee008bec535c1cd430ffa3279a0df333fa452d","cid":"0x0f015512200d14a1bc62c9ca9d8256c76f0f7c64c228461fe932790ccb63d40087a1666f88","timestamp":1676725008,"dpid":"3"},{"from":"0xaf6d67eb6a07cd7f3d2d690499841042fecd137b","uuid":"0x2ce2eecf9cf99de291623a577afc6f453659a5eed14e0297fd3c4b0a7c88276e","cid":"0x0f015512204adeb2ae11ad4dad8fd61507ecf4bb56e8f85558e6f9d511a55edde1d8f8d47f","timestamp":1676988612,"dpid":"4"},{"from":"0x12ab259853038a8b542b77d4ebf3af671b7e8e73","uuid":"0xeb4670ff98c76bc9c87bbb0c9b48ac34b4416a60f419ed1e12927c7270f231bc","cid":"0x0f01551220f10709a2264cfe211072cc76ad6e6d3c68eb859651af5c17054bd2bdef041103","timestamp":1676996292,"dpid":"5"},{"from":"0x6f5e440d9fad549913512104a8956098c7c7272a","uuid":"0xf90b7a0acdd1e4f958f0955ba9b6de5f1822d34bfce88748db767957c3e1c4af","cid":"0x0f0155122084f827480eb0f8e772e99292c8bcea8194f46f71c831277a35bbeea388568e9a","timestamp":1677066240,"dpid":"6"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122058ae4caf6f4bd65bde8d4190931b4571bac4a8dd277ddbe522bc8b886b65f17a","timestamp":1677081012,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122068d207508426ee3c8a17616846ef9958c99d9d9d0ad1cc78ee2bd987f6bd6db1","timestamp":1677080820,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x38009c640482b5a7880f78014f467be987151e5abaf8cf698601d7e8f2dee8df","cid":"0x0f015512202d3d21c9ad0494f149c2f1289dcb5a3b35f117fc6bc0ef5328637789424fb8c5","timestamp":1677144720,"dpid":"8"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x71b1b81b823d60c7ccd855e030188c91941e0b2120391166228daa8fa0b105ee","cid":"0x0f01551220c94af041db6bfe0b46a4e07389ad78e462219fbd448076089596ad12a6801f79","timestamp":1677230328,"dpid":"9"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220be730fe1e9ae927e4bc786c068fced1e7583f41bec29c1ad8481c843934d3b9e","timestamp":1677511224,"dpid":"10"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220e110cc29d132026ab3842231caa37fde7be2b30275a272ab7a93992386ff7fb2","timestamp":1677510672,"dpid":"10"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x447fbec7a42e617052e792b1edfda430aa0faffec7f105dd7a54ff95bd5ea985","cid":"0x0f01551220dfe8aef953593b5444fdb684b23a5bcbde97476dcf42b32803b6794476aff2a0","timestamp":1678309056,"dpid":"11"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x5f6d2d91fa15a5004d4b7af407ffd8ce768694f5cab631f36c0984894f6f8c6c","cid":"0x0f01551220d520bc99de67d90929118eafefed5927995e541c6b201a455afd5f3f155c4b15","timestamp":1678771692,"dpid":"12"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512207cc5fff1a8eb0b2fa342d6523d8d452ca602d82af065daec2677fd0e61a864a7","timestamp":1680117252,"dpid":"13"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512208dccc1916b787f489adb0c311502e94cbf8ae04af45ff199fadd145361121220","timestamp":1678814328,"dpid":"13"},{"from":"0x60b059dd7799d156f035e6d3ea51262862bc9d4e","uuid":"0x642e30a12bfdce5c5d300578ac7242742a5f359b5561fdb86aba885349118468","cid":"0x0f0155122012bfe6212a9372be0fe15f2274faf82e5bbad020eb568cdc7a6fc2845ae6f067","timestamp":1679014104,"dpid":"14"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219484,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219328,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f01551220a9a416c935b1d5567b5e2991a9dc8b36338704d32c7715933f39a772de69150e","timestamp":1679219244,"dpid":"15"},{"from":"0x32b1f642d5ce695be9ca853aff84d59af5e02116","uuid":"0x21be1e83d8b580427585617ab76531420dea3ca384d3eb5328610c081b2c5756","cid":"0x0f01551220dafc5b29ff71836069925876f573c4e084c770d66371ecd48f3407c5803cc70d","timestamp":1679343324,"dpid":"16"},{"from":"0xa5c21ba7e36cae9af5a5894a9a8a65bac3f752ad","uuid":"0xbf4e8ccc9e5b411edfd246c92b3ec1d829ca4b1eb41701366ec0ff21d9017920","cid":"0x0f01551220c632038257b7e5b73160725957b4f4da2af52004a2bd47981009c94db9c1066c","timestamp":1679409324,"dpid":"17"},{"from":"0x71ad8aee76d7792ec41f3cae707b65594c67373f","uuid":"0x0dc8d351f011ac36a92a714073c6b2ad6e4d5107eb81ff70670c6737a4b6a94e","cid":"0x0f01551220c63b85344cc17c92bf11664a86b7d35e9fb2e6fcd02dfe2a1df19630a124d521","timestamp":1679409744,"dpid":"18"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x1737974bc778096d399921cffb55fa2a0a58b7413eee9a5d9772ea544a56d3ce","cid":"0x0f01551220551b199b7e78003e35010a0fc62759290d362affd13d6f01872cf9846e21b12c","timestamp":1679539764,"dpid":"19"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512202dbe5b2beaf6182583a63a23d587a5c7a573d8637d453445e1d8325a50abe867","timestamp":1680554796,"dpid":"20"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512209e0dcbfa6f3cec9ba0315f70a4941d6e410456899691ab0701904b4592d9a4be","timestamp":1679540424,"dpid":"20"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637288,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637252,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220823b961f7d6323255c47e996afe192c96cb0babd5cf91383c5ca505b00af88e6","timestamp":1679637204,"dpid":"21"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x7a041ca4f95c29e37f84e084752aba25cdc5e4a57e2eef8e6ba02622e97cad63","cid":"0x0f015512207c1f3bcd940e08a792dcfddcca0fd350fa6d05afe6dbbba0f94ed56e1878d807","timestamp":1679658768,"dpid":"22"},{"from":"0xaa572e27403dcabd42f0afe938bdd18c3b52523f","uuid":"0xaeb5c1f0576f6c24fd087c9ca9837452c0ac5f8d41104becb848b057d4cbcf76","cid":"0x0f01551220b97f2b4a0ed522b7b888b3d447a9653143098fe0991482cd02cabea69951b6b2","timestamp":1680567024,"dpid":"23"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0xece33e446b40791e7d5079daf61fc5d7a5ef41c0029297b8fa4aef09ec9c1825","cid":"0x0f0155122050118b2b1175fa6b3dbbac44651b048694f7de272bee5a53cb122a3aab03ae23","timestamp":1681191960,"dpid":"24"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xba82c370711c6a35946fa10ac32d27019ec1d0981057fed3d1aa9025297c44b8","cid":"0x0f0155122008f915011dc3f8bed078321740440a869c23a0238938f0902f94567291bae372","timestamp":1681495752,"dpid":"25"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f01551220413f7132abee3941f9db9c875ac4ab2c84888249d2558496cec2f01f7fa0b8c2","timestamp":1681497900,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f015512201237f9c3c73a3fa6a55b80d67bd744fbdd7b19693ed32fb0465485c1d1bdf8cc","timestamp":1681497684,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa94370567701bbaaca632e502b4a84c07441daf07bf1a23ca2a46004a35fede0","cid":"0x0f01551220874f2f08bd5d67a432327d6d7ca987b4bbfc83b0db03c76453d73a9395899450","timestamp":1681505184,"dpid":"27"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x7664a535b66afbf011d6884a50a280ae9a503ce94acc9497728d459a153d827d","cid":"0x0f01551220eca5152df9f89f614a5521ba8f8a796719772286152a11e4e8c4659f4d505efc","timestamp":1681506588,"dpid":"28"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220574146a7501807df98a7547c0b3d0bdbfcfc0b29704c823ff86571b9a3deab85","timestamp":1681736628,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220c82d987df438ab758c9b557259e8fa0f4e1c2278651c802608fbdf8033419821","timestamp":1681736556,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220be43004fa14f3ca7e2e9cf01f1a0b7906b3728e53c8b1af19e309e1568f85cc5","timestamp":1681762272,"dpid":"30"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220734c2b0c3a1f21c05663f5a9d2b258d3baae0847e06da7699959aadc6616c026","timestamp":1681761420,"dpid":"30"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x57e2c2007b7af4859a04a5a1ed555f17f4d54a969158bc73f079b7f85a133ad5","cid":"0x0f0155122007140ffce5d9d7cd93e847b4ddaa75400b0baab040ddc2ccc56c33a141458556","timestamp":1681805808,"dpid":"31"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x5207335dee8c3818e7cf16b4a11ade55ab52d3957b8bd179cf351b8578746c03","cid":"0x0f015512200053d8f17531e05fb7d33978d35eb4fb6028dc8414369fbdf5a660cb22914ab9","timestamp":1681830960,"dpid":"32"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x8e794cafc680e76baeeb09e74ea413c816fedf6b716337d07abdd5657f69f822","cid":"0x0f015512205aca92353605ea8a45e732995d51da82d0dcb08089f907420dbe60ff1795dafe","timestamp":1682014560,"dpid":"33"},{"from":"0x134e95ce73fbb2a223e52351f8492088a86991ec","uuid":"0xf1a54e169d7c721a532b63fe25a070c673dee267f9688537ea9005f9fce8f118","cid":"0x0f015512202a09ce4187780645e8e49efff4ea3b0caef18ed60c42d9647890fe296db7d3a1","timestamp":1682144088,"dpid":"34"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f015512208076546c5b3eab9a046d4c3c7c214fa94bc80a6d67c6b310e8b3d8e4da0c17c3","timestamp":1682813004,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f0155122060953bffcc76ff9af880b9c7dc0e69ab8f8c2c2b9d01afb982d1b6f38bd3eca8","timestamp":1682746284,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f01551220fc56171ee7ae7bd3eb3e36d2e88c34d26eef0deb8a2850aa70874734324a5c72","timestamp":1682534976,"dpid":"35"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x66ec71949b03ac1cda5600f93a042cf0ef4a5fbc114abb5ab00f879320e67429","cid":"0x0f01551220a2e49ddbb71fabd49f69c44aeeb69f597fadff2061adf6c46a7d6a8f77848d09","timestamp":1682670864,"dpid":"36"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f0155122003fd6d8a9eef363a8f0331c364da74dabf485fa2c90142d6d68a5045f1d7068d","timestamp":1682793408,"dpid":"37"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f015512200370361d9eabcbcab401ef4d4f97005094f536d3b7f89353d84349deb8014c66","timestamp":1682793228,"dpid":"37"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682822136,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682814000,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f0155122006c38ee5c3d87df8f1871df54b987c1ce43726f892a9ddfb08be670863bc4970","timestamp":1682813880,"dpid":"38"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122091768c624c35d1bb57139837d71eec4bf81c2888616f5a3cffbc0351a172f6c1","timestamp":1682849124,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682821080,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682820648,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122033259ecc232dd46a608ff88651128a8da6bdccc2c917a0c2ef56b4dc27f7e498","timestamp":1682820372,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821884,"dpid":"40"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821224,"dpid":"40"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220ac1f68266f0f2a9e7fa96731e46c54a86aa36bdbd4a22cf1a5c08b2ee9957600","timestamp":1682854344,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220e49575cb06ca399247ae08fae9a8b3a3ff5de24b6a8dc29e44ac3ab6115c1539","timestamp":1682854224,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0xc73b88a9747fb3eb3fb051bbb3971faaf4819d1b8cd041028cc5531e3f9c6e94","cid":"0x0f015512209cf107adddf229ae090c27cc3998b51daf075dac2e3824d828cc71e1c3782903","timestamp":1682856480,"dpid":"42"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x13ce389478fadc96534f666ea8a035dc54c4d08f12ec16bbbbbb0dded66e93fb","cid":"0x0f01551220d46086ee0c05a4f167ae2637ee677a562ea1832d38cd953900b43d4836d5ec3e","timestamp":1682951112,"dpid":"43"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0xfba4b603620f33f51b5afbdf87de9ae79796d5ac1d4ac6f19329460615a8eae5","cid":"0x0f01551220f078470899aff3081b145084f68c9a2445b99322dcd658a2650f62a75fffe89d","timestamp":1682962248,"dpid":"44"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5e53b3b10212b4ce9cdec84c8fafbd305d80df6c778375e2977620d1b3f366c2","cid":"0x0f01551220e5895006b048366ad69277566cb11b20ff47201fe00f40dbf36f3d36c5137456","timestamp":1682993892,"dpid":"45"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220e627616fc85b6405cb28bc119f5f5073ac4c8796f6c3cff19d78a782a54ff32c","timestamp":1705420740,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512208f74fda7bac4317f39ff66c233ae140290d6ec58c604e73d0259ee384040eac2","timestamp":1683299940,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512202dda4e35c872736baecfe8d06d38854bda736485adb616f220fb4b19919e4562","timestamp":1683298680,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220bb1fb9ca4d11adaaa6514289cdee3c0b7ee3cbb848b49be0f9da3dd8a1dc0b0e","timestamp":1683227616,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220fd53a16eb6b7a09035a0f62c96a6a7dfe38948b84b44ffc8a8107938c87af450","timestamp":1683222132,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512201a6d456535ce453d3f62ce0f0671f8970ec00638d2271bf52b03c0520a1871f5","timestamp":1683053508,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x90ba1ee3a35ac4377b45b8576d2bad8dd590b8d97fc907966b08eb15061b874e","cid":"0x0f015512201f746518f1f6b93acd19aa5a9af16baa4cbe66e48c71548d8087f6067e1d454d","timestamp":1683222948,"dpid":"47"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x3afb6232b1af22d2d2b32c8b8f93f51cd826fde329b43c1ad296b090810ea96c","cid":"0x0f01551220803851d9e43a70fed0e93da3f8e720cba9f4b9e34130a3648b6a67cad93d60bd","timestamp":1683232692,"dpid":"48"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220a4e515a62882a47bc943ffe60338a81d5f0c3effff4f4494c84565f95141a50b","timestamp":1683237288,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220d866d792ea34c8f71d6d855dd3901605bb91d0b451a6e7c5637da941408544df","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f015512202fd9deb76c3a394930c41135746ae86abed45816500dceaa5483d2b4d206e278","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f0155122093f39a0766cc860ab7853207cbe2f52a3ba9d6eeb7baaec5180b3b63de07259d","timestamp":1683236460,"dpid":"49"},{"from":"0xe861856c961f853dc47e5f2ad1fa2b9ea20e4e88","uuid":"0x29d466756bc5ad7e00d1197785c6e18c9adbf139ed8cd9669a381d4d3ab5185e","cid":"0x0f0155122031700de6766f972518cc770961fe4a4aabcb4e482700cea3eea5735315b25518","timestamp":1683886968,"dpid":"50"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220124bbb6ca94ad4bbe9d46a6049df553c4fcd886f9dab60fb55b5b3b393cd572c","timestamp":1683931428,"dpid":"51"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220e4266d1c3697778cd48f4f600ea15b7694dcebcbc5a80ab7a5d425987e411b00","timestamp":1683930000,"dpid":"51"},{"from":"0x9fcc55e782c2e43dfadcc428c4f2f8f32e095782","uuid":"0x136d9f9e3810666980107d2d4cbdb0032ed4f67f591ad82ade1658a29702fff8","cid":"0x0f0155122057b7679b0135b03fdfa0f49ecf5599a50be9f2838eb96b55ca54e450a2c66caf","timestamp":1684412244,"dpid":"52"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f01551220b49ba9590a9b78640004d71de051fb2079d42a111e46ca808c842b227e3a890e","timestamp":1686612108,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f015512201fc246787a63ba676c4780494f7c3e1b4dc2ee82868e33923a5f14221c63c962","timestamp":1684862784,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220ee15b4b25f3f6e7922d998effc6a1c2415db9872c55cdb7eced06e84b69b64b5","timestamp":1685098776,"dpid":"54"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220d32c64e3089d45cc9e0ea93553a81932a265d37240f7255ca118cf93a0812891","timestamp":1685098464,"dpid":"54"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x814875f70b49d8855ca70a4b842ec18e0cbfed86f7dacc406451b6c74946b061","cid":"0x0f01551220547ea04b46ceaa946574346f2afb4be20c3706d7510cff38d316ef1d6aceceab","timestamp":1685442360,"dpid":"55"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512207e406a140574f56a8a0b6bf22ac7b1e30a751ccfdae880f623883365a8fd5ca1","timestamp":1685448060,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512208897402d12a4ca848c6bc5acad80b318044ad8aeb83fdfd00aa138a422030e8c","timestamp":1685444172,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5a82718776361e7b3218a895525f3bf16954747a919ad4279cd9a51f8153613a","cid":"0x0f01551220145c239a14db836ddec6d984dbd3e855902c3a3625b4f89deb169f9d2b23a12b","timestamp":1685525952,"dpid":"57"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512203a32dbfccc4f9fb3f87f0ef22596afcb03399aff87b49763bd67f1bbd8935e5b","timestamp":1685536224,"dpid":"58"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512206bbc0246759b51a6d9c3dae6eb449e98acf52fea38d2bb4c70be3b1360932349","timestamp":1685526132,"dpid":"58"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220d5a01de71ad36c74e536b75ec1d64e8b38272f8e1245274886ed6802b255d102","timestamp":1685613240,"dpid":"59"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220c9d4ab3fb535d36f96e59cd3d120a4cf2a72773a2b14a384aefd1381a52e5255","timestamp":1685613060,"dpid":"59"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f01551220ac71c7dfb47eb844988b61f0ee67e0464256473d52f9e2cc8393d6c7585c7a05","timestamp":1685613708,"dpid":"60"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f0155122085924ebb47c11438d9086ecea1a9a840ea3ee15cd36f5b731945d2e3d06b3a5c","timestamp":1685613216,"dpid":"60"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x23d7465583afc75276d7ec121fd82d34d4d38b6456be9990ab50fe6b2aec11b5","cid":"0x0f015512207dad824f451fe44d3192a14e5b1212ee20e4e11669819ee7df6141fddf26d96a","timestamp":1685614104,"dpid":"61"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x71e940680347c5c59fe91b01784ecc9c6ffcc4c65ebfab0d5b8ff9dc02166a99","cid":"0x0f015512200f484328bac037a779eed442d60d55fe19ce84ab0b52d951e45c24b700ebe1a4","timestamp":1685615388,"dpid":"62"},{"from":"0x008292e57a2d9b34525d82876068652e639e61d8","uuid":"0xc2ee84577e3896e376fb8ddb1f5b8c776b14a641e301db88e4995d2992946486","cid":"0x0f015512204961cc8ec829abb48db7362aac5600e643c38879009114809a0f5ffa21a20392","timestamp":1685615724,"dpid":"63"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xff282722074468174bbcca8902d81de7fb794a493c26edcca8ac007cf7638ebd","cid":"0x0f015512203a8aa5608277fc2026e1971013089a38b172b9211211e512bac708fb54964a2a","timestamp":1685719428,"dpid":"64"},{"from":"0x813eabba8e094bef89fe77b4f497810b9795ea66","uuid":"0x7c56741adb2e6f53a1bd354a7863b817a42d1e00d602450d351b5a3b57d96e59","cid":"0x0f01551220a3c2ca0411fc58b9de718eb7408872a6dfc3420518096fdb632d2a38f757d08a","timestamp":1686220584,"dpid":"65"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f0155122085acd5e30aabbc367b6d6ab8929c7410502f8a7256a0a5ab0f68624e8d60a37b","timestamp":1687805484,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f01551220245a17d29a145e9db11ef5f9bf760e0aae95182abe8f9830a2dfd54507f2d756","timestamp":1687805292,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220747a2fa16ca8ca254aeb3e9ae987d6522fa4e5be266b095f517eabfc37c6ce7f","timestamp":1687808232,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220195d0afb118d9073215302753e64759f9e9fcc5c37abb2aadc97e7e82cd1ca08","timestamp":1687807524,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x58703be0a37ec8b08984024a4659667901d03a7e1c66612766ca3a99ca369ac7","cid":"0x0f01551220e054f76eecf6ab486d3b64e5f12310d65753d8cbcca1bd8b2ec1d058f8b396ce","timestamp":1687812132,"dpid":"68"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5825084093f35bf3b98bb9ecd724400a0f01ed6c3a2ca27b16ea69b53306faa6","cid":"0x0f01551220c522c541b31394352d279616369fce5804ded295e299cbece7f0ed81c934051b","timestamp":1687812804,"dpid":"69"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xc335bda4b1f79e72ff0c5d061e6fdf7af21a86ebac698e90f0cca5ac69b3020e","cid":"0x0f015512204068d1d21f66b52f65c3caf15e4a522d0bc37dee1b425a337386769fd229a8de","timestamp":1687817568,"dpid":"70"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122063982338abc89465b4f573bf9aa1579bfa654f6aa2f12db15ab756d9220726e9","timestamp":1688024676,"dpid":"71"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122021e9bb44b2e4a93be54db472c3f8c5a2604c41ce29230923b7d1b86276f28479","timestamp":1688024628,"dpid":"71"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xfd54b8d85ecd02cac3e64144ab492cb75faf8167b75e73b7141a3404e639c1df","cid":"0x0f0155122049e0b9c318e2763599d6c4de8ac0d7e2a5678d1ebac71a38b47e31e2bd890020","timestamp":1688552688,"dpid":"72"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1689009768,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1688720808,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x04be83778e156d843a2551448780727a3c0bf21107d66d08e2f50f370be98712","cid":"0x0f01551220b0ba939c3c33cfe4d4bf663a635ef823ed188388efb15ef6bb3efcc4c3d21fb2","timestamp":1689041640,"dpid":"74"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x6047e10d820b878a9c553073a5c140bf1023fa3426bb25348037826399913556","cid":"0x0f015512203392d7b04341c36abbb607f36e02e46ce09e87563b089a20ab291637ab816ffa","timestamp":1689294216,"dpid":"75"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220735441775977d79d9e9bd0c1680b1efd6c5c85f01c63bd8b03ea6948bf967a1c","timestamp":1702045944,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f0155122051014af7073b576391b1065f67952d07b510ce2ac4fdd7da516c2c551e52acd5","timestamp":1702045680,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512205cb228099c1cb09650d8b3e5404241058843a2ee706708e025cc638d4186b2b5","timestamp":1702000140,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220a62e52b9c6a2cee08be12a4502664b51d950666fe4a5af90a3cfa913a613d349","timestamp":1701997248,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220513199f4bee602755360752169105632d04fc23173f1003bef320d0337d16c14","timestamp":1692330000,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220c6ddd5e72684c2dad436b6946ded360f9fdf84b73e99c08787030f57312c535e","timestamp":1692182952,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512201348deea506b711b91e43f1ec9d7b8d1a56c13d2226b346e9fdc4b14f56a8409","timestamp":1689518988,"dpid":"76"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f015512208e1e764e2b216acdc6a81d7da26016d4a1185a1137803a378c1059a7e0a65f2b","timestamp":1691496348,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f01551220e9765441e96679a63152b92240d3b59eec842b19660aee519b62b23faaae33ac","timestamp":1691493636,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f0155122010bc45102349d2dead31c0893a00c3959e0f75799d4dddd2860a8cb1ae286cfc","timestamp":1691492520,"dpid":"77"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x985b7ff62652f432b38e1b8aba5d3f4fedbc36345d2f818fdd0011c42fc1a43e","cid":"0x0f01551220a8bb15e9a0913fa0e63caea2bdb8f84b37521252b639231b8050e51c41ab8eec","timestamp":1691501736,"dpid":"78"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x10fd63608937c5589c65117fb50a3736196e854c2746e5afa18616352fc15da5","cid":"0x0f0155122033a510449f17a7331d387be0514110675b2036408cf5751a429e7574a348ad28","timestamp":1692472464,"dpid":"79"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f01551220475e5ebbbde7ce1cedb1a937a6cd13947adece0f50f7be0f0c39f5ce29d55302","timestamp":1693246872,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f0155122016b13ce97577c13677246cb18439f1b197ef62c31b7eeb4afeee59c2d169b004","timestamp":1693245804,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f015512204f1a4a775cdb3605abb7db7bc372fc1fb548752f87df0607c090228a49da8d61","timestamp":1700147784,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f01551220842e076e8c09994d9ede0411b1885e7f5673840507c70756c676028003a9bbe6","timestamp":1693246440,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2985ad1a8ec856aae4e741ec6442b1cb31df4e689741850cc7f401a2d23c74df","cid":"0x0f015512204cac6289a604e10132a917dabca35f3f75d77234d829cdf8aa81780ccbe18880","timestamp":1693247148,"dpid":"82"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f01551220710ec51c7187f14485779174c132b73a601e6db96295e0f70cc3090513f514ef","timestamp":1700147268,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f015512201e109b99ffc1d6eea87e4bae6e62057362d4ca88358ffedc970207ecf87a0a8d","timestamp":1693247616,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f015512206554b159bfb54e5c2ca68f6f8fe3ff431474fd459edafebec2cdf4a1e1e9b84e","timestamp":1700146980,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f01551220262bd98464a8a798f60c4df021584568feb20fe8428de4866b8d3ccb5d8a01fb","timestamp":1693248192,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f0155122089b4726dd6758d6ecff4793315bfefd5e5a275fa886fb87cc3fe711415411a12","timestamp":1700146392,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f015512204730b046919be6e2dd88cfc619840866713f532895fe7e110a4a68814bfe379f","timestamp":1693248672,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f015512206b80bc92b65b2cdf7739f7f926c2c1ffedece7cc7e24b7eba23a2af8d55597f2","timestamp":1700145552,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f01551220f784661a9ee6ddb4da6c0778a9a44fd0ab582072e1feab0e5b5f24775e464932","timestamp":1693249560,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f01551220204550a97883e629602079e67248acec5a82315e82563fc01f8da6fe26739b5b","timestamp":1700146176,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f015512206b0eb5f87cd5afb5a44d84b56435a3faf324149a72750a023e4002622f787afd","timestamp":1693249908,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220bf26daa8622f079ea3adb5fc871b28d814fe539b3094c8ee77ea7839eb50ab39","timestamp":1700146776,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220237e23eaae482991b11035fa1faf61af5ad65cbc8abe7992a7f7683f472de936","timestamp":1693250244,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x87cfcaf39a1c482f5866bfbe48d4f63d65d7db9fb992b6837c688d2013940c87","cid":"0x0f015512206fd907cd2fc2464c48bba2fe4acbbd967f4ea17277f533f6190ebc88fe583e8b","timestamp":1693251900,"dpid":"89"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512205e6eafe4aeb2971047b54a0f1dcb449c69321094bf55b9e6674434f3704a7db9","timestamp":1695653376,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512206afa0e08ee564a4bcf5a739a57dd19d5b835df7f5da459da3c442d3962d5b77b","timestamp":1694187648,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f0155122016df22da6fcfd0840b276673f1732fdc8276316d0fdbf3529fa06e63565399ed","timestamp":1694114940,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f0155122073452cfb6096325fb8f41f91eb93223f7d424352ebafb240bc61bc62040167bd","timestamp":1695653220,"dpid":"91"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f01551220cf13504896eb49ca532783f3b14b105c7882a0a712f19c031adfec44e08fd56d","timestamp":1694197140,"dpid":"91"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x43c4629df6245fc911ed28bd3e4fd92899dbed0e70d6086467ddf89407c41fe1","cid":"0x0f0155122050265ea5c933a4b296c88a16862c006698445750eb177f512e3613b9d364345f","timestamp":1695218412,"dpid":"92"},{"from":"0x262b4f07e42bbc33f597fcf0d854e9dafaf3d469","uuid":"0x9db9db43f2e485f733b91814cbeb189c03f6a4ca18c4f07729cdb9bc9d88f852","cid":"0x0f015512209a7f7d3d0f68ffb55d85d6da6c442c9e2b2389ea0b1261b13159fa9f098102d0","timestamp":1695246144,"dpid":"93"},{"from":"0x9452d0680a39195f59cc8a8b794aec0a81d51cc9","uuid":"0x6d7d697d017315f644992600e7c28f2914a3908ed134aa6b1e49ebe708c16dfe","cid":"0x0f01551220106cfb1003c1e512f5187ca90dfdc66fe8a4df16d7889413c38c5457fb4bdb1e","timestamp":1695246324,"dpid":"94"},{"from":"0x64b3f6f1eace5ba2d49c430ffbf085f4847bdec7","uuid":"0xba7fc52a499293973b4b35f8bbcfda823a2059c9a8a175b13cf35d24707b50b9","cid":"0x0f0155122083f5c28f77367e6084020d3c3621c39a17f108dfd21ef4d157c0aa9d5107c5f6","timestamp":1695324696,"dpid":"95"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x26a149a3b1efaa583e80571482cec997f375990f70bee46e3230bed5ba78fc55","cid":"0x0f01551220d48c3bca9221e49074d1cd6df4f0bbff5852baa1cbd24a9bdcd8ce54efbb9a50","timestamp":1695816576,"dpid":"96"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f015512204818e564ec9e3bbae2feff07d68040876da0436fb6d89fb5f54daf95a98d72b0","timestamp":1696594740,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696481172,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480884,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480764,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480608,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696479552,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696468416,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466964,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466820,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466724,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459584,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459560,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440036,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299912,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299876,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299600,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299000,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696296012,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696295376,"dpid":"97"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303944,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303560,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536972,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536936,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536912,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536888,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536828,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536804,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536756,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696469268,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696336296,"dpid":"99"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512207d74909d018b17bf267e9983f5a4ff1b1b7cb91314c7f4e3fb99ec60e3f6089e","timestamp":1696840824,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f01551220e88a7c59024cac199699b88226bf15f3dad2079ad7f8de522cd58d212a7e4cb7","timestamp":1696507296,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512203a2cbe6fe0167c0984e4139576143faff5e3afbda15e52091379c4788bcc34f0","timestamp":1696506528,"dpid":"100"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe3bcfed1e03918f9d7a48903f9a96e2589f8823d1c47b6293cd744b7d7d57161","cid":"0x0f015512200e0e343667925a707bc9194a7581e9350e73aacb16423757faf047229216ebe4","timestamp":1696589760,"dpid":"101"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x9e102f9a7ce12cd3dd4944b13d51493e7079ab344acc5d84e6f5ea05a12353fd","cid":"0x0f0155122044410acab6cec9a6fad6d5e92f690eecdfb0bebab46b04d4dfaa4cc50ab3cbb1","timestamp":1696605300,"dpid":"102"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x69114e8fa768f26d452f12090831b9c6e8d58ae100ac16ec68cbd661ee8b3997","cid":"0x0f01551220be7eb409dbc450417545a5612651c26d3ac6085bd09c11017d700d25e02331a7","timestamp":1696841976,"dpid":"103"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f0155122081133e104e9fce1fc05bcfca24152c735c24639fa938b2751fdb5dcc9bbfb699","timestamp":1698779592,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f015512209bfe5c87d9e68468f132e569e0583f33a30e2a4721d7e250481d43c0edeadb40","timestamp":1697792352,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f01551220149da347cc8d88f970c3a014de162231bbe2c6b6f8b977f45c2b60b0d2052084","timestamp":1696842144,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1698911760,"dpid":"105"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1696842444,"dpid":"105"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512204a990fa9cf6ec736ee690ab111e9bde63b2615384a56b40db50eaa3bfa19d1fc","timestamp":1696961232,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512205c33c5b575919cd5dfdbcae96b335681a9fd72d8cca0482bf761ef6f2bb815b9","timestamp":1696944228,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220e46482f58f98a662de09515c518875d19ad5815effe0305a19ae113ee24e4c03","timestamp":1696942104,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220210b3fed6c321b8b3258241c07b791b8f64f07cfd349afefba85f1cf50d7481a","timestamp":1696941732,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x8f79e11baf8d51b43253181d18c55f177041ded43dc9c9672995a777468b3640","cid":"0x0f015512204694fa680941e0723a66f03b755e81baba5ac3d7d0b48569b76649e8f5bebb4b","timestamp":1697040396,"dpid":"107"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x65be6859a644c7bc213656bc2ffbb228819097e5a830a0d84f681597d30df140","cid":"0x0f01551220b93efc4a93e3930240b6b73bc0bb8cc248a91f81b75af382d9ac24d72ac345ef","timestamp":1697792640,"dpid":"108"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xb8ebf456801e699d1ac6aa26330c041d6c28ceedb7062de145d478a69b7e5820","cid":"0x0f0155122028ca283b93da193e6e73785f3bb9bdaac6bb44c4433d0141ced0f9ef18c7d0db","timestamp":1698054684,"dpid":"109"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698323460,"dpid":"110"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698079308,"dpid":"110"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512200b0096b5867205f23384349f18aefee7e47e1927be1079c2b84a1ddca165a157","timestamp":1698178344,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512208992878828526d44bf352a455357ce72f77d7dc2b1f71b248db7f3c4df04679f","timestamp":1698177444,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f01551220af0bc91008bdfcf0f05188052122ed4262d2667c87a6aa962cabb11e31bc933f","timestamp":1698747864,"dpid":"112"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f0155122053cb052093615303fae1741d71f86fe18d656f43f70602bc379d8eb6dfc69ad7","timestamp":1698747720,"dpid":"112"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xaa6e41ba11eae99e35c56cab24c16a6e5473e49d9be3f59901f15bc3ac5449d4","cid":"0x0f01551220da6ad5231abc31c3ae5edf69b5b52e339df6a453731adb2068c26eb2013d9707","timestamp":1698782484,"dpid":"113"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x4c693ef748d114e76316c3407a0d442f9d9d64f1a7ab9a9c318a2bd4a5b14a77","cid":"0x0f015512203203a4104a1e2478ed314ea918b7fa667bf04a0e84f2e57f0c396841df3983f1","timestamp":1698782652,"dpid":"114"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f015512204765f0ba19163ce27730a917da91b1fe448a8ab0722aceca648dcddb85ffccea","timestamp":1699355784,"dpid":"115"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f01551220109f00c84c67068052e782043d08af74cab99a4ec56e442f041dca2de44c5a9e","timestamp":1699355412,"dpid":"115"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512202411f0188e2db2e46dd1a7d3cd736926228deeecfbf9397c8b76067191272434","timestamp":1699954776,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f0155122089afb0c6def46745efc1eaabf44254d8fc4ca943f53e4d82dcdd8a2cbded7981","timestamp":1699887960,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512207c93e0ec1b4c56a3f08934f555791a62be8abd7e78456758d5b65c0cdd7a836f","timestamp":1699608000,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f0155122072f88be300d505c2c03197f114be1377b1c58b6f7554198eb17a6708fabd36a0","timestamp":1700053860,"dpid":"117"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f015512208f0866a3d06693c7e1c7916894085864690643caaf7ab0055264f677e0bd667e","timestamp":1699954800,"dpid":"117"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220b66a4185023ca8ce27e10c8ff6752e78fb60d67ff4dfe3960f0758e6b593022e","timestamp":1702053972,"dpid":"118"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220f5fd32994c198aa5588ed19f93b74116fedd046951ad9797242eee0f12c5e2a7","timestamp":1699979532,"dpid":"118"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220e73795df1898e6aab1dc02dfa9ba1164871b98b359b74b72886cb08712e12f12","timestamp":1699984152,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220a895d90ce662de4cb21c88029bcbb7b6fe49e03fa8c35cce7869bd09de36aaea","timestamp":1699983900,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0xc3fb14242b8038ff617d4e31b26ad0d2594e59c7e010b5b25bd1f5d1d1ab49de","cid":"0x0f01551220ae6d7d9e91b90af9c55aa7da36ceca6c0184a0ace57f24a6216c9ff452ec7339","timestamp":1699984440,"dpid":"120"},{"from":"0xec29aca1a8740b8c5e2e06ebb52290700b9a2c40","uuid":"0x0ae8abde65748fe1ced55a91190483d29ac72384593e0dee1eb4a36ebf9c31a0","cid":"0x0f01551220df36b21446f6dc9e3ba055f20d5a727a2c7230a1f93f21a5bfe0fd7326aa63c3","timestamp":1699984896,"dpid":"121"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x6221f9c34c95bdbaf8b3bd7685c13bf50ace7a160bf28d98aff645ec3fb8e6a0","cid":"0x0f0155122067995ecfc055df88a582b9a1e1f1dc2587c1a76dd5afa1dec281c47f76d5ed67","timestamp":1700005716,"dpid":"122"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x2859eed83647d87114be9fb521ed5a51e7cdb924cf493d7e59e4b73d6bc8c346","cid":"0x0f01551220b4c0bcdb82ae88ecd2584487a63c8732e53b4f910e3cb4b2aec008d878c4579b","timestamp":1700006352,"dpid":"123"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f015512209993f6809c47dd8bc0443c4125ee92e525f4893acf2ca315c3cfc5413412f1ec","timestamp":1700046552,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f01551220e8df95ee93c95e2741fce2acef1a6ae153cf3b8474ddefa7a99ddc2c1eb13931","timestamp":1700046432,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f0155122042b4a34b09a4e8a6ce04608c7dffeae6bc062c6d26f7a333b07d4021a3b49732","timestamp":1700046408,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f0155122069111964df6b4928906d649e3ba2aa55569c9a2aeabd0616da9f51a44d673b9b","timestamp":1700058384,"dpid":"125"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f01551220721aff2f3e00530a72d440a38bf7570b21ae0eb6cfd0ef4b8fb10875fac95c1f","timestamp":1700057772,"dpid":"125"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0xa3e130367fbebd19013318124d7d089536db6d5688e75c80772875e65b050ecc","cid":"0x0f015512203ecfb122b716f2bcbc7c4f1bff0489210d52e295bc7bd008a18c56f720de8ec7","timestamp":1700059584,"dpid":"126"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220210e8caba0e00af12d153389051d4ea50d138a2c2b454b06f1325f8f8bf4663e","timestamp":1708492476,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220a60380f7f954d667b0583b954fb72ffd94c59ad3417377fd8513e58e06903a5b","timestamp":1700063832,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220306b0b6e24f14ab86367db5427347e39bc5d49ba718931a4efe0d807ab168e4b","timestamp":1700063400,"dpid":"127"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0x2cc8cd59679bd6e95683ed68b681add38c62e459406047f00a34e8ed0549d9bb","cid":"0x0f01551220e931c8247b57d7c261d00f509960dd637db0ae80bd542a17c34d615932dc6c63","timestamp":1700063832,"dpid":"128"},{"from":"0x13b71b614715db683d0985f15dfd9888c429317b","uuid":"0x782136c47d959413bd15ed0b9fd5fdecb7a06437751bd5dee317f87a09d019f1","cid":"0x0f01551220d36e5b943c41f27942bdac19364f79f95f76df926aba53cb01d150b552e4206f","timestamp":1700754096,"dpid":"129"},{"from":"0x73e4d86f1686671761c640556fe2e12a2a94c4ad","uuid":"0x0aba8b597b2877138a8785d7cb0a8ed230cb1a9b2f52517d6676cb832947d39a","cid":"0x0f0155122008b11e04f4fba10c61564ffc65ecca9d232a20dcdc001b38736c4c6aa0f3d3ea","timestamp":1701434724,"dpid":"130"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122000e10fa0b2965d2666d5a108fdc6bcb01af37c8bfd5a3afc9d6c1aa354f6098c","timestamp":1701703056,"dpid":"131"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122076eabcb47c97f19d71ab1bfcfce0987be7f5109b066569d8b4be421f38c14c46","timestamp":1701702708,"dpid":"131"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x1d8ff65463a48809e6c4a9da98d864dbb39a6e70f952a7850513d9f6343fd307","cid":"0x0f01551220b0be3482781d35a1648e29cbe848ec7d1d83c9028b4a7c27392dcbe2ba9492d1","timestamp":1701788316,"dpid":"132"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xeac3f6244306f4afa2e4d202e80909d4818a49dc0c6a14aec56d0a05b8195a64","cid":"0x0f01551220b8bd404569b21cd44f6ad5451edfc21336494145e4e8bde5c702acea494d4a05","timestamp":1701795900,"dpid":"133"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xbf07d6a25bf38eec9a87eee75afc5a9b287c6c8473a9d8cf367d6e796323623a","cid":"0x0f01551220d4e5ef8956132f8481027b41c94323c6e76b2335f30c4f3f3fce66e77aca73c1","timestamp":1701872976,"dpid":"134"},{"from":"0xf44fb21f73df7b54c3305f1326df86ab073731d4","uuid":"0x7292bd468b30e40b3c40a39b4dffee06500286bb1a44c59070291a5f1ef56ca9","cid":"0x0f01551220e5e75323762d53eba66756b3cbdb6e9e45e9ff741d3894066d3b2857d46a660c","timestamp":1701875664,"dpid":"135"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220bcc013dc83401bf1bb314b0ca76780487057b4f29615a361451f08542ad90af4","timestamp":1708382904,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220b876e7933f617fc1fcdaf86797254fbefc4754b793def83164cb554c17996b07","timestamp":1702202688,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220089b9550d2cb5b107014545de8d459181cd7a152943c02c552af57b54a1d94e1","timestamp":1702145736,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220fd36de1434faf71b4b1ab2a12342504678055ee2685af920de7fcc897315b382","timestamp":1702142316,"dpid":"136"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220dd652b98741db1d28d7b990e5ea1f3ba54112b3b8e6ec3bb01018d853279ba4c","timestamp":1702439796,"dpid":"137"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220819b84a99e498da48505323e46852640da77d055cbc0036d657d6dc7c6bf5007","timestamp":1702430448,"dpid":"137"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220b7256ffc53ad70214a702e4b30bf3e8183a6a7f2d20a5e3f5439db49457dabbd","timestamp":1707153744,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220995897dfa81254a1f3d870bc8a57c16e22b890c7958d414904de766516d9aa2c","timestamp":1702512600,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x7e008f972f815b02881457ea07f03b9a4eaa1b4a45b61fc22c925b7f50015a6b","cid":"0x0f01551220535462ad82251639194ea94cdf68db782fec335c8f2f73a13134457483286b6b","timestamp":1702512876,"dpid":"139"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f01551220a1386e567a5e1a73d9833d0d26782df8d0a34062456a2ee4e681b194f8c830e2","timestamp":1708801020,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f0155122039e36aab0d90bb2772154b2063089c213a012d86b3fb1ca77526b78ee7a8f630","timestamp":1702513068,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f0155122001aef818cb8368515664b83185a8e01797f2b0eefbc9f586a09ddca8a9ad13a8","timestamp":1708802436,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f0155122001aef818cb8368515664b83185a8e01797f2b0eefbc9f586a09ddca8a9ad13a8","timestamp":1708802436,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f01551220aa4db6c4cf880f0674a5edd4835dba05e0bac117adfe566361b5ac1765487706","timestamp":1702513164,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f0155122092cb302ebcfcd967ff995c7a7a461e98eed05f552121139b8633a4ae1dba90ef","timestamp":1708802160,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f015512206b5f100c2ea07ae1083a6fd93e172efb81a0d4ab2b43d6138f3fafc6288dbeec","timestamp":1702513344,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220faed6c16cef7c05f2b8a6f37490478bf25856cc32f52d050960528a2197baaf7","timestamp":1708802052,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220697369ba9d9da8fa571a5bcc53986e020252a7d6d64f3661c1ba9590e7cba65b","timestamp":1702513392,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512203b0fb331f678204e99de49e0debd36db0a1e44815d6ef39fd3f306c93d18f874","timestamp":1708801908,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512208e3570f0b0dfa9a93d17fe0ef6a82fc2b72b29e59c2fc12711a5c9f51a0de453","timestamp":1702513452,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f01551220da64c412f894d56208331d2ce8a6f11e29888b15d4d65b2b5a52ec81193a6c13","timestamp":1708801680,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f0155122021a6c2afd04b4770042982b0c74418082374380741cc3802fa85cc594f56569e","timestamp":1702513524,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xac8e69eeea26aae8b657e3466fbec53d2f5afe65fbbf0d6d1c6f656b3f390a74","cid":"0x0f0155122083dc3d796d1391aa931301a744d65283969f452d5289cb5c71c548c6edb55859","timestamp":1702513584,"dpid":"146"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f01551220b7a80cd9a6057e62834925024ab802795706e343be5c1d304135f8f68a18719b","timestamp":1708801236,"dpid":"147"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f01551220b7a80cd9a6057e62834925024ab802795706e343be5c1d304135f8f68a18719b","timestamp":1708801212,"dpid":"147"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f015512200f50a0f502a5b405c40fac0fc9cf3765eb63da20dc42be1b02eaf83b375f599c","timestamp":1702513620,"dpid":"147"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220904c16b294634d220959d0e3d9d1f443e929a53604f6104fc53e050b44cc53e1","timestamp":1702907160,"dpid":"148"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220267c4eb8eb592d8d167f1b55f89bc96f7660fe3d8e2ca29ecc307a817474cb79","timestamp":1702559448,"dpid":"148"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f015512209f4f928fe1a7e8fb872c6eb949502bbd6a982bf4ffaec5e3f2f8fac9aec82651","timestamp":1709143824,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122046b8c587821d9b1918d41b9afead51bcfbcae59b6c75ffa4f55eee5139514542","timestamp":1707406116,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122048ddb39fb53041b0ef9039b376a406e6b263cda0eeb58815f0976171fecd4f4b","timestamp":1703072388,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220de5bfdaf769cd2d703f8eacdc5de1d982901f05fe6258df98f1599d0474d967e","timestamp":1703003868,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220c21697f0031be23b923a7db26af93c6fb3fc8797252cb626b5e17cfe2d1a14f2","timestamp":1703003448,"dpid":"149"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x85d5f216ff2be7742bc640646b4d9b9836a20a852ff25ce715e095b3e1f4255e","cid":"0x0f01551220bb03814b82b0fcae80ab12471446407608899e0933665cea73c14f391d445b90","timestamp":1703205816,"dpid":"150"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x2add80498110745a1115061b43c7067c92018c667f6e0da0bf0fee267241a3d2","cid":"0x0f01551220502682b3241166c26f25cdec935653ffd85b4024ad5316dabba71f689d623adf","timestamp":1703212224,"dpid":"151"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f015512208a7070a9a1120216956a40a42e4607388135ecfd1f65d4bf5d0339d61f6acdc2","timestamp":1706832732,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220f5a4e879a08793b02f7a9f07c2d136053b9d2c348901958528b607cca8ea3298","timestamp":1705091496,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220a8c690fbad722773e549f293cd3d73e400d157213fdf93bc10f627858ec5be6e","timestamp":1705091376,"dpid":"152"},{"from":"0xe493a10f41a846b67cb12a91cac4b2ae22440921","uuid":"0xfbae316e2b0148b3f13c11052503b00fe1cac5672875abdf09092a65aaee97fe","cid":"0x0f01551220d1ef0ec2445118d9a6b70ee7b056eedcf7b24702cf3fd5adcad98f6be5b8224b","timestamp":1705491780,"dpid":"153"},{"from":"0xe33c428cbd313983a5432a3d255025e456a4daf5","uuid":"0x276da67ec23c8727b5e9951e63a5e1cd507720d3b1194fb3e4147120767f3e06","cid":"0x0f015512207905922fd01255f1a077a628f6f4c2525f6be69609e18f9419611968ad82258a","timestamp":1705579488,"dpid":"154"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x3fcfba6cbd10882d546c675a77f2a2ecb3a618e6fa633358ff8377a28540a84f","cid":"0x0f01551220908567a0df7c37399730344ebbc1e60d3757c0a45bdd5b41d10052ca92fd31c8","timestamp":1706550924,"dpid":"155"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f015512204cc5d27a1115aae826e242ec8cc1b6e6931bdb470070d83b2ff73aa9d7707652","timestamp":1706737632,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f0155122027a51c66a2c693b30f6606794ded695306784e5e727d6f5f049fcb80a6adff72","timestamp":1706735148,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x47f74c470c50ae5ddfe11da2f3b585d05ffbdc4dfb0c01547274676c4ef60e2c","cid":"0x0f01551220a8161f63c033a70021c6e60e471786dd1b45788ad392a2409ebddce3256b68a9","timestamp":1706738172,"dpid":"157"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xb04be273bc7f354da4585104aae0fbf4c548fc681ab9d40cba3d5d404e11aa45","cid":"0x0f01551220cc325f22df3238eaecad77db3d2ed028a2c57fe28c393e08b0c06e468a734525","timestamp":1706834520,"dpid":"158"},{"from":"0x020e8c4ea0fc434257e86c51b69da2d62106879a","uuid":"0xf6666111a06e00eaa5a4912162684ae3b1852b3387d3bacc243284e79562e6a0","cid":"0x0f01551220abf9ce0479fd7b8603c452275c252cc5d4060c5b7b88080a195c124d4345d47c","timestamp":1707473772,"dpid":"159"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ee7c02a42066b4b2b99857d89fb6f59baa8a2c40bd9aa602ff2f42876829ea65","timestamp":1707646572,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ba3af9f1c4d0b07d0063a308d8c67115088b496ed1732c03bb56ba1a4f35141b","timestamp":1707645552,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220a99be0a78266663897b0f223cb57d746621c5360fe83d0d2b653c46542a04aa0","timestamp":1707644916,"dpid":"160"},{"from":"0xb9a4b7f5a15dcaa88d8b25704925543f006fd0aa","uuid":"0xa763c3e4720c8ad2bf11a5e2b5354b0134cd7dd76c62b8dc386f8f13b0183a64","cid":"0x0f015512200b6e4e0ccea7a56cacbe0b94ff6de273aa2d2ecc4f1b6d53186cbb6fac0f2489","timestamp":1707848244,"dpid":"161"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xd6bfbb7ec4e1a9cd43d3066f51f3223235141057f881133b5abb1a475afb8b14","cid":"0x0f015512208eb0adbec6b4ab840a3c72e96512319c3f93b14512eca422a68de3b44e044258","timestamp":1707967356,"dpid":"162"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x045272643ba9f14c8f690ba8fd6137e85385651ce9922b41387574fabfdb221f","cid":"0x0f01551220bcef790971ef1cbfbf71e524160f6b640b9bd6aeb2eb3bb20adc49c6a64da589","timestamp":1707967740,"dpid":"163"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f01551220bf482a18ecf16d2cc718d5f8e6f8cbe0b8a4358e507d98f28868ce3a156a65b8","timestamp":1708514124,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f015512202f01576894f833ce4122cb232a03cd4ab0cc6df46d2569aec503e790026ad2f2","timestamp":1708453920,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f015512206de947161fda68b91d9baf0410906f455aa42d6c9590ba0541d02cd562920cd2","timestamp":1708094712,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0x99f716e51bcde24db0d5447cca159e8dd5623238b7fa5cb8568755caf6785770","cid":"0x0f0155122055d64bbe9f9b67bbe3ebfbe0e9dc35fac8a641daea35a613d026df1c469ce4b8","timestamp":1708109700,"dpid":"165"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xa4a574c98253571adc3d841f92768e82c7fe15d9a3afac0418bb67abd549067d","cid":"0x0f0155122025ada02539baf756f626886e566f10397725e1ccc7fa1b5ce9f12ffde0d68e1b","timestamp":1708372176,"dpid":"166"},{"from":"0x0aeba31a80842819ed4f74e3cabbe95d88bbf213","uuid":"0xaf059e2165fd8033b5bb3586495a1026afca64eb20767abda7fb56c0108bcf18","cid":"0x0f01551220c4d3af752b910b80348aebad8355d1bb272ec8ddfc84e151b1232e4ef9d305e8","timestamp":1708458984,"dpid":"167"},{"from":"0xb477ec716cd8676f4e2041f16072c263475c5a45","uuid":"0x9335eaa6ebcc2adb32eb5b535c1edc46a985153fc082206e398af65304af8112","cid":"0x0f015512205c3a7de0500439a66767d9caa5ab6a3f5cae78a249a1fe30950fa998a395e011","timestamp":1708690584,"dpid":"168"},{"from":"0xb477ec716cd8676f4e2041f16072c263475c5a45","uuid":"0x9335eaa6ebcc2adb32eb5b535c1edc46a985153fc082206e398af65304af8112","cid":"0x0f01551220b348bd48e570588a5a3d366932728247e4d75363506ca74d55eff4c6ae65ec60","timestamp":1708493796,"dpid":"168"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x6c5ee35c8e97e0994af70fb433e3063cef696c39f444c450a8588e5c8660dc1d","cid":"0x0f0155122066a67bf9aa1364c1ce39d5f2546bdc86f6fa090c6fd048b75303c5d2d1d1527a","timestamp":1708495980,"dpid":"169"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x41792e13198ad1f824be3e6b4ce73cb3830aeee46dc447f7f140a568b4fc3d2d","cid":"0x0f015512207802b158c58ead95c18cb6d16f33297b2f04e217fd7e02d131c0ef52d5defe9b","timestamp":1708501884,"dpid":"170"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x64777d9a15b2bce04a08d90fe28fbb18072ffbc0f0ae68c9dca7939bac4725eb","cid":"0x0f01551220330272c2fe78f9cf812f3c027a5ff18a9853c5a307706b2dc23f690307c57ac2","timestamp":1708516896,"dpid":"171"},{"from":"0xbc4f75a4579c55b3b347c316159e03ad9a233346","uuid":"0xddec1f7ee5586bf3bea2196614fdd72352aa0a9895e20a6723e2bf9c583d3ca5","cid":"0x0f01551220446912bce35832bd52addcb9e3f3a604d69b9e977de00ae775e2f747e8174e4c","timestamp":1708523184,"dpid":"172"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708532064,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531992,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531620,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531344,"dpid":"173"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xf5cdc6c43ec7085f5bb174d1588c5e2682e4654a7e507a1548ac9d6d00aa6116","cid":"0x0f015512206e0cec38abe3a2f02f0cc72c7d9c2c25449360cbcbf00e3f40aa28c1597fc378","timestamp":1708602732,"dpid":"174"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f015512206f752aa76cf3f0d477ae37e723c10702bf111adbcc6d1b523777d316bea8c041","timestamp":1708890600,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220e3305fb8c50c76e45061d4005e5c741693e3e5d092ec53d7a563d3056474b393","timestamp":1708729500,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f0155122049cc7e3e386bf0f35bec026b4db15a1d93e624b7b60c0847f134c300371c062a","timestamp":1708674912,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220ecfa2880c4795c7b4c44e7561090bb072128924e6241c46610d16839b632b2f0","timestamp":1708672332,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f0155122004f75f6ef073ed6ffeb88d21c06a48ef46a47e685bcc163f8c91da2226171003","timestamp":1708653516,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220cd73c6c245692bbcdcbe1a3a7b98f4df3eec04a6f33be8855d2f90c2277260ab","timestamp":1708619376,"dpid":"175"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xec97340e37b5aeed1ce82cfee79fd04cf4774444efdfede1662ec5abe60c2c59","cid":"0x0f01551220291475a25f74405eeb97657e62801642605154672a84537fa207ec02a371c8cc","timestamp":1708695612,"dpid":"176"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xec97340e37b5aeed1ce82cfee79fd04cf4774444efdfede1662ec5abe60c2c59","cid":"0x0f0155122076bfab5e6dbcae07a355a2f83e770166db53e68a979e49327c20c796650d314a","timestamp":1708695348,"dpid":"176"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xf349746f7a64efce843b8195c734585c060586d9a2123af35559baae249d2fe9","cid":"0x0f01551220eda2fa10397e39bb5943d272a160b3b3be03d3b9ab79e5b8bd2a58b83fbd3c82","timestamp":1708882260,"dpid":"177"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f01551220081201d4fee37bba68edb453986fab0bbbdb82a0d42ae3f297b9f579d884db73","timestamp":1708909188,"dpid":"178"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f0155122020be9b62d44c25b28e32970cf16a2da8f66b541da87b83b3d6c471e94dad80b5","timestamp":1708900680,"dpid":"178"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f015512202dad34a6366ce3f539902585140974e3ce667c00ea51ae8ca0e1e1765b565976","timestamp":1708900272,"dpid":"178"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x60d6758f5d408af09e9314bf29c01c24a73cc48ec6a2af832087c8c506ababf4","cid":"0x0f015512208a651930c7c53795244ed7dff9c534289d0f33a512db1a3e940218602f775e2e","timestamp":1708930572,"dpid":"179"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220a7cc3fec41def1c5512744ff7bc70c227bc2b054b170598a5f0d02756aeb035b","timestamp":1708974048,"dpid":"180"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220ca95456e97df3e9590ddad1d8bcf88ffe343ca85a823c024cfd8eb59fe3a64e3","timestamp":1708966848,"dpid":"180"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220f86e9ecfb21912401c4d4e964449c294e43d9752c0240eff0415aad884c2a9d3","timestamp":1708965960,"dpid":"180"},{"from":"0x178b9faaef2dc2c180bb95d549fbb9dec06cb86d","uuid":"0x9d7c810dff316fbb2d2da5bb5a9139fef91d70e43a5056c5e154bbd71c0738e7","cid":"0x0f0155122090cadc5850bbc014a28a16ce4dff901e8451168568f2083791ddcab4754c8329","timestamp":1709032560,"dpid":"181"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x0ae504d6724d75d7032135addb47ae1220eecc9eca1c181e11628bb4f901f7a8","cid":"0x0f015512206903ac869dfd26d9e42a1bd30a681bac85bd39e4426997d00348662389088d4c","timestamp":1709070600,"dpid":"182"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x0ae504d6724d75d7032135addb47ae1220eecc9eca1c181e11628bb4f901f7a8","cid":"0x0f015512206903ac869dfd26d9e42a1bd30a681bac85bd39e4426997d00348662389088d4c","timestamp":1709070444,"dpid":"182"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x24320c21bc0ac47c01d3f3e97a113f6dd6d931f0699b0f90970be593399bc5df","cid":"0x0f01551220e5c7101a8a23bae1b6fb1e01e4ab9975c1e4ab50d8fdec8e018ae0c4457cf5aa","timestamp":1709074644,"dpid":"183"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x9ee6dd57f08df2190634780e4d856efe5dca0c01b21057b74cea299a24c78bfd","cid":"0x0f01551220bc79bef3ee17a2798701f6e4c99da6f3ee99d29dff6a87b86808e5e36a839e74","timestamp":1709709132,"dpid":"184"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0xbb08bbfa1b4edaacbf70d6ff44de20ac20eeb7452091587895536110ec2aef2b","cid":"0x0f01551220219eb8317b86b66c712678383b090eac4f3335a82737dff97f874bc6b8d48ee8","timestamp":1709710296,"dpid":"185"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x52250f68236c976383be3f0259cbcdc6c7d4202574c1d1dfe592307b811c398d","cid":"0x0f01551220996605014b7cd7a875bc0cb1503bae7fd352c16b42a301cf96f7e936e47f317c","timestamp":1709713596,"dpid":"186"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x208fb27adb4d96ad59815ffb7c1c37b58ef9631ca67fa84d25f3d30a2dc494bb","cid":"0x0f015512208c104b7ca3b5dc928ccedccc25f69821445811641a95c06e523c35f69177f625","timestamp":1709713968,"dpid":"187"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x2fc98ebef59059b3cbbbede1a1817549acad35e072c1e512d7bea8f98eae51d3","cid":"0x0f01551220a2f8576e48a38c218435cec2b59024dc555c1064afbb198b9d58f7ef88ccda0a","timestamp":1709717856,"dpid":"188"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x69a7caacdba86cccc26cce6f67b17645a73b27ef674fbe38deaee3bf0d9686d7","cid":"0x0f015512203db76d004da7a508ac8d9026f624712c166d315b5beb0743495e9052a258f814","timestamp":1709718156,"dpid":"189"},{"from":"0x639c426be8f852b1b62bfd7c3b5c2eb54e7893f5","uuid":"0xb1e3fad03d6e4f45349425a4a4e6bff4cd04c3a40e4d825b9e859e8c5e3f9cb0","cid":"0x0f015512206bb350df536b087ac27cd2039938e7772de349903b742ad36912a3fc386983d5","timestamp":1710044316,"dpid":"190"}] \ No newline at end of file diff --git a/desci-contracts/migration-data/migrationData_Thu Jan 18 2024.json b/desci-contracts/migration-data/migrationData_Thu Jan 18 2024.json deleted file mode 100644 index dabfc97e7..000000000 --- a/desci-contracts/migration-data/migrationData_Thu Jan 18 2024.json +++ /dev/null @@ -1 +0,0 @@ -[{"from":"0x41a933bab03126d9c1ad5052267edadf265f58b4","uuid":"0x4d3f0ee8f61bc55037076ef55b7c8129b9cf86cf2e3c0146c1378e7356baa99a","cid":"0x0f015512209a40c7ac52c80bdf4480a69945e10b2e79e7c873f8efb70e3c0c5e984d0e47f6","timestamp":1675737468,"dpid":"0"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818608,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818404,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220c17fc203b637a2439ed29b4f8f96610c87ec84aa82b611c08bb30d540ededbb4","timestamp":1675781796,"dpid":"1"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220d502ebf0825885dbdf87a89ce524108290858fc0187b31e97c868e9dd98a0d18","timestamp":1676096820,"dpid":"2"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220eb95d36d9b314299a04e7e90f589e390beff9d94cccb951678a3db9cdc6a100e","timestamp":1676095440,"dpid":"2"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x14c6658aa83701bb18a8225e94ee008bec535c1cd430ffa3279a0df333fa452d","cid":"0x0f015512200d14a1bc62c9ca9d8256c76f0f7c64c228461fe932790ccb63d40087a1666f88","timestamp":1676725008,"dpid":"3"},{"from":"0xaf6d67eb6a07cd7f3d2d690499841042fecd137b","uuid":"0x2ce2eecf9cf99de291623a577afc6f453659a5eed14e0297fd3c4b0a7c88276e","cid":"0x0f015512204adeb2ae11ad4dad8fd61507ecf4bb56e8f85558e6f9d511a55edde1d8f8d47f","timestamp":1676988612,"dpid":"4"},{"from":"0x12ab259853038a8b542b77d4ebf3af671b7e8e73","uuid":"0xeb4670ff98c76bc9c87bbb0c9b48ac34b4416a60f419ed1e12927c7270f231bc","cid":"0x0f01551220f10709a2264cfe211072cc76ad6e6d3c68eb859651af5c17054bd2bdef041103","timestamp":1676996292,"dpid":"5"},{"from":"0x6f5e440d9fad549913512104a8956098c7c7272a","uuid":"0xf90b7a0acdd1e4f958f0955ba9b6de5f1822d34bfce88748db767957c3e1c4af","cid":"0x0f0155122084f827480eb0f8e772e99292c8bcea8194f46f71c831277a35bbeea388568e9a","timestamp":1677066240,"dpid":"6"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122058ae4caf6f4bd65bde8d4190931b4571bac4a8dd277ddbe522bc8b886b65f17a","timestamp":1677081012,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122068d207508426ee3c8a17616846ef9958c99d9d9d0ad1cc78ee2bd987f6bd6db1","timestamp":1677080820,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x38009c640482b5a7880f78014f467be987151e5abaf8cf698601d7e8f2dee8df","cid":"0x0f015512202d3d21c9ad0494f149c2f1289dcb5a3b35f117fc6bc0ef5328637789424fb8c5","timestamp":1677144720,"dpid":"8"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x71b1b81b823d60c7ccd855e030188c91941e0b2120391166228daa8fa0b105ee","cid":"0x0f01551220c94af041db6bfe0b46a4e07389ad78e462219fbd448076089596ad12a6801f79","timestamp":1677230328,"dpid":"9"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220be730fe1e9ae927e4bc786c068fced1e7583f41bec29c1ad8481c843934d3b9e","timestamp":1677511224,"dpid":"10"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220e110cc29d132026ab3842231caa37fde7be2b30275a272ab7a93992386ff7fb2","timestamp":1677510672,"dpid":"10"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x447fbec7a42e617052e792b1edfda430aa0faffec7f105dd7a54ff95bd5ea985","cid":"0x0f01551220dfe8aef953593b5444fdb684b23a5bcbde97476dcf42b32803b6794476aff2a0","timestamp":1678309056,"dpid":"11"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x5f6d2d91fa15a5004d4b7af407ffd8ce768694f5cab631f36c0984894f6f8c6c","cid":"0x0f01551220d520bc99de67d90929118eafefed5927995e541c6b201a455afd5f3f155c4b15","timestamp":1678771692,"dpid":"12"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512207cc5fff1a8eb0b2fa342d6523d8d452ca602d82af065daec2677fd0e61a864a7","timestamp":1680117252,"dpid":"13"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512208dccc1916b787f489adb0c311502e94cbf8ae04af45ff199fadd145361121220","timestamp":1678814328,"dpid":"13"},{"from":"0x60b059dd7799d156f035e6d3ea51262862bc9d4e","uuid":"0x642e30a12bfdce5c5d300578ac7242742a5f359b5561fdb86aba885349118468","cid":"0x0f0155122012bfe6212a9372be0fe15f2274faf82e5bbad020eb568cdc7a6fc2845ae6f067","timestamp":1679014104,"dpid":"14"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219484,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219328,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f01551220a9a416c935b1d5567b5e2991a9dc8b36338704d32c7715933f39a772de69150e","timestamp":1679219244,"dpid":"15"},{"from":"0x32b1f642d5ce695be9ca853aff84d59af5e02116","uuid":"0x21be1e83d8b580427585617ab76531420dea3ca384d3eb5328610c081b2c5756","cid":"0x0f01551220dafc5b29ff71836069925876f573c4e084c770d66371ecd48f3407c5803cc70d","timestamp":1679343324,"dpid":"16"},{"from":"0xa5c21ba7e36cae9af5a5894a9a8a65bac3f752ad","uuid":"0xbf4e8ccc9e5b411edfd246c92b3ec1d829ca4b1eb41701366ec0ff21d9017920","cid":"0x0f01551220c632038257b7e5b73160725957b4f4da2af52004a2bd47981009c94db9c1066c","timestamp":1679409324,"dpid":"17"},{"from":"0x71ad8aee76d7792ec41f3cae707b65594c67373f","uuid":"0x0dc8d351f011ac36a92a714073c6b2ad6e4d5107eb81ff70670c6737a4b6a94e","cid":"0x0f01551220c63b85344cc17c92bf11664a86b7d35e9fb2e6fcd02dfe2a1df19630a124d521","timestamp":1679409744,"dpid":"18"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x1737974bc778096d399921cffb55fa2a0a58b7413eee9a5d9772ea544a56d3ce","cid":"0x0f01551220551b199b7e78003e35010a0fc62759290d362affd13d6f01872cf9846e21b12c","timestamp":1679539764,"dpid":"19"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512202dbe5b2beaf6182583a63a23d587a5c7a573d8637d453445e1d8325a50abe867","timestamp":1680554796,"dpid":"20"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512209e0dcbfa6f3cec9ba0315f70a4941d6e410456899691ab0701904b4592d9a4be","timestamp":1679540424,"dpid":"20"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637288,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637252,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220823b961f7d6323255c47e996afe192c96cb0babd5cf91383c5ca505b00af88e6","timestamp":1679637204,"dpid":"21"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x7a041ca4f95c29e37f84e084752aba25cdc5e4a57e2eef8e6ba02622e97cad63","cid":"0x0f015512207c1f3bcd940e08a792dcfddcca0fd350fa6d05afe6dbbba0f94ed56e1878d807","timestamp":1679658768,"dpid":"22"},{"from":"0xaa572e27403dcabd42f0afe938bdd18c3b52523f","uuid":"0xaeb5c1f0576f6c24fd087c9ca9837452c0ac5f8d41104becb848b057d4cbcf76","cid":"0x0f01551220b97f2b4a0ed522b7b888b3d447a9653143098fe0991482cd02cabea69951b6b2","timestamp":1680567024,"dpid":"23"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0xece33e446b40791e7d5079daf61fc5d7a5ef41c0029297b8fa4aef09ec9c1825","cid":"0x0f0155122050118b2b1175fa6b3dbbac44651b048694f7de272bee5a53cb122a3aab03ae23","timestamp":1681191960,"dpid":"24"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xba82c370711c6a35946fa10ac32d27019ec1d0981057fed3d1aa9025297c44b8","cid":"0x0f0155122008f915011dc3f8bed078321740440a869c23a0238938f0902f94567291bae372","timestamp":1681495752,"dpid":"25"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f01551220413f7132abee3941f9db9c875ac4ab2c84888249d2558496cec2f01f7fa0b8c2","timestamp":1681497900,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f015512201237f9c3c73a3fa6a55b80d67bd744fbdd7b19693ed32fb0465485c1d1bdf8cc","timestamp":1681497684,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa94370567701bbaaca632e502b4a84c07441daf07bf1a23ca2a46004a35fede0","cid":"0x0f01551220874f2f08bd5d67a432327d6d7ca987b4bbfc83b0db03c76453d73a9395899450","timestamp":1681505184,"dpid":"27"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x7664a535b66afbf011d6884a50a280ae9a503ce94acc9497728d459a153d827d","cid":"0x0f01551220eca5152df9f89f614a5521ba8f8a796719772286152a11e4e8c4659f4d505efc","timestamp":1681506588,"dpid":"28"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220574146a7501807df98a7547c0b3d0bdbfcfc0b29704c823ff86571b9a3deab85","timestamp":1681736628,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220c82d987df438ab758c9b557259e8fa0f4e1c2278651c802608fbdf8033419821","timestamp":1681736556,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220be43004fa14f3ca7e2e9cf01f1a0b7906b3728e53c8b1af19e309e1568f85cc5","timestamp":1681762272,"dpid":"30"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220734c2b0c3a1f21c05663f5a9d2b258d3baae0847e06da7699959aadc6616c026","timestamp":1681761420,"dpid":"30"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x57e2c2007b7af4859a04a5a1ed555f17f4d54a969158bc73f079b7f85a133ad5","cid":"0x0f0155122007140ffce5d9d7cd93e847b4ddaa75400b0baab040ddc2ccc56c33a141458556","timestamp":1681805808,"dpid":"31"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x5207335dee8c3818e7cf16b4a11ade55ab52d3957b8bd179cf351b8578746c03","cid":"0x0f015512200053d8f17531e05fb7d33978d35eb4fb6028dc8414369fbdf5a660cb22914ab9","timestamp":1681830960,"dpid":"32"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x8e794cafc680e76baeeb09e74ea413c816fedf6b716337d07abdd5657f69f822","cid":"0x0f015512205aca92353605ea8a45e732995d51da82d0dcb08089f907420dbe60ff1795dafe","timestamp":1682014560,"dpid":"33"},{"from":"0x134e95ce73fbb2a223e52351f8492088a86991ec","uuid":"0xf1a54e169d7c721a532b63fe25a070c673dee267f9688537ea9005f9fce8f118","cid":"0x0f015512202a09ce4187780645e8e49efff4ea3b0caef18ed60c42d9647890fe296db7d3a1","timestamp":1682144088,"dpid":"34"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f015512208076546c5b3eab9a046d4c3c7c214fa94bc80a6d67c6b310e8b3d8e4da0c17c3","timestamp":1682813004,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f0155122060953bffcc76ff9af880b9c7dc0e69ab8f8c2c2b9d01afb982d1b6f38bd3eca8","timestamp":1682746284,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f01551220fc56171ee7ae7bd3eb3e36d2e88c34d26eef0deb8a2850aa70874734324a5c72","timestamp":1682534976,"dpid":"35"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x66ec71949b03ac1cda5600f93a042cf0ef4a5fbc114abb5ab00f879320e67429","cid":"0x0f01551220a2e49ddbb71fabd49f69c44aeeb69f597fadff2061adf6c46a7d6a8f77848d09","timestamp":1682670864,"dpid":"36"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f0155122003fd6d8a9eef363a8f0331c364da74dabf485fa2c90142d6d68a5045f1d7068d","timestamp":1682793408,"dpid":"37"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f015512200370361d9eabcbcab401ef4d4f97005094f536d3b7f89353d84349deb8014c66","timestamp":1682793228,"dpid":"37"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682822136,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682814000,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f0155122006c38ee5c3d87df8f1871df54b987c1ce43726f892a9ddfb08be670863bc4970","timestamp":1682813880,"dpid":"38"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122091768c624c35d1bb57139837d71eec4bf81c2888616f5a3cffbc0351a172f6c1","timestamp":1682849124,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682821080,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682820648,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122033259ecc232dd46a608ff88651128a8da6bdccc2c917a0c2ef56b4dc27f7e498","timestamp":1682820372,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821884,"dpid":"40"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821224,"dpid":"40"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220ac1f68266f0f2a9e7fa96731e46c54a86aa36bdbd4a22cf1a5c08b2ee9957600","timestamp":1682854344,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220e49575cb06ca399247ae08fae9a8b3a3ff5de24b6a8dc29e44ac3ab6115c1539","timestamp":1682854224,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0xc73b88a9747fb3eb3fb051bbb3971faaf4819d1b8cd041028cc5531e3f9c6e94","cid":"0x0f015512209cf107adddf229ae090c27cc3998b51daf075dac2e3824d828cc71e1c3782903","timestamp":1682856480,"dpid":"42"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x13ce389478fadc96534f666ea8a035dc54c4d08f12ec16bbbbbb0dded66e93fb","cid":"0x0f01551220d46086ee0c05a4f167ae2637ee677a562ea1832d38cd953900b43d4836d5ec3e","timestamp":1682951112,"dpid":"43"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0xfba4b603620f33f51b5afbdf87de9ae79796d5ac1d4ac6f19329460615a8eae5","cid":"0x0f01551220f078470899aff3081b145084f68c9a2445b99322dcd658a2650f62a75fffe89d","timestamp":1682962248,"dpid":"44"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5e53b3b10212b4ce9cdec84c8fafbd305d80df6c778375e2977620d1b3f366c2","cid":"0x0f01551220e5895006b048366ad69277566cb11b20ff47201fe00f40dbf36f3d36c5137456","timestamp":1682993892,"dpid":"45"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220e627616fc85b6405cb28bc119f5f5073ac4c8796f6c3cff19d78a782a54ff32c","timestamp":1705420740,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512208f74fda7bac4317f39ff66c233ae140290d6ec58c604e73d0259ee384040eac2","timestamp":1683299940,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512202dda4e35c872736baecfe8d06d38854bda736485adb616f220fb4b19919e4562","timestamp":1683298680,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220bb1fb9ca4d11adaaa6514289cdee3c0b7ee3cbb848b49be0f9da3dd8a1dc0b0e","timestamp":1683227616,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220fd53a16eb6b7a09035a0f62c96a6a7dfe38948b84b44ffc8a8107938c87af450","timestamp":1683222132,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512201a6d456535ce453d3f62ce0f0671f8970ec00638d2271bf52b03c0520a1871f5","timestamp":1683053508,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x90ba1ee3a35ac4377b45b8576d2bad8dd590b8d97fc907966b08eb15061b874e","cid":"0x0f015512201f746518f1f6b93acd19aa5a9af16baa4cbe66e48c71548d8087f6067e1d454d","timestamp":1683222948,"dpid":"47"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x3afb6232b1af22d2d2b32c8b8f93f51cd826fde329b43c1ad296b090810ea96c","cid":"0x0f01551220803851d9e43a70fed0e93da3f8e720cba9f4b9e34130a3648b6a67cad93d60bd","timestamp":1683232692,"dpid":"48"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220a4e515a62882a47bc943ffe60338a81d5f0c3effff4f4494c84565f95141a50b","timestamp":1683237288,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220d866d792ea34c8f71d6d855dd3901605bb91d0b451a6e7c5637da941408544df","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f015512202fd9deb76c3a394930c41135746ae86abed45816500dceaa5483d2b4d206e278","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f0155122093f39a0766cc860ab7853207cbe2f52a3ba9d6eeb7baaec5180b3b63de07259d","timestamp":1683236460,"dpid":"49"},{"from":"0xe861856c961f853dc47e5f2ad1fa2b9ea20e4e88","uuid":"0x29d466756bc5ad7e00d1197785c6e18c9adbf139ed8cd9669a381d4d3ab5185e","cid":"0x0f0155122031700de6766f972518cc770961fe4a4aabcb4e482700cea3eea5735315b25518","timestamp":1683886968,"dpid":"50"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220124bbb6ca94ad4bbe9d46a6049df553c4fcd886f9dab60fb55b5b3b393cd572c","timestamp":1683931428,"dpid":"51"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220e4266d1c3697778cd48f4f600ea15b7694dcebcbc5a80ab7a5d425987e411b00","timestamp":1683930000,"dpid":"51"},{"from":"0x9fcc55e782c2e43dfadcc428c4f2f8f32e095782","uuid":"0x136d9f9e3810666980107d2d4cbdb0032ed4f67f591ad82ade1658a29702fff8","cid":"0x0f0155122057b7679b0135b03fdfa0f49ecf5599a50be9f2838eb96b55ca54e450a2c66caf","timestamp":1684412244,"dpid":"52"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f01551220b49ba9590a9b78640004d71de051fb2079d42a111e46ca808c842b227e3a890e","timestamp":1686612108,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f015512201fc246787a63ba676c4780494f7c3e1b4dc2ee82868e33923a5f14221c63c962","timestamp":1684862784,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220ee15b4b25f3f6e7922d998effc6a1c2415db9872c55cdb7eced06e84b69b64b5","timestamp":1685098776,"dpid":"54"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220d32c64e3089d45cc9e0ea93553a81932a265d37240f7255ca118cf93a0812891","timestamp":1685098464,"dpid":"54"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x814875f70b49d8855ca70a4b842ec18e0cbfed86f7dacc406451b6c74946b061","cid":"0x0f01551220547ea04b46ceaa946574346f2afb4be20c3706d7510cff38d316ef1d6aceceab","timestamp":1685442360,"dpid":"55"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512207e406a140574f56a8a0b6bf22ac7b1e30a751ccfdae880f623883365a8fd5ca1","timestamp":1685448060,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512208897402d12a4ca848c6bc5acad80b318044ad8aeb83fdfd00aa138a422030e8c","timestamp":1685444172,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5a82718776361e7b3218a895525f3bf16954747a919ad4279cd9a51f8153613a","cid":"0x0f01551220145c239a14db836ddec6d984dbd3e855902c3a3625b4f89deb169f9d2b23a12b","timestamp":1685525952,"dpid":"57"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512203a32dbfccc4f9fb3f87f0ef22596afcb03399aff87b49763bd67f1bbd8935e5b","timestamp":1685536224,"dpid":"58"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512206bbc0246759b51a6d9c3dae6eb449e98acf52fea38d2bb4c70be3b1360932349","timestamp":1685526132,"dpid":"58"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220d5a01de71ad36c74e536b75ec1d64e8b38272f8e1245274886ed6802b255d102","timestamp":1685613240,"dpid":"59"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220c9d4ab3fb535d36f96e59cd3d120a4cf2a72773a2b14a384aefd1381a52e5255","timestamp":1685613060,"dpid":"59"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f01551220ac71c7dfb47eb844988b61f0ee67e0464256473d52f9e2cc8393d6c7585c7a05","timestamp":1685613708,"dpid":"60"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f0155122085924ebb47c11438d9086ecea1a9a840ea3ee15cd36f5b731945d2e3d06b3a5c","timestamp":1685613216,"dpid":"60"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x23d7465583afc75276d7ec121fd82d34d4d38b6456be9990ab50fe6b2aec11b5","cid":"0x0f015512207dad824f451fe44d3192a14e5b1212ee20e4e11669819ee7df6141fddf26d96a","timestamp":1685614104,"dpid":"61"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x71e940680347c5c59fe91b01784ecc9c6ffcc4c65ebfab0d5b8ff9dc02166a99","cid":"0x0f015512200f484328bac037a779eed442d60d55fe19ce84ab0b52d951e45c24b700ebe1a4","timestamp":1685615388,"dpid":"62"},{"from":"0x008292e57a2d9b34525d82876068652e639e61d8","uuid":"0xc2ee84577e3896e376fb8ddb1f5b8c776b14a641e301db88e4995d2992946486","cid":"0x0f015512204961cc8ec829abb48db7362aac5600e643c38879009114809a0f5ffa21a20392","timestamp":1685615724,"dpid":"63"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xff282722074468174bbcca8902d81de7fb794a493c26edcca8ac007cf7638ebd","cid":"0x0f015512203a8aa5608277fc2026e1971013089a38b172b9211211e512bac708fb54964a2a","timestamp":1685719428,"dpid":"64"},{"from":"0x813eabba8e094bef89fe77b4f497810b9795ea66","uuid":"0x7c56741adb2e6f53a1bd354a7863b817a42d1e00d602450d351b5a3b57d96e59","cid":"0x0f01551220a3c2ca0411fc58b9de718eb7408872a6dfc3420518096fdb632d2a38f757d08a","timestamp":1686220584,"dpid":"65"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f0155122085acd5e30aabbc367b6d6ab8929c7410502f8a7256a0a5ab0f68624e8d60a37b","timestamp":1687805484,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f01551220245a17d29a145e9db11ef5f9bf760e0aae95182abe8f9830a2dfd54507f2d756","timestamp":1687805292,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220747a2fa16ca8ca254aeb3e9ae987d6522fa4e5be266b095f517eabfc37c6ce7f","timestamp":1687808232,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220195d0afb118d9073215302753e64759f9e9fcc5c37abb2aadc97e7e82cd1ca08","timestamp":1687807524,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x58703be0a37ec8b08984024a4659667901d03a7e1c66612766ca3a99ca369ac7","cid":"0x0f01551220e054f76eecf6ab486d3b64e5f12310d65753d8cbcca1bd8b2ec1d058f8b396ce","timestamp":1687812132,"dpid":"68"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5825084093f35bf3b98bb9ecd724400a0f01ed6c3a2ca27b16ea69b53306faa6","cid":"0x0f01551220c522c541b31394352d279616369fce5804ded295e299cbece7f0ed81c934051b","timestamp":1687812804,"dpid":"69"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xc335bda4b1f79e72ff0c5d061e6fdf7af21a86ebac698e90f0cca5ac69b3020e","cid":"0x0f015512204068d1d21f66b52f65c3caf15e4a522d0bc37dee1b425a337386769fd229a8de","timestamp":1687817568,"dpid":"70"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122063982338abc89465b4f573bf9aa1579bfa654f6aa2f12db15ab756d9220726e9","timestamp":1688024676,"dpid":"71"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122021e9bb44b2e4a93be54db472c3f8c5a2604c41ce29230923b7d1b86276f28479","timestamp":1688024628,"dpid":"71"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xfd54b8d85ecd02cac3e64144ab492cb75faf8167b75e73b7141a3404e639c1df","cid":"0x0f0155122049e0b9c318e2763599d6c4de8ac0d7e2a5678d1ebac71a38b47e31e2bd890020","timestamp":1688552688,"dpid":"72"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1689009768,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1688720808,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x04be83778e156d843a2551448780727a3c0bf21107d66d08e2f50f370be98712","cid":"0x0f01551220b0ba939c3c33cfe4d4bf663a635ef823ed188388efb15ef6bb3efcc4c3d21fb2","timestamp":1689041640,"dpid":"74"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x6047e10d820b878a9c553073a5c140bf1023fa3426bb25348037826399913556","cid":"0x0f015512203392d7b04341c36abbb607f36e02e46ce09e87563b089a20ab291637ab816ffa","timestamp":1689294216,"dpid":"75"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220735441775977d79d9e9bd0c1680b1efd6c5c85f01c63bd8b03ea6948bf967a1c","timestamp":1702045944,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f0155122051014af7073b576391b1065f67952d07b510ce2ac4fdd7da516c2c551e52acd5","timestamp":1702045680,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512205cb228099c1cb09650d8b3e5404241058843a2ee706708e025cc638d4186b2b5","timestamp":1702000140,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220a62e52b9c6a2cee08be12a4502664b51d950666fe4a5af90a3cfa913a613d349","timestamp":1701997248,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220513199f4bee602755360752169105632d04fc23173f1003bef320d0337d16c14","timestamp":1692330000,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220c6ddd5e72684c2dad436b6946ded360f9fdf84b73e99c08787030f57312c535e","timestamp":1692182952,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512201348deea506b711b91e43f1ec9d7b8d1a56c13d2226b346e9fdc4b14f56a8409","timestamp":1689518988,"dpid":"76"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f015512208e1e764e2b216acdc6a81d7da26016d4a1185a1137803a378c1059a7e0a65f2b","timestamp":1691496348,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f01551220e9765441e96679a63152b92240d3b59eec842b19660aee519b62b23faaae33ac","timestamp":1691493636,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f0155122010bc45102349d2dead31c0893a00c3959e0f75799d4dddd2860a8cb1ae286cfc","timestamp":1691492520,"dpid":"77"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x985b7ff62652f432b38e1b8aba5d3f4fedbc36345d2f818fdd0011c42fc1a43e","cid":"0x0f01551220a8bb15e9a0913fa0e63caea2bdb8f84b37521252b639231b8050e51c41ab8eec","timestamp":1691501736,"dpid":"78"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x10fd63608937c5589c65117fb50a3736196e854c2746e5afa18616352fc15da5","cid":"0x0f0155122033a510449f17a7331d387be0514110675b2036408cf5751a429e7574a348ad28","timestamp":1692472464,"dpid":"79"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f01551220475e5ebbbde7ce1cedb1a937a6cd13947adece0f50f7be0f0c39f5ce29d55302","timestamp":1693246872,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f0155122016b13ce97577c13677246cb18439f1b197ef62c31b7eeb4afeee59c2d169b004","timestamp":1693245804,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f015512204f1a4a775cdb3605abb7db7bc372fc1fb548752f87df0607c090228a49da8d61","timestamp":1700147784,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f01551220842e076e8c09994d9ede0411b1885e7f5673840507c70756c676028003a9bbe6","timestamp":1693246440,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2985ad1a8ec856aae4e741ec6442b1cb31df4e689741850cc7f401a2d23c74df","cid":"0x0f015512204cac6289a604e10132a917dabca35f3f75d77234d829cdf8aa81780ccbe18880","timestamp":1693247148,"dpid":"82"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f01551220710ec51c7187f14485779174c132b73a601e6db96295e0f70cc3090513f514ef","timestamp":1700147268,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f015512201e109b99ffc1d6eea87e4bae6e62057362d4ca88358ffedc970207ecf87a0a8d","timestamp":1693247616,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f015512206554b159bfb54e5c2ca68f6f8fe3ff431474fd459edafebec2cdf4a1e1e9b84e","timestamp":1700146980,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f01551220262bd98464a8a798f60c4df021584568feb20fe8428de4866b8d3ccb5d8a01fb","timestamp":1693248192,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f0155122089b4726dd6758d6ecff4793315bfefd5e5a275fa886fb87cc3fe711415411a12","timestamp":1700146392,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f015512204730b046919be6e2dd88cfc619840866713f532895fe7e110a4a68814bfe379f","timestamp":1693248672,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f015512206b80bc92b65b2cdf7739f7f926c2c1ffedece7cc7e24b7eba23a2af8d55597f2","timestamp":1700145552,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f01551220f784661a9ee6ddb4da6c0778a9a44fd0ab582072e1feab0e5b5f24775e464932","timestamp":1693249560,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f01551220204550a97883e629602079e67248acec5a82315e82563fc01f8da6fe26739b5b","timestamp":1700146176,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f015512206b0eb5f87cd5afb5a44d84b56435a3faf324149a72750a023e4002622f787afd","timestamp":1693249908,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220bf26daa8622f079ea3adb5fc871b28d814fe539b3094c8ee77ea7839eb50ab39","timestamp":1700146776,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220237e23eaae482991b11035fa1faf61af5ad65cbc8abe7992a7f7683f472de936","timestamp":1693250244,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x87cfcaf39a1c482f5866bfbe48d4f63d65d7db9fb992b6837c688d2013940c87","cid":"0x0f015512206fd907cd2fc2464c48bba2fe4acbbd967f4ea17277f533f6190ebc88fe583e8b","timestamp":1693251900,"dpid":"89"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512205e6eafe4aeb2971047b54a0f1dcb449c69321094bf55b9e6674434f3704a7db9","timestamp":1695653376,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512206afa0e08ee564a4bcf5a739a57dd19d5b835df7f5da459da3c442d3962d5b77b","timestamp":1694187648,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f0155122016df22da6fcfd0840b276673f1732fdc8276316d0fdbf3529fa06e63565399ed","timestamp":1694114940,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f0155122073452cfb6096325fb8f41f91eb93223f7d424352ebafb240bc61bc62040167bd","timestamp":1695653220,"dpid":"91"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f01551220cf13504896eb49ca532783f3b14b105c7882a0a712f19c031adfec44e08fd56d","timestamp":1694197140,"dpid":"91"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x43c4629df6245fc911ed28bd3e4fd92899dbed0e70d6086467ddf89407c41fe1","cid":"0x0f0155122050265ea5c933a4b296c88a16862c006698445750eb177f512e3613b9d364345f","timestamp":1695218412,"dpid":"92"},{"from":"0x262b4f07e42bbc33f597fcf0d854e9dafaf3d469","uuid":"0x9db9db43f2e485f733b91814cbeb189c03f6a4ca18c4f07729cdb9bc9d88f852","cid":"0x0f015512209a7f7d3d0f68ffb55d85d6da6c442c9e2b2389ea0b1261b13159fa9f098102d0","timestamp":1695246144,"dpid":"93"},{"from":"0x9452d0680a39195f59cc8a8b794aec0a81d51cc9","uuid":"0x6d7d697d017315f644992600e7c28f2914a3908ed134aa6b1e49ebe708c16dfe","cid":"0x0f01551220106cfb1003c1e512f5187ca90dfdc66fe8a4df16d7889413c38c5457fb4bdb1e","timestamp":1695246324,"dpid":"94"},{"from":"0x64b3f6f1eace5ba2d49c430ffbf085f4847bdec7","uuid":"0xba7fc52a499293973b4b35f8bbcfda823a2059c9a8a175b13cf35d24707b50b9","cid":"0x0f0155122083f5c28f77367e6084020d3c3621c39a17f108dfd21ef4d157c0aa9d5107c5f6","timestamp":1695324696,"dpid":"95"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x26a149a3b1efaa583e80571482cec997f375990f70bee46e3230bed5ba78fc55","cid":"0x0f01551220d48c3bca9221e49074d1cd6df4f0bbff5852baa1cbd24a9bdcd8ce54efbb9a50","timestamp":1695816576,"dpid":"96"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f015512204818e564ec9e3bbae2feff07d68040876da0436fb6d89fb5f54daf95a98d72b0","timestamp":1696594740,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696481172,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480884,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480764,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480608,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696479552,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696468416,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466964,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466820,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466724,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459584,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459560,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440036,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299912,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299876,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299600,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299000,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696296012,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696295376,"dpid":"97"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303944,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303560,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536972,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536936,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536912,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536888,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536828,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536804,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536756,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696469268,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696336296,"dpid":"99"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512207d74909d018b17bf267e9983f5a4ff1b1b7cb91314c7f4e3fb99ec60e3f6089e","timestamp":1696840824,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f01551220e88a7c59024cac199699b88226bf15f3dad2079ad7f8de522cd58d212a7e4cb7","timestamp":1696507296,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512203a2cbe6fe0167c0984e4139576143faff5e3afbda15e52091379c4788bcc34f0","timestamp":1696506528,"dpid":"100"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe3bcfed1e03918f9d7a48903f9a96e2589f8823d1c47b6293cd744b7d7d57161","cid":"0x0f015512200e0e343667925a707bc9194a7581e9350e73aacb16423757faf047229216ebe4","timestamp":1696589760,"dpid":"101"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x9e102f9a7ce12cd3dd4944b13d51493e7079ab344acc5d84e6f5ea05a12353fd","cid":"0x0f0155122044410acab6cec9a6fad6d5e92f690eecdfb0bebab46b04d4dfaa4cc50ab3cbb1","timestamp":1696605300,"dpid":"102"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x69114e8fa768f26d452f12090831b9c6e8d58ae100ac16ec68cbd661ee8b3997","cid":"0x0f01551220be7eb409dbc450417545a5612651c26d3ac6085bd09c11017d700d25e02331a7","timestamp":1696841976,"dpid":"103"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f0155122081133e104e9fce1fc05bcfca24152c735c24639fa938b2751fdb5dcc9bbfb699","timestamp":1698779592,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f015512209bfe5c87d9e68468f132e569e0583f33a30e2a4721d7e250481d43c0edeadb40","timestamp":1697792352,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f01551220149da347cc8d88f970c3a014de162231bbe2c6b6f8b977f45c2b60b0d2052084","timestamp":1696842144,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1698911760,"dpid":"105"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1696842444,"dpid":"105"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512204a990fa9cf6ec736ee690ab111e9bde63b2615384a56b40db50eaa3bfa19d1fc","timestamp":1696961232,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512205c33c5b575919cd5dfdbcae96b335681a9fd72d8cca0482bf761ef6f2bb815b9","timestamp":1696944228,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220e46482f58f98a662de09515c518875d19ad5815effe0305a19ae113ee24e4c03","timestamp":1696942104,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220210b3fed6c321b8b3258241c07b791b8f64f07cfd349afefba85f1cf50d7481a","timestamp":1696941732,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x8f79e11baf8d51b43253181d18c55f177041ded43dc9c9672995a777468b3640","cid":"0x0f015512204694fa680941e0723a66f03b755e81baba5ac3d7d0b48569b76649e8f5bebb4b","timestamp":1697040396,"dpid":"107"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x65be6859a644c7bc213656bc2ffbb228819097e5a830a0d84f681597d30df140","cid":"0x0f01551220b93efc4a93e3930240b6b73bc0bb8cc248a91f81b75af382d9ac24d72ac345ef","timestamp":1697792640,"dpid":"108"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xb8ebf456801e699d1ac6aa26330c041d6c28ceedb7062de145d478a69b7e5820","cid":"0x0f0155122028ca283b93da193e6e73785f3bb9bdaac6bb44c4433d0141ced0f9ef18c7d0db","timestamp":1698054684,"dpid":"109"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698323460,"dpid":"110"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698079308,"dpid":"110"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512200b0096b5867205f23384349f18aefee7e47e1927be1079c2b84a1ddca165a157","timestamp":1698178344,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512208992878828526d44bf352a455357ce72f77d7dc2b1f71b248db7f3c4df04679f","timestamp":1698177444,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f01551220af0bc91008bdfcf0f05188052122ed4262d2667c87a6aa962cabb11e31bc933f","timestamp":1698747864,"dpid":"112"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f0155122053cb052093615303fae1741d71f86fe18d656f43f70602bc379d8eb6dfc69ad7","timestamp":1698747720,"dpid":"112"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xaa6e41ba11eae99e35c56cab24c16a6e5473e49d9be3f59901f15bc3ac5449d4","cid":"0x0f01551220da6ad5231abc31c3ae5edf69b5b52e339df6a453731adb2068c26eb2013d9707","timestamp":1698782484,"dpid":"113"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x4c693ef748d114e76316c3407a0d442f9d9d64f1a7ab9a9c318a2bd4a5b14a77","cid":"0x0f015512203203a4104a1e2478ed314ea918b7fa667bf04a0e84f2e57f0c396841df3983f1","timestamp":1698782652,"dpid":"114"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f015512204765f0ba19163ce27730a917da91b1fe448a8ab0722aceca648dcddb85ffccea","timestamp":1699355784,"dpid":"115"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f01551220109f00c84c67068052e782043d08af74cab99a4ec56e442f041dca2de44c5a9e","timestamp":1699355412,"dpid":"115"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512202411f0188e2db2e46dd1a7d3cd736926228deeecfbf9397c8b76067191272434","timestamp":1699954776,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f0155122089afb0c6def46745efc1eaabf44254d8fc4ca943f53e4d82dcdd8a2cbded7981","timestamp":1699887960,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512207c93e0ec1b4c56a3f08934f555791a62be8abd7e78456758d5b65c0cdd7a836f","timestamp":1699608000,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f0155122072f88be300d505c2c03197f114be1377b1c58b6f7554198eb17a6708fabd36a0","timestamp":1700053860,"dpid":"117"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f015512208f0866a3d06693c7e1c7916894085864690643caaf7ab0055264f677e0bd667e","timestamp":1699954800,"dpid":"117"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220b66a4185023ca8ce27e10c8ff6752e78fb60d67ff4dfe3960f0758e6b593022e","timestamp":1702053972,"dpid":"118"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220f5fd32994c198aa5588ed19f93b74116fedd046951ad9797242eee0f12c5e2a7","timestamp":1699979532,"dpid":"118"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220e73795df1898e6aab1dc02dfa9ba1164871b98b359b74b72886cb08712e12f12","timestamp":1699984152,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220a895d90ce662de4cb21c88029bcbb7b6fe49e03fa8c35cce7869bd09de36aaea","timestamp":1699983900,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0xc3fb14242b8038ff617d4e31b26ad0d2594e59c7e010b5b25bd1f5d1d1ab49de","cid":"0x0f01551220ae6d7d9e91b90af9c55aa7da36ceca6c0184a0ace57f24a6216c9ff452ec7339","timestamp":1699984440,"dpid":"120"},{"from":"0xec29aca1a8740b8c5e2e06ebb52290700b9a2c40","uuid":"0x0ae8abde65748fe1ced55a91190483d29ac72384593e0dee1eb4a36ebf9c31a0","cid":"0x0f01551220df36b21446f6dc9e3ba055f20d5a727a2c7230a1f93f21a5bfe0fd7326aa63c3","timestamp":1699984896,"dpid":"121"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x6221f9c34c95bdbaf8b3bd7685c13bf50ace7a160bf28d98aff645ec3fb8e6a0","cid":"0x0f0155122067995ecfc055df88a582b9a1e1f1dc2587c1a76dd5afa1dec281c47f76d5ed67","timestamp":1700005716,"dpid":"122"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x2859eed83647d87114be9fb521ed5a51e7cdb924cf493d7e59e4b73d6bc8c346","cid":"0x0f01551220b4c0bcdb82ae88ecd2584487a63c8732e53b4f910e3cb4b2aec008d878c4579b","timestamp":1700006352,"dpid":"123"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f015512209993f6809c47dd8bc0443c4125ee92e525f4893acf2ca315c3cfc5413412f1ec","timestamp":1700046552,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f01551220e8df95ee93c95e2741fce2acef1a6ae153cf3b8474ddefa7a99ddc2c1eb13931","timestamp":1700046432,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f0155122042b4a34b09a4e8a6ce04608c7dffeae6bc062c6d26f7a333b07d4021a3b49732","timestamp":1700046408,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f0155122069111964df6b4928906d649e3ba2aa55569c9a2aeabd0616da9f51a44d673b9b","timestamp":1700058384,"dpid":"125"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f01551220721aff2f3e00530a72d440a38bf7570b21ae0eb6cfd0ef4b8fb10875fac95c1f","timestamp":1700057772,"dpid":"125"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0xa3e130367fbebd19013318124d7d089536db6d5688e75c80772875e65b050ecc","cid":"0x0f015512203ecfb122b716f2bcbc7c4f1bff0489210d52e295bc7bd008a18c56f720de8ec7","timestamp":1700059584,"dpid":"126"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220a60380f7f954d667b0583b954fb72ffd94c59ad3417377fd8513e58e06903a5b","timestamp":1700063832,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220306b0b6e24f14ab86367db5427347e39bc5d49ba718931a4efe0d807ab168e4b","timestamp":1700063400,"dpid":"127"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0x2cc8cd59679bd6e95683ed68b681add38c62e459406047f00a34e8ed0549d9bb","cid":"0x0f01551220e931c8247b57d7c261d00f509960dd637db0ae80bd542a17c34d615932dc6c63","timestamp":1700063832,"dpid":"128"},{"from":"0x13b71b614715db683d0985f15dfd9888c429317b","uuid":"0x782136c47d959413bd15ed0b9fd5fdecb7a06437751bd5dee317f87a09d019f1","cid":"0x0f01551220d36e5b943c41f27942bdac19364f79f95f76df926aba53cb01d150b552e4206f","timestamp":1700754096,"dpid":"129"},{"from":"0x73e4d86f1686671761c640556fe2e12a2a94c4ad","uuid":"0x0aba8b597b2877138a8785d7cb0a8ed230cb1a9b2f52517d6676cb832947d39a","cid":"0x0f0155122008b11e04f4fba10c61564ffc65ecca9d232a20dcdc001b38736c4c6aa0f3d3ea","timestamp":1701434724,"dpid":"130"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122000e10fa0b2965d2666d5a108fdc6bcb01af37c8bfd5a3afc9d6c1aa354f6098c","timestamp":1701703056,"dpid":"131"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122076eabcb47c97f19d71ab1bfcfce0987be7f5109b066569d8b4be421f38c14c46","timestamp":1701702708,"dpid":"131"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x1d8ff65463a48809e6c4a9da98d864dbb39a6e70f952a7850513d9f6343fd307","cid":"0x0f01551220b0be3482781d35a1648e29cbe848ec7d1d83c9028b4a7c27392dcbe2ba9492d1","timestamp":1701788316,"dpid":"132"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xeac3f6244306f4afa2e4d202e80909d4818a49dc0c6a14aec56d0a05b8195a64","cid":"0x0f01551220b8bd404569b21cd44f6ad5451edfc21336494145e4e8bde5c702acea494d4a05","timestamp":1701795900,"dpid":"133"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xbf07d6a25bf38eec9a87eee75afc5a9b287c6c8473a9d8cf367d6e796323623a","cid":"0x0f01551220d4e5ef8956132f8481027b41c94323c6e76b2335f30c4f3f3fce66e77aca73c1","timestamp":1701872976,"dpid":"134"},{"from":"0xf44fb21f73df7b54c3305f1326df86ab073731d4","uuid":"0x7292bd468b30e40b3c40a39b4dffee06500286bb1a44c59070291a5f1ef56ca9","cid":"0x0f01551220e5e75323762d53eba66756b3cbdb6e9e45e9ff741d3894066d3b2857d46a660c","timestamp":1701875664,"dpid":"135"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220b876e7933f617fc1fcdaf86797254fbefc4754b793def83164cb554c17996b07","timestamp":1702202688,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220089b9550d2cb5b107014545de8d459181cd7a152943c02c552af57b54a1d94e1","timestamp":1702145736,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220fd36de1434faf71b4b1ab2a12342504678055ee2685af920de7fcc897315b382","timestamp":1702142316,"dpid":"136"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220dd652b98741db1d28d7b990e5ea1f3ba54112b3b8e6ec3bb01018d853279ba4c","timestamp":1702439796,"dpid":"137"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220819b84a99e498da48505323e46852640da77d055cbc0036d657d6dc7c6bf5007","timestamp":1702430448,"dpid":"137"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220995897dfa81254a1f3d870bc8a57c16e22b890c7958d414904de766516d9aa2c","timestamp":1702512600,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x7e008f972f815b02881457ea07f03b9a4eaa1b4a45b61fc22c925b7f50015a6b","cid":"0x0f01551220535462ad82251639194ea94cdf68db782fec335c8f2f73a13134457483286b6b","timestamp":1702512876,"dpid":"139"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f0155122039e36aab0d90bb2772154b2063089c213a012d86b3fb1ca77526b78ee7a8f630","timestamp":1702513068,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f01551220aa4db6c4cf880f0674a5edd4835dba05e0bac117adfe566361b5ac1765487706","timestamp":1702513164,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f015512206b5f100c2ea07ae1083a6fd93e172efb81a0d4ab2b43d6138f3fafc6288dbeec","timestamp":1702513344,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220697369ba9d9da8fa571a5bcc53986e020252a7d6d64f3661c1ba9590e7cba65b","timestamp":1702513392,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512208e3570f0b0dfa9a93d17fe0ef6a82fc2b72b29e59c2fc12711a5c9f51a0de453","timestamp":1702513452,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f0155122021a6c2afd04b4770042982b0c74418082374380741cc3802fa85cc594f56569e","timestamp":1702513524,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xac8e69eeea26aae8b657e3466fbec53d2f5afe65fbbf0d6d1c6f656b3f390a74","cid":"0x0f0155122083dc3d796d1391aa931301a744d65283969f452d5289cb5c71c548c6edb55859","timestamp":1702513584,"dpid":"146"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f015512200f50a0f502a5b405c40fac0fc9cf3765eb63da20dc42be1b02eaf83b375f599c","timestamp":1702513620,"dpid":"147"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220904c16b294634d220959d0e3d9d1f443e929a53604f6104fc53e050b44cc53e1","timestamp":1702907160,"dpid":"148"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220267c4eb8eb592d8d167f1b55f89bc96f7660fe3d8e2ca29ecc307a817474cb79","timestamp":1702559448,"dpid":"148"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122048ddb39fb53041b0ef9039b376a406e6b263cda0eeb58815f0976171fecd4f4b","timestamp":1703072388,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220de5bfdaf769cd2d703f8eacdc5de1d982901f05fe6258df98f1599d0474d967e","timestamp":1703003868,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220c21697f0031be23b923a7db26af93c6fb3fc8797252cb626b5e17cfe2d1a14f2","timestamp":1703003448,"dpid":"149"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x85d5f216ff2be7742bc640646b4d9b9836a20a852ff25ce715e095b3e1f4255e","cid":"0x0f01551220bb03814b82b0fcae80ab12471446407608899e0933665cea73c14f391d445b90","timestamp":1703205816,"dpid":"150"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x2add80498110745a1115061b43c7067c92018c667f6e0da0bf0fee267241a3d2","cid":"0x0f01551220502682b3241166c26f25cdec935653ffd85b4024ad5316dabba71f689d623adf","timestamp":1703212224,"dpid":"151"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220f5a4e879a08793b02f7a9f07c2d136053b9d2c348901958528b607cca8ea3298","timestamp":1705091496,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220a8c690fbad722773e549f293cd3d73e400d157213fdf93bc10f627858ec5be6e","timestamp":1705091376,"dpid":"152"},{"from":"0xe493a10f41a846b67cb12a91cac4b2ae22440921","uuid":"0xfbae316e2b0148b3f13c11052503b00fe1cac5672875abdf09092a65aaee97fe","cid":"0x0f01551220d1ef0ec2445118d9a6b70ee7b056eedcf7b24702cf3fd5adcad98f6be5b8224b","timestamp":1705491780,"dpid":"153"},{"from":"0xe33c428cbd313983a5432a3d255025e456a4daf5","uuid":"0x276da67ec23c8727b5e9951e63a5e1cd507720d3b1194fb3e4147120767f3e06","cid":"0x0f015512207905922fd01255f1a077a628f6f4c2525f6be69609e18f9419611968ad82258a","timestamp":1705579488,"dpid":"154"}] \ No newline at end of file diff --git a/desci-contracts/migration-data/migrationData_Thu Mar 14 2024.json b/desci-contracts/migration-data/migrationData_Thu Mar 14 2024.json deleted file mode 100644 index ea6bf99d0..000000000 --- a/desci-contracts/migration-data/migrationData_Thu Mar 14 2024.json +++ /dev/null @@ -1 +0,0 @@ -[{"from":"0x41a933bab03126d9c1ad5052267edadf265f58b4","uuid":"0x4d3f0ee8f61bc55037076ef55b7c8129b9cf86cf2e3c0146c1378e7356baa99a","cid":"0x0f015512209a40c7ac52c80bdf4480a69945e10b2e79e7c873f8efb70e3c0c5e984d0e47f6","timestamp":1675737468,"dpid":"0"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818608,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818404,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220c17fc203b637a2439ed29b4f8f96610c87ec84aa82b611c08bb30d540ededbb4","timestamp":1675781796,"dpid":"1"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220d502ebf0825885dbdf87a89ce524108290858fc0187b31e97c868e9dd98a0d18","timestamp":1676096820,"dpid":"2"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220eb95d36d9b314299a04e7e90f589e390beff9d94cccb951678a3db9cdc6a100e","timestamp":1676095440,"dpid":"2"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x14c6658aa83701bb18a8225e94ee008bec535c1cd430ffa3279a0df333fa452d","cid":"0x0f015512200d14a1bc62c9ca9d8256c76f0f7c64c228461fe932790ccb63d40087a1666f88","timestamp":1676725008,"dpid":"3"},{"from":"0xaf6d67eb6a07cd7f3d2d690499841042fecd137b","uuid":"0x2ce2eecf9cf99de291623a577afc6f453659a5eed14e0297fd3c4b0a7c88276e","cid":"0x0f015512204adeb2ae11ad4dad8fd61507ecf4bb56e8f85558e6f9d511a55edde1d8f8d47f","timestamp":1676988612,"dpid":"4"},{"from":"0x12ab259853038a8b542b77d4ebf3af671b7e8e73","uuid":"0xeb4670ff98c76bc9c87bbb0c9b48ac34b4416a60f419ed1e12927c7270f231bc","cid":"0x0f01551220f10709a2264cfe211072cc76ad6e6d3c68eb859651af5c17054bd2bdef041103","timestamp":1676996292,"dpid":"5"},{"from":"0x6f5e440d9fad549913512104a8956098c7c7272a","uuid":"0xf90b7a0acdd1e4f958f0955ba9b6de5f1822d34bfce88748db767957c3e1c4af","cid":"0x0f0155122084f827480eb0f8e772e99292c8bcea8194f46f71c831277a35bbeea388568e9a","timestamp":1677066240,"dpid":"6"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122058ae4caf6f4bd65bde8d4190931b4571bac4a8dd277ddbe522bc8b886b65f17a","timestamp":1677081012,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122068d207508426ee3c8a17616846ef9958c99d9d9d0ad1cc78ee2bd987f6bd6db1","timestamp":1677080820,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x38009c640482b5a7880f78014f467be987151e5abaf8cf698601d7e8f2dee8df","cid":"0x0f015512202d3d21c9ad0494f149c2f1289dcb5a3b35f117fc6bc0ef5328637789424fb8c5","timestamp":1677144720,"dpid":"8"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x71b1b81b823d60c7ccd855e030188c91941e0b2120391166228daa8fa0b105ee","cid":"0x0f01551220c94af041db6bfe0b46a4e07389ad78e462219fbd448076089596ad12a6801f79","timestamp":1677230328,"dpid":"9"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220be730fe1e9ae927e4bc786c068fced1e7583f41bec29c1ad8481c843934d3b9e","timestamp":1677511224,"dpid":"10"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220e110cc29d132026ab3842231caa37fde7be2b30275a272ab7a93992386ff7fb2","timestamp":1677510672,"dpid":"10"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x447fbec7a42e617052e792b1edfda430aa0faffec7f105dd7a54ff95bd5ea985","cid":"0x0f01551220dfe8aef953593b5444fdb684b23a5bcbde97476dcf42b32803b6794476aff2a0","timestamp":1678309056,"dpid":"11"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x5f6d2d91fa15a5004d4b7af407ffd8ce768694f5cab631f36c0984894f6f8c6c","cid":"0x0f01551220d520bc99de67d90929118eafefed5927995e541c6b201a455afd5f3f155c4b15","timestamp":1678771692,"dpid":"12"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512207cc5fff1a8eb0b2fa342d6523d8d452ca602d82af065daec2677fd0e61a864a7","timestamp":1680117252,"dpid":"13"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512208dccc1916b787f489adb0c311502e94cbf8ae04af45ff199fadd145361121220","timestamp":1678814328,"dpid":"13"},{"from":"0x60b059dd7799d156f035e6d3ea51262862bc9d4e","uuid":"0x642e30a12bfdce5c5d300578ac7242742a5f359b5561fdb86aba885349118468","cid":"0x0f0155122012bfe6212a9372be0fe15f2274faf82e5bbad020eb568cdc7a6fc2845ae6f067","timestamp":1679014104,"dpid":"14"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219484,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219328,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f01551220a9a416c935b1d5567b5e2991a9dc8b36338704d32c7715933f39a772de69150e","timestamp":1679219244,"dpid":"15"},{"from":"0x32b1f642d5ce695be9ca853aff84d59af5e02116","uuid":"0x21be1e83d8b580427585617ab76531420dea3ca384d3eb5328610c081b2c5756","cid":"0x0f01551220dafc5b29ff71836069925876f573c4e084c770d66371ecd48f3407c5803cc70d","timestamp":1679343324,"dpid":"16"},{"from":"0xa5c21ba7e36cae9af5a5894a9a8a65bac3f752ad","uuid":"0xbf4e8ccc9e5b411edfd246c92b3ec1d829ca4b1eb41701366ec0ff21d9017920","cid":"0x0f01551220c632038257b7e5b73160725957b4f4da2af52004a2bd47981009c94db9c1066c","timestamp":1679409324,"dpid":"17"},{"from":"0x71ad8aee76d7792ec41f3cae707b65594c67373f","uuid":"0x0dc8d351f011ac36a92a714073c6b2ad6e4d5107eb81ff70670c6737a4b6a94e","cid":"0x0f01551220c63b85344cc17c92bf11664a86b7d35e9fb2e6fcd02dfe2a1df19630a124d521","timestamp":1679409744,"dpid":"18"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x1737974bc778096d399921cffb55fa2a0a58b7413eee9a5d9772ea544a56d3ce","cid":"0x0f01551220551b199b7e78003e35010a0fc62759290d362affd13d6f01872cf9846e21b12c","timestamp":1679539764,"dpid":"19"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512202dbe5b2beaf6182583a63a23d587a5c7a573d8637d453445e1d8325a50abe867","timestamp":1680554796,"dpid":"20"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512209e0dcbfa6f3cec9ba0315f70a4941d6e410456899691ab0701904b4592d9a4be","timestamp":1679540424,"dpid":"20"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637288,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637252,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220823b961f7d6323255c47e996afe192c96cb0babd5cf91383c5ca505b00af88e6","timestamp":1679637204,"dpid":"21"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x7a041ca4f95c29e37f84e084752aba25cdc5e4a57e2eef8e6ba02622e97cad63","cid":"0x0f015512207c1f3bcd940e08a792dcfddcca0fd350fa6d05afe6dbbba0f94ed56e1878d807","timestamp":1679658768,"dpid":"22"},{"from":"0xaa572e27403dcabd42f0afe938bdd18c3b52523f","uuid":"0xaeb5c1f0576f6c24fd087c9ca9837452c0ac5f8d41104becb848b057d4cbcf76","cid":"0x0f01551220b97f2b4a0ed522b7b888b3d447a9653143098fe0991482cd02cabea69951b6b2","timestamp":1680567024,"dpid":"23"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0xece33e446b40791e7d5079daf61fc5d7a5ef41c0029297b8fa4aef09ec9c1825","cid":"0x0f0155122050118b2b1175fa6b3dbbac44651b048694f7de272bee5a53cb122a3aab03ae23","timestamp":1681191960,"dpid":"24"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xba82c370711c6a35946fa10ac32d27019ec1d0981057fed3d1aa9025297c44b8","cid":"0x0f0155122008f915011dc3f8bed078321740440a869c23a0238938f0902f94567291bae372","timestamp":1681495752,"dpid":"25"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f01551220413f7132abee3941f9db9c875ac4ab2c84888249d2558496cec2f01f7fa0b8c2","timestamp":1681497900,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f015512201237f9c3c73a3fa6a55b80d67bd744fbdd7b19693ed32fb0465485c1d1bdf8cc","timestamp":1681497684,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa94370567701bbaaca632e502b4a84c07441daf07bf1a23ca2a46004a35fede0","cid":"0x0f01551220874f2f08bd5d67a432327d6d7ca987b4bbfc83b0db03c76453d73a9395899450","timestamp":1681505184,"dpid":"27"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x7664a535b66afbf011d6884a50a280ae9a503ce94acc9497728d459a153d827d","cid":"0x0f01551220eca5152df9f89f614a5521ba8f8a796719772286152a11e4e8c4659f4d505efc","timestamp":1681506588,"dpid":"28"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220574146a7501807df98a7547c0b3d0bdbfcfc0b29704c823ff86571b9a3deab85","timestamp":1681736628,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220c82d987df438ab758c9b557259e8fa0f4e1c2278651c802608fbdf8033419821","timestamp":1681736556,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220be43004fa14f3ca7e2e9cf01f1a0b7906b3728e53c8b1af19e309e1568f85cc5","timestamp":1681762272,"dpid":"30"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220734c2b0c3a1f21c05663f5a9d2b258d3baae0847e06da7699959aadc6616c026","timestamp":1681761420,"dpid":"30"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x57e2c2007b7af4859a04a5a1ed555f17f4d54a969158bc73f079b7f85a133ad5","cid":"0x0f0155122007140ffce5d9d7cd93e847b4ddaa75400b0baab040ddc2ccc56c33a141458556","timestamp":1681805808,"dpid":"31"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x5207335dee8c3818e7cf16b4a11ade55ab52d3957b8bd179cf351b8578746c03","cid":"0x0f015512200053d8f17531e05fb7d33978d35eb4fb6028dc8414369fbdf5a660cb22914ab9","timestamp":1681830960,"dpid":"32"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x8e794cafc680e76baeeb09e74ea413c816fedf6b716337d07abdd5657f69f822","cid":"0x0f015512205aca92353605ea8a45e732995d51da82d0dcb08089f907420dbe60ff1795dafe","timestamp":1682014560,"dpid":"33"},{"from":"0x134e95ce73fbb2a223e52351f8492088a86991ec","uuid":"0xf1a54e169d7c721a532b63fe25a070c673dee267f9688537ea9005f9fce8f118","cid":"0x0f015512202a09ce4187780645e8e49efff4ea3b0caef18ed60c42d9647890fe296db7d3a1","timestamp":1682144088,"dpid":"34"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f015512208076546c5b3eab9a046d4c3c7c214fa94bc80a6d67c6b310e8b3d8e4da0c17c3","timestamp":1682813004,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f0155122060953bffcc76ff9af880b9c7dc0e69ab8f8c2c2b9d01afb982d1b6f38bd3eca8","timestamp":1682746284,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f01551220fc56171ee7ae7bd3eb3e36d2e88c34d26eef0deb8a2850aa70874734324a5c72","timestamp":1682534976,"dpid":"35"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x66ec71949b03ac1cda5600f93a042cf0ef4a5fbc114abb5ab00f879320e67429","cid":"0x0f01551220a2e49ddbb71fabd49f69c44aeeb69f597fadff2061adf6c46a7d6a8f77848d09","timestamp":1682670864,"dpid":"36"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f0155122003fd6d8a9eef363a8f0331c364da74dabf485fa2c90142d6d68a5045f1d7068d","timestamp":1682793408,"dpid":"37"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f015512200370361d9eabcbcab401ef4d4f97005094f536d3b7f89353d84349deb8014c66","timestamp":1682793228,"dpid":"37"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682822136,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682814000,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f0155122006c38ee5c3d87df8f1871df54b987c1ce43726f892a9ddfb08be670863bc4970","timestamp":1682813880,"dpid":"38"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122091768c624c35d1bb57139837d71eec4bf81c2888616f5a3cffbc0351a172f6c1","timestamp":1682849124,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682821080,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682820648,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122033259ecc232dd46a608ff88651128a8da6bdccc2c917a0c2ef56b4dc27f7e498","timestamp":1682820372,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821884,"dpid":"40"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821224,"dpid":"40"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220ac1f68266f0f2a9e7fa96731e46c54a86aa36bdbd4a22cf1a5c08b2ee9957600","timestamp":1682854344,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220e49575cb06ca399247ae08fae9a8b3a3ff5de24b6a8dc29e44ac3ab6115c1539","timestamp":1682854224,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0xc73b88a9747fb3eb3fb051bbb3971faaf4819d1b8cd041028cc5531e3f9c6e94","cid":"0x0f015512209cf107adddf229ae090c27cc3998b51daf075dac2e3824d828cc71e1c3782903","timestamp":1682856480,"dpid":"42"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x13ce389478fadc96534f666ea8a035dc54c4d08f12ec16bbbbbb0dded66e93fb","cid":"0x0f01551220d46086ee0c05a4f167ae2637ee677a562ea1832d38cd953900b43d4836d5ec3e","timestamp":1682951112,"dpid":"43"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0xfba4b603620f33f51b5afbdf87de9ae79796d5ac1d4ac6f19329460615a8eae5","cid":"0x0f01551220f078470899aff3081b145084f68c9a2445b99322dcd658a2650f62a75fffe89d","timestamp":1682962248,"dpid":"44"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5e53b3b10212b4ce9cdec84c8fafbd305d80df6c778375e2977620d1b3f366c2","cid":"0x0f01551220e5895006b048366ad69277566cb11b20ff47201fe00f40dbf36f3d36c5137456","timestamp":1682993892,"dpid":"45"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220e627616fc85b6405cb28bc119f5f5073ac4c8796f6c3cff19d78a782a54ff32c","timestamp":1705420740,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512208f74fda7bac4317f39ff66c233ae140290d6ec58c604e73d0259ee384040eac2","timestamp":1683299940,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512202dda4e35c872736baecfe8d06d38854bda736485adb616f220fb4b19919e4562","timestamp":1683298680,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220bb1fb9ca4d11adaaa6514289cdee3c0b7ee3cbb848b49be0f9da3dd8a1dc0b0e","timestamp":1683227616,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220fd53a16eb6b7a09035a0f62c96a6a7dfe38948b84b44ffc8a8107938c87af450","timestamp":1683222132,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512201a6d456535ce453d3f62ce0f0671f8970ec00638d2271bf52b03c0520a1871f5","timestamp":1683053508,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x90ba1ee3a35ac4377b45b8576d2bad8dd590b8d97fc907966b08eb15061b874e","cid":"0x0f015512201f746518f1f6b93acd19aa5a9af16baa4cbe66e48c71548d8087f6067e1d454d","timestamp":1683222948,"dpid":"47"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x3afb6232b1af22d2d2b32c8b8f93f51cd826fde329b43c1ad296b090810ea96c","cid":"0x0f01551220803851d9e43a70fed0e93da3f8e720cba9f4b9e34130a3648b6a67cad93d60bd","timestamp":1683232692,"dpid":"48"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220a4e515a62882a47bc943ffe60338a81d5f0c3effff4f4494c84565f95141a50b","timestamp":1683237288,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220d866d792ea34c8f71d6d855dd3901605bb91d0b451a6e7c5637da941408544df","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f015512202fd9deb76c3a394930c41135746ae86abed45816500dceaa5483d2b4d206e278","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f0155122093f39a0766cc860ab7853207cbe2f52a3ba9d6eeb7baaec5180b3b63de07259d","timestamp":1683236460,"dpid":"49"},{"from":"0xe861856c961f853dc47e5f2ad1fa2b9ea20e4e88","uuid":"0x29d466756bc5ad7e00d1197785c6e18c9adbf139ed8cd9669a381d4d3ab5185e","cid":"0x0f0155122031700de6766f972518cc770961fe4a4aabcb4e482700cea3eea5735315b25518","timestamp":1683886968,"dpid":"50"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220124bbb6ca94ad4bbe9d46a6049df553c4fcd886f9dab60fb55b5b3b393cd572c","timestamp":1683931428,"dpid":"51"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220e4266d1c3697778cd48f4f600ea15b7694dcebcbc5a80ab7a5d425987e411b00","timestamp":1683930000,"dpid":"51"},{"from":"0x9fcc55e782c2e43dfadcc428c4f2f8f32e095782","uuid":"0x136d9f9e3810666980107d2d4cbdb0032ed4f67f591ad82ade1658a29702fff8","cid":"0x0f0155122057b7679b0135b03fdfa0f49ecf5599a50be9f2838eb96b55ca54e450a2c66caf","timestamp":1684412244,"dpid":"52"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f01551220b49ba9590a9b78640004d71de051fb2079d42a111e46ca808c842b227e3a890e","timestamp":1686612108,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f015512201fc246787a63ba676c4780494f7c3e1b4dc2ee82868e33923a5f14221c63c962","timestamp":1684862784,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220ee15b4b25f3f6e7922d998effc6a1c2415db9872c55cdb7eced06e84b69b64b5","timestamp":1685098776,"dpid":"54"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220d32c64e3089d45cc9e0ea93553a81932a265d37240f7255ca118cf93a0812891","timestamp":1685098464,"dpid":"54"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x814875f70b49d8855ca70a4b842ec18e0cbfed86f7dacc406451b6c74946b061","cid":"0x0f01551220547ea04b46ceaa946574346f2afb4be20c3706d7510cff38d316ef1d6aceceab","timestamp":1685442360,"dpid":"55"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512207e406a140574f56a8a0b6bf22ac7b1e30a751ccfdae880f623883365a8fd5ca1","timestamp":1685448060,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512208897402d12a4ca848c6bc5acad80b318044ad8aeb83fdfd00aa138a422030e8c","timestamp":1685444172,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5a82718776361e7b3218a895525f3bf16954747a919ad4279cd9a51f8153613a","cid":"0x0f01551220145c239a14db836ddec6d984dbd3e855902c3a3625b4f89deb169f9d2b23a12b","timestamp":1685525952,"dpid":"57"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512203a32dbfccc4f9fb3f87f0ef22596afcb03399aff87b49763bd67f1bbd8935e5b","timestamp":1685536224,"dpid":"58"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512206bbc0246759b51a6d9c3dae6eb449e98acf52fea38d2bb4c70be3b1360932349","timestamp":1685526132,"dpid":"58"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220d5a01de71ad36c74e536b75ec1d64e8b38272f8e1245274886ed6802b255d102","timestamp":1685613240,"dpid":"59"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220c9d4ab3fb535d36f96e59cd3d120a4cf2a72773a2b14a384aefd1381a52e5255","timestamp":1685613060,"dpid":"59"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f01551220ac71c7dfb47eb844988b61f0ee67e0464256473d52f9e2cc8393d6c7585c7a05","timestamp":1685613708,"dpid":"60"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f0155122085924ebb47c11438d9086ecea1a9a840ea3ee15cd36f5b731945d2e3d06b3a5c","timestamp":1685613216,"dpid":"60"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x23d7465583afc75276d7ec121fd82d34d4d38b6456be9990ab50fe6b2aec11b5","cid":"0x0f015512207dad824f451fe44d3192a14e5b1212ee20e4e11669819ee7df6141fddf26d96a","timestamp":1685614104,"dpid":"61"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x71e940680347c5c59fe91b01784ecc9c6ffcc4c65ebfab0d5b8ff9dc02166a99","cid":"0x0f015512200f484328bac037a779eed442d60d55fe19ce84ab0b52d951e45c24b700ebe1a4","timestamp":1685615388,"dpid":"62"},{"from":"0x008292e57a2d9b34525d82876068652e639e61d8","uuid":"0xc2ee84577e3896e376fb8ddb1f5b8c776b14a641e301db88e4995d2992946486","cid":"0x0f015512204961cc8ec829abb48db7362aac5600e643c38879009114809a0f5ffa21a20392","timestamp":1685615724,"dpid":"63"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xff282722074468174bbcca8902d81de7fb794a493c26edcca8ac007cf7638ebd","cid":"0x0f015512203a8aa5608277fc2026e1971013089a38b172b9211211e512bac708fb54964a2a","timestamp":1685719428,"dpid":"64"},{"from":"0x813eabba8e094bef89fe77b4f497810b9795ea66","uuid":"0x7c56741adb2e6f53a1bd354a7863b817a42d1e00d602450d351b5a3b57d96e59","cid":"0x0f01551220a3c2ca0411fc58b9de718eb7408872a6dfc3420518096fdb632d2a38f757d08a","timestamp":1686220584,"dpid":"65"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f0155122085acd5e30aabbc367b6d6ab8929c7410502f8a7256a0a5ab0f68624e8d60a37b","timestamp":1687805484,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f01551220245a17d29a145e9db11ef5f9bf760e0aae95182abe8f9830a2dfd54507f2d756","timestamp":1687805292,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220747a2fa16ca8ca254aeb3e9ae987d6522fa4e5be266b095f517eabfc37c6ce7f","timestamp":1687808232,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220195d0afb118d9073215302753e64759f9e9fcc5c37abb2aadc97e7e82cd1ca08","timestamp":1687807524,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x58703be0a37ec8b08984024a4659667901d03a7e1c66612766ca3a99ca369ac7","cid":"0x0f01551220e054f76eecf6ab486d3b64e5f12310d65753d8cbcca1bd8b2ec1d058f8b396ce","timestamp":1687812132,"dpid":"68"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5825084093f35bf3b98bb9ecd724400a0f01ed6c3a2ca27b16ea69b53306faa6","cid":"0x0f01551220c522c541b31394352d279616369fce5804ded295e299cbece7f0ed81c934051b","timestamp":1687812804,"dpid":"69"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xc335bda4b1f79e72ff0c5d061e6fdf7af21a86ebac698e90f0cca5ac69b3020e","cid":"0x0f015512204068d1d21f66b52f65c3caf15e4a522d0bc37dee1b425a337386769fd229a8de","timestamp":1687817568,"dpid":"70"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122063982338abc89465b4f573bf9aa1579bfa654f6aa2f12db15ab756d9220726e9","timestamp":1688024676,"dpid":"71"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122021e9bb44b2e4a93be54db472c3f8c5a2604c41ce29230923b7d1b86276f28479","timestamp":1688024628,"dpid":"71"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xfd54b8d85ecd02cac3e64144ab492cb75faf8167b75e73b7141a3404e639c1df","cid":"0x0f0155122049e0b9c318e2763599d6c4de8ac0d7e2a5678d1ebac71a38b47e31e2bd890020","timestamp":1688552688,"dpid":"72"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1689009768,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1688720808,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x04be83778e156d843a2551448780727a3c0bf21107d66d08e2f50f370be98712","cid":"0x0f01551220b0ba939c3c33cfe4d4bf663a635ef823ed188388efb15ef6bb3efcc4c3d21fb2","timestamp":1689041640,"dpid":"74"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x6047e10d820b878a9c553073a5c140bf1023fa3426bb25348037826399913556","cid":"0x0f015512203392d7b04341c36abbb607f36e02e46ce09e87563b089a20ab291637ab816ffa","timestamp":1689294216,"dpid":"75"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220735441775977d79d9e9bd0c1680b1efd6c5c85f01c63bd8b03ea6948bf967a1c","timestamp":1702045944,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f0155122051014af7073b576391b1065f67952d07b510ce2ac4fdd7da516c2c551e52acd5","timestamp":1702045680,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512205cb228099c1cb09650d8b3e5404241058843a2ee706708e025cc638d4186b2b5","timestamp":1702000140,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220a62e52b9c6a2cee08be12a4502664b51d950666fe4a5af90a3cfa913a613d349","timestamp":1701997248,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220513199f4bee602755360752169105632d04fc23173f1003bef320d0337d16c14","timestamp":1692330000,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220c6ddd5e72684c2dad436b6946ded360f9fdf84b73e99c08787030f57312c535e","timestamp":1692182952,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512201348deea506b711b91e43f1ec9d7b8d1a56c13d2226b346e9fdc4b14f56a8409","timestamp":1689518988,"dpid":"76"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f015512208e1e764e2b216acdc6a81d7da26016d4a1185a1137803a378c1059a7e0a65f2b","timestamp":1691496348,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f01551220e9765441e96679a63152b92240d3b59eec842b19660aee519b62b23faaae33ac","timestamp":1691493636,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f0155122010bc45102349d2dead31c0893a00c3959e0f75799d4dddd2860a8cb1ae286cfc","timestamp":1691492520,"dpid":"77"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x985b7ff62652f432b38e1b8aba5d3f4fedbc36345d2f818fdd0011c42fc1a43e","cid":"0x0f01551220a8bb15e9a0913fa0e63caea2bdb8f84b37521252b639231b8050e51c41ab8eec","timestamp":1691501736,"dpid":"78"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x10fd63608937c5589c65117fb50a3736196e854c2746e5afa18616352fc15da5","cid":"0x0f0155122033a510449f17a7331d387be0514110675b2036408cf5751a429e7574a348ad28","timestamp":1692472464,"dpid":"79"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f01551220475e5ebbbde7ce1cedb1a937a6cd13947adece0f50f7be0f0c39f5ce29d55302","timestamp":1693246872,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f0155122016b13ce97577c13677246cb18439f1b197ef62c31b7eeb4afeee59c2d169b004","timestamp":1693245804,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f015512204f1a4a775cdb3605abb7db7bc372fc1fb548752f87df0607c090228a49da8d61","timestamp":1700147784,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f01551220842e076e8c09994d9ede0411b1885e7f5673840507c70756c676028003a9bbe6","timestamp":1693246440,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2985ad1a8ec856aae4e741ec6442b1cb31df4e689741850cc7f401a2d23c74df","cid":"0x0f015512204cac6289a604e10132a917dabca35f3f75d77234d829cdf8aa81780ccbe18880","timestamp":1693247148,"dpid":"82"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f01551220710ec51c7187f14485779174c132b73a601e6db96295e0f70cc3090513f514ef","timestamp":1700147268,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f015512201e109b99ffc1d6eea87e4bae6e62057362d4ca88358ffedc970207ecf87a0a8d","timestamp":1693247616,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f015512206554b159bfb54e5c2ca68f6f8fe3ff431474fd459edafebec2cdf4a1e1e9b84e","timestamp":1700146980,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f01551220262bd98464a8a798f60c4df021584568feb20fe8428de4866b8d3ccb5d8a01fb","timestamp":1693248192,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f0155122089b4726dd6758d6ecff4793315bfefd5e5a275fa886fb87cc3fe711415411a12","timestamp":1700146392,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f015512204730b046919be6e2dd88cfc619840866713f532895fe7e110a4a68814bfe379f","timestamp":1693248672,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f015512206b80bc92b65b2cdf7739f7f926c2c1ffedece7cc7e24b7eba23a2af8d55597f2","timestamp":1700145552,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f01551220f784661a9ee6ddb4da6c0778a9a44fd0ab582072e1feab0e5b5f24775e464932","timestamp":1693249560,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f01551220204550a97883e629602079e67248acec5a82315e82563fc01f8da6fe26739b5b","timestamp":1700146176,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f015512206b0eb5f87cd5afb5a44d84b56435a3faf324149a72750a023e4002622f787afd","timestamp":1693249908,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220bf26daa8622f079ea3adb5fc871b28d814fe539b3094c8ee77ea7839eb50ab39","timestamp":1700146776,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220237e23eaae482991b11035fa1faf61af5ad65cbc8abe7992a7f7683f472de936","timestamp":1693250244,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x87cfcaf39a1c482f5866bfbe48d4f63d65d7db9fb992b6837c688d2013940c87","cid":"0x0f015512206fd907cd2fc2464c48bba2fe4acbbd967f4ea17277f533f6190ebc88fe583e8b","timestamp":1693251900,"dpid":"89"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512205e6eafe4aeb2971047b54a0f1dcb449c69321094bf55b9e6674434f3704a7db9","timestamp":1695653376,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512206afa0e08ee564a4bcf5a739a57dd19d5b835df7f5da459da3c442d3962d5b77b","timestamp":1694187648,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f0155122016df22da6fcfd0840b276673f1732fdc8276316d0fdbf3529fa06e63565399ed","timestamp":1694114940,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f0155122073452cfb6096325fb8f41f91eb93223f7d424352ebafb240bc61bc62040167bd","timestamp":1695653220,"dpid":"91"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f01551220cf13504896eb49ca532783f3b14b105c7882a0a712f19c031adfec44e08fd56d","timestamp":1694197140,"dpid":"91"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x43c4629df6245fc911ed28bd3e4fd92899dbed0e70d6086467ddf89407c41fe1","cid":"0x0f0155122050265ea5c933a4b296c88a16862c006698445750eb177f512e3613b9d364345f","timestamp":1695218412,"dpid":"92"},{"from":"0x262b4f07e42bbc33f597fcf0d854e9dafaf3d469","uuid":"0x9db9db43f2e485f733b91814cbeb189c03f6a4ca18c4f07729cdb9bc9d88f852","cid":"0x0f015512209a7f7d3d0f68ffb55d85d6da6c442c9e2b2389ea0b1261b13159fa9f098102d0","timestamp":1695246144,"dpid":"93"},{"from":"0x9452d0680a39195f59cc8a8b794aec0a81d51cc9","uuid":"0x6d7d697d017315f644992600e7c28f2914a3908ed134aa6b1e49ebe708c16dfe","cid":"0x0f01551220106cfb1003c1e512f5187ca90dfdc66fe8a4df16d7889413c38c5457fb4bdb1e","timestamp":1695246324,"dpid":"94"},{"from":"0x64b3f6f1eace5ba2d49c430ffbf085f4847bdec7","uuid":"0xba7fc52a499293973b4b35f8bbcfda823a2059c9a8a175b13cf35d24707b50b9","cid":"0x0f0155122083f5c28f77367e6084020d3c3621c39a17f108dfd21ef4d157c0aa9d5107c5f6","timestamp":1695324696,"dpid":"95"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x26a149a3b1efaa583e80571482cec997f375990f70bee46e3230bed5ba78fc55","cid":"0x0f01551220d48c3bca9221e49074d1cd6df4f0bbff5852baa1cbd24a9bdcd8ce54efbb9a50","timestamp":1695816576,"dpid":"96"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f015512204818e564ec9e3bbae2feff07d68040876da0436fb6d89fb5f54daf95a98d72b0","timestamp":1696594740,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696481172,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480884,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480764,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480608,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696479552,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696468416,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466964,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466820,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466724,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459584,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459560,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440036,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299912,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299876,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299600,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299000,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696296012,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696295376,"dpid":"97"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303944,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303560,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536972,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536936,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536912,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536888,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536828,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536804,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536756,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696469268,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696336296,"dpid":"99"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512207d74909d018b17bf267e9983f5a4ff1b1b7cb91314c7f4e3fb99ec60e3f6089e","timestamp":1696840824,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f01551220e88a7c59024cac199699b88226bf15f3dad2079ad7f8de522cd58d212a7e4cb7","timestamp":1696507296,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512203a2cbe6fe0167c0984e4139576143faff5e3afbda15e52091379c4788bcc34f0","timestamp":1696506528,"dpid":"100"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe3bcfed1e03918f9d7a48903f9a96e2589f8823d1c47b6293cd744b7d7d57161","cid":"0x0f015512200e0e343667925a707bc9194a7581e9350e73aacb16423757faf047229216ebe4","timestamp":1696589760,"dpid":"101"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x9e102f9a7ce12cd3dd4944b13d51493e7079ab344acc5d84e6f5ea05a12353fd","cid":"0x0f0155122044410acab6cec9a6fad6d5e92f690eecdfb0bebab46b04d4dfaa4cc50ab3cbb1","timestamp":1696605300,"dpid":"102"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x69114e8fa768f26d452f12090831b9c6e8d58ae100ac16ec68cbd661ee8b3997","cid":"0x0f01551220be7eb409dbc450417545a5612651c26d3ac6085bd09c11017d700d25e02331a7","timestamp":1696841976,"dpid":"103"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f0155122081133e104e9fce1fc05bcfca24152c735c24639fa938b2751fdb5dcc9bbfb699","timestamp":1698779592,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f015512209bfe5c87d9e68468f132e569e0583f33a30e2a4721d7e250481d43c0edeadb40","timestamp":1697792352,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f01551220149da347cc8d88f970c3a014de162231bbe2c6b6f8b977f45c2b60b0d2052084","timestamp":1696842144,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1698911760,"dpid":"105"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1696842444,"dpid":"105"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512204a990fa9cf6ec736ee690ab111e9bde63b2615384a56b40db50eaa3bfa19d1fc","timestamp":1696961232,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512205c33c5b575919cd5dfdbcae96b335681a9fd72d8cca0482bf761ef6f2bb815b9","timestamp":1696944228,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220e46482f58f98a662de09515c518875d19ad5815effe0305a19ae113ee24e4c03","timestamp":1696942104,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220210b3fed6c321b8b3258241c07b791b8f64f07cfd349afefba85f1cf50d7481a","timestamp":1696941732,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x8f79e11baf8d51b43253181d18c55f177041ded43dc9c9672995a777468b3640","cid":"0x0f015512204694fa680941e0723a66f03b755e81baba5ac3d7d0b48569b76649e8f5bebb4b","timestamp":1697040396,"dpid":"107"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x65be6859a644c7bc213656bc2ffbb228819097e5a830a0d84f681597d30df140","cid":"0x0f01551220b93efc4a93e3930240b6b73bc0bb8cc248a91f81b75af382d9ac24d72ac345ef","timestamp":1697792640,"dpid":"108"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xb8ebf456801e699d1ac6aa26330c041d6c28ceedb7062de145d478a69b7e5820","cid":"0x0f0155122028ca283b93da193e6e73785f3bb9bdaac6bb44c4433d0141ced0f9ef18c7d0db","timestamp":1698054684,"dpid":"109"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698323460,"dpid":"110"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698079308,"dpid":"110"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512200b0096b5867205f23384349f18aefee7e47e1927be1079c2b84a1ddca165a157","timestamp":1698178344,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512208992878828526d44bf352a455357ce72f77d7dc2b1f71b248db7f3c4df04679f","timestamp":1698177444,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f01551220af0bc91008bdfcf0f05188052122ed4262d2667c87a6aa962cabb11e31bc933f","timestamp":1698747864,"dpid":"112"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f0155122053cb052093615303fae1741d71f86fe18d656f43f70602bc379d8eb6dfc69ad7","timestamp":1698747720,"dpid":"112"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xaa6e41ba11eae99e35c56cab24c16a6e5473e49d9be3f59901f15bc3ac5449d4","cid":"0x0f01551220da6ad5231abc31c3ae5edf69b5b52e339df6a453731adb2068c26eb2013d9707","timestamp":1698782484,"dpid":"113"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x4c693ef748d114e76316c3407a0d442f9d9d64f1a7ab9a9c318a2bd4a5b14a77","cid":"0x0f015512203203a4104a1e2478ed314ea918b7fa667bf04a0e84f2e57f0c396841df3983f1","timestamp":1698782652,"dpid":"114"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f015512204765f0ba19163ce27730a917da91b1fe448a8ab0722aceca648dcddb85ffccea","timestamp":1699355784,"dpid":"115"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f01551220109f00c84c67068052e782043d08af74cab99a4ec56e442f041dca2de44c5a9e","timestamp":1699355412,"dpid":"115"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512202411f0188e2db2e46dd1a7d3cd736926228deeecfbf9397c8b76067191272434","timestamp":1699954776,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f0155122089afb0c6def46745efc1eaabf44254d8fc4ca943f53e4d82dcdd8a2cbded7981","timestamp":1699887960,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512207c93e0ec1b4c56a3f08934f555791a62be8abd7e78456758d5b65c0cdd7a836f","timestamp":1699608000,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f0155122072f88be300d505c2c03197f114be1377b1c58b6f7554198eb17a6708fabd36a0","timestamp":1700053860,"dpid":"117"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f015512208f0866a3d06693c7e1c7916894085864690643caaf7ab0055264f677e0bd667e","timestamp":1699954800,"dpid":"117"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220b66a4185023ca8ce27e10c8ff6752e78fb60d67ff4dfe3960f0758e6b593022e","timestamp":1702053972,"dpid":"118"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220f5fd32994c198aa5588ed19f93b74116fedd046951ad9797242eee0f12c5e2a7","timestamp":1699979532,"dpid":"118"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220e73795df1898e6aab1dc02dfa9ba1164871b98b359b74b72886cb08712e12f12","timestamp":1699984152,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220a895d90ce662de4cb21c88029bcbb7b6fe49e03fa8c35cce7869bd09de36aaea","timestamp":1699983900,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0xc3fb14242b8038ff617d4e31b26ad0d2594e59c7e010b5b25bd1f5d1d1ab49de","cid":"0x0f01551220ae6d7d9e91b90af9c55aa7da36ceca6c0184a0ace57f24a6216c9ff452ec7339","timestamp":1699984440,"dpid":"120"},{"from":"0xec29aca1a8740b8c5e2e06ebb52290700b9a2c40","uuid":"0x0ae8abde65748fe1ced55a91190483d29ac72384593e0dee1eb4a36ebf9c31a0","cid":"0x0f01551220df36b21446f6dc9e3ba055f20d5a727a2c7230a1f93f21a5bfe0fd7326aa63c3","timestamp":1699984896,"dpid":"121"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x6221f9c34c95bdbaf8b3bd7685c13bf50ace7a160bf28d98aff645ec3fb8e6a0","cid":"0x0f0155122067995ecfc055df88a582b9a1e1f1dc2587c1a76dd5afa1dec281c47f76d5ed67","timestamp":1700005716,"dpid":"122"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x2859eed83647d87114be9fb521ed5a51e7cdb924cf493d7e59e4b73d6bc8c346","cid":"0x0f01551220b4c0bcdb82ae88ecd2584487a63c8732e53b4f910e3cb4b2aec008d878c4579b","timestamp":1700006352,"dpid":"123"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f015512209993f6809c47dd8bc0443c4125ee92e525f4893acf2ca315c3cfc5413412f1ec","timestamp":1700046552,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f01551220e8df95ee93c95e2741fce2acef1a6ae153cf3b8474ddefa7a99ddc2c1eb13931","timestamp":1700046432,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f0155122042b4a34b09a4e8a6ce04608c7dffeae6bc062c6d26f7a333b07d4021a3b49732","timestamp":1700046408,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f0155122069111964df6b4928906d649e3ba2aa55569c9a2aeabd0616da9f51a44d673b9b","timestamp":1700058384,"dpid":"125"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f01551220721aff2f3e00530a72d440a38bf7570b21ae0eb6cfd0ef4b8fb10875fac95c1f","timestamp":1700057772,"dpid":"125"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0xa3e130367fbebd19013318124d7d089536db6d5688e75c80772875e65b050ecc","cid":"0x0f015512203ecfb122b716f2bcbc7c4f1bff0489210d52e295bc7bd008a18c56f720de8ec7","timestamp":1700059584,"dpid":"126"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220210e8caba0e00af12d153389051d4ea50d138a2c2b454b06f1325f8f8bf4663e","timestamp":1708492476,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220a60380f7f954d667b0583b954fb72ffd94c59ad3417377fd8513e58e06903a5b","timestamp":1700063832,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220306b0b6e24f14ab86367db5427347e39bc5d49ba718931a4efe0d807ab168e4b","timestamp":1700063400,"dpid":"127"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0x2cc8cd59679bd6e95683ed68b681add38c62e459406047f00a34e8ed0549d9bb","cid":"0x0f01551220e931c8247b57d7c261d00f509960dd637db0ae80bd542a17c34d615932dc6c63","timestamp":1700063832,"dpid":"128"},{"from":"0x13b71b614715db683d0985f15dfd9888c429317b","uuid":"0x782136c47d959413bd15ed0b9fd5fdecb7a06437751bd5dee317f87a09d019f1","cid":"0x0f01551220d36e5b943c41f27942bdac19364f79f95f76df926aba53cb01d150b552e4206f","timestamp":1700754096,"dpid":"129"},{"from":"0x73e4d86f1686671761c640556fe2e12a2a94c4ad","uuid":"0x0aba8b597b2877138a8785d7cb0a8ed230cb1a9b2f52517d6676cb832947d39a","cid":"0x0f0155122008b11e04f4fba10c61564ffc65ecca9d232a20dcdc001b38736c4c6aa0f3d3ea","timestamp":1701434724,"dpid":"130"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122000e10fa0b2965d2666d5a108fdc6bcb01af37c8bfd5a3afc9d6c1aa354f6098c","timestamp":1701703056,"dpid":"131"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122076eabcb47c97f19d71ab1bfcfce0987be7f5109b066569d8b4be421f38c14c46","timestamp":1701702708,"dpid":"131"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x1d8ff65463a48809e6c4a9da98d864dbb39a6e70f952a7850513d9f6343fd307","cid":"0x0f01551220b0be3482781d35a1648e29cbe848ec7d1d83c9028b4a7c27392dcbe2ba9492d1","timestamp":1701788316,"dpid":"132"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xeac3f6244306f4afa2e4d202e80909d4818a49dc0c6a14aec56d0a05b8195a64","cid":"0x0f01551220b8bd404569b21cd44f6ad5451edfc21336494145e4e8bde5c702acea494d4a05","timestamp":1701795900,"dpid":"133"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xbf07d6a25bf38eec9a87eee75afc5a9b287c6c8473a9d8cf367d6e796323623a","cid":"0x0f01551220d4e5ef8956132f8481027b41c94323c6e76b2335f30c4f3f3fce66e77aca73c1","timestamp":1701872976,"dpid":"134"},{"from":"0xf44fb21f73df7b54c3305f1326df86ab073731d4","uuid":"0x7292bd468b30e40b3c40a39b4dffee06500286bb1a44c59070291a5f1ef56ca9","cid":"0x0f01551220e5e75323762d53eba66756b3cbdb6e9e45e9ff741d3894066d3b2857d46a660c","timestamp":1701875664,"dpid":"135"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220bcc013dc83401bf1bb314b0ca76780487057b4f29615a361451f08542ad90af4","timestamp":1708382904,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220b876e7933f617fc1fcdaf86797254fbefc4754b793def83164cb554c17996b07","timestamp":1702202688,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220089b9550d2cb5b107014545de8d459181cd7a152943c02c552af57b54a1d94e1","timestamp":1702145736,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220fd36de1434faf71b4b1ab2a12342504678055ee2685af920de7fcc897315b382","timestamp":1702142316,"dpid":"136"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220dd652b98741db1d28d7b990e5ea1f3ba54112b3b8e6ec3bb01018d853279ba4c","timestamp":1702439796,"dpid":"137"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220819b84a99e498da48505323e46852640da77d055cbc0036d657d6dc7c6bf5007","timestamp":1702430448,"dpid":"137"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220b7256ffc53ad70214a702e4b30bf3e8183a6a7f2d20a5e3f5439db49457dabbd","timestamp":1707153744,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220995897dfa81254a1f3d870bc8a57c16e22b890c7958d414904de766516d9aa2c","timestamp":1702512600,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x7e008f972f815b02881457ea07f03b9a4eaa1b4a45b61fc22c925b7f50015a6b","cid":"0x0f01551220535462ad82251639194ea94cdf68db782fec335c8f2f73a13134457483286b6b","timestamp":1702512876,"dpid":"139"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f01551220a1386e567a5e1a73d9833d0d26782df8d0a34062456a2ee4e681b194f8c830e2","timestamp":1708801020,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f0155122039e36aab0d90bb2772154b2063089c213a012d86b3fb1ca77526b78ee7a8f630","timestamp":1702513068,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f0155122001aef818cb8368515664b83185a8e01797f2b0eefbc9f586a09ddca8a9ad13a8","timestamp":1708802436,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f0155122001aef818cb8368515664b83185a8e01797f2b0eefbc9f586a09ddca8a9ad13a8","timestamp":1708802436,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f01551220aa4db6c4cf880f0674a5edd4835dba05e0bac117adfe566361b5ac1765487706","timestamp":1702513164,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f0155122092cb302ebcfcd967ff995c7a7a461e98eed05f552121139b8633a4ae1dba90ef","timestamp":1708802160,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f015512206b5f100c2ea07ae1083a6fd93e172efb81a0d4ab2b43d6138f3fafc6288dbeec","timestamp":1702513344,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220faed6c16cef7c05f2b8a6f37490478bf25856cc32f52d050960528a2197baaf7","timestamp":1708802052,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220697369ba9d9da8fa571a5bcc53986e020252a7d6d64f3661c1ba9590e7cba65b","timestamp":1702513392,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512203b0fb331f678204e99de49e0debd36db0a1e44815d6ef39fd3f306c93d18f874","timestamp":1708801908,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512208e3570f0b0dfa9a93d17fe0ef6a82fc2b72b29e59c2fc12711a5c9f51a0de453","timestamp":1702513452,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f01551220da64c412f894d56208331d2ce8a6f11e29888b15d4d65b2b5a52ec81193a6c13","timestamp":1708801680,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f0155122021a6c2afd04b4770042982b0c74418082374380741cc3802fa85cc594f56569e","timestamp":1702513524,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xac8e69eeea26aae8b657e3466fbec53d2f5afe65fbbf0d6d1c6f656b3f390a74","cid":"0x0f0155122083dc3d796d1391aa931301a744d65283969f452d5289cb5c71c548c6edb55859","timestamp":1702513584,"dpid":"146"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f01551220b7a80cd9a6057e62834925024ab802795706e343be5c1d304135f8f68a18719b","timestamp":1708801236,"dpid":"147"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f01551220b7a80cd9a6057e62834925024ab802795706e343be5c1d304135f8f68a18719b","timestamp":1708801212,"dpid":"147"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f015512200f50a0f502a5b405c40fac0fc9cf3765eb63da20dc42be1b02eaf83b375f599c","timestamp":1702513620,"dpid":"147"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220904c16b294634d220959d0e3d9d1f443e929a53604f6104fc53e050b44cc53e1","timestamp":1702907160,"dpid":"148"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220267c4eb8eb592d8d167f1b55f89bc96f7660fe3d8e2ca29ecc307a817474cb79","timestamp":1702559448,"dpid":"148"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f015512209f4f928fe1a7e8fb872c6eb949502bbd6a982bf4ffaec5e3f2f8fac9aec82651","timestamp":1709143824,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122046b8c587821d9b1918d41b9afead51bcfbcae59b6c75ffa4f55eee5139514542","timestamp":1707406116,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122048ddb39fb53041b0ef9039b376a406e6b263cda0eeb58815f0976171fecd4f4b","timestamp":1703072388,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220de5bfdaf769cd2d703f8eacdc5de1d982901f05fe6258df98f1599d0474d967e","timestamp":1703003868,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220c21697f0031be23b923a7db26af93c6fb3fc8797252cb626b5e17cfe2d1a14f2","timestamp":1703003448,"dpid":"149"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x85d5f216ff2be7742bc640646b4d9b9836a20a852ff25ce715e095b3e1f4255e","cid":"0x0f01551220bb03814b82b0fcae80ab12471446407608899e0933665cea73c14f391d445b90","timestamp":1703205816,"dpid":"150"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x2add80498110745a1115061b43c7067c92018c667f6e0da0bf0fee267241a3d2","cid":"0x0f01551220502682b3241166c26f25cdec935653ffd85b4024ad5316dabba71f689d623adf","timestamp":1703212224,"dpid":"151"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f015512208a7070a9a1120216956a40a42e4607388135ecfd1f65d4bf5d0339d61f6acdc2","timestamp":1706832732,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220f5a4e879a08793b02f7a9f07c2d136053b9d2c348901958528b607cca8ea3298","timestamp":1705091496,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220a8c690fbad722773e549f293cd3d73e400d157213fdf93bc10f627858ec5be6e","timestamp":1705091376,"dpid":"152"},{"from":"0xe493a10f41a846b67cb12a91cac4b2ae22440921","uuid":"0xfbae316e2b0148b3f13c11052503b00fe1cac5672875abdf09092a65aaee97fe","cid":"0x0f01551220d1ef0ec2445118d9a6b70ee7b056eedcf7b24702cf3fd5adcad98f6be5b8224b","timestamp":1705491780,"dpid":"153"},{"from":"0xe33c428cbd313983a5432a3d255025e456a4daf5","uuid":"0x276da67ec23c8727b5e9951e63a5e1cd507720d3b1194fb3e4147120767f3e06","cid":"0x0f015512207905922fd01255f1a077a628f6f4c2525f6be69609e18f9419611968ad82258a","timestamp":1705579488,"dpid":"154"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x3fcfba6cbd10882d546c675a77f2a2ecb3a618e6fa633358ff8377a28540a84f","cid":"0x0f01551220908567a0df7c37399730344ebbc1e60d3757c0a45bdd5b41d10052ca92fd31c8","timestamp":1706550924,"dpid":"155"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f015512204cc5d27a1115aae826e242ec8cc1b6e6931bdb470070d83b2ff73aa9d7707652","timestamp":1706737632,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f0155122027a51c66a2c693b30f6606794ded695306784e5e727d6f5f049fcb80a6adff72","timestamp":1706735148,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x47f74c470c50ae5ddfe11da2f3b585d05ffbdc4dfb0c01547274676c4ef60e2c","cid":"0x0f01551220a8161f63c033a70021c6e60e471786dd1b45788ad392a2409ebddce3256b68a9","timestamp":1706738172,"dpid":"157"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xb04be273bc7f354da4585104aae0fbf4c548fc681ab9d40cba3d5d404e11aa45","cid":"0x0f01551220cc325f22df3238eaecad77db3d2ed028a2c57fe28c393e08b0c06e468a734525","timestamp":1706834520,"dpid":"158"},{"from":"0x020e8c4ea0fc434257e86c51b69da2d62106879a","uuid":"0xf6666111a06e00eaa5a4912162684ae3b1852b3387d3bacc243284e79562e6a0","cid":"0x0f01551220abf9ce0479fd7b8603c452275c252cc5d4060c5b7b88080a195c124d4345d47c","timestamp":1707473772,"dpid":"159"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ee7c02a42066b4b2b99857d89fb6f59baa8a2c40bd9aa602ff2f42876829ea65","timestamp":1707646572,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ba3af9f1c4d0b07d0063a308d8c67115088b496ed1732c03bb56ba1a4f35141b","timestamp":1707645552,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220a99be0a78266663897b0f223cb57d746621c5360fe83d0d2b653c46542a04aa0","timestamp":1707644916,"dpid":"160"},{"from":"0xb9a4b7f5a15dcaa88d8b25704925543f006fd0aa","uuid":"0xa763c3e4720c8ad2bf11a5e2b5354b0134cd7dd76c62b8dc386f8f13b0183a64","cid":"0x0f015512200b6e4e0ccea7a56cacbe0b94ff6de273aa2d2ecc4f1b6d53186cbb6fac0f2489","timestamp":1707848244,"dpid":"161"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xd6bfbb7ec4e1a9cd43d3066f51f3223235141057f881133b5abb1a475afb8b14","cid":"0x0f015512208eb0adbec6b4ab840a3c72e96512319c3f93b14512eca422a68de3b44e044258","timestamp":1707967356,"dpid":"162"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x045272643ba9f14c8f690ba8fd6137e85385651ce9922b41387574fabfdb221f","cid":"0x0f01551220bcef790971ef1cbfbf71e524160f6b640b9bd6aeb2eb3bb20adc49c6a64da589","timestamp":1707967740,"dpid":"163"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f01551220bf482a18ecf16d2cc718d5f8e6f8cbe0b8a4358e507d98f28868ce3a156a65b8","timestamp":1708514124,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f015512202f01576894f833ce4122cb232a03cd4ab0cc6df46d2569aec503e790026ad2f2","timestamp":1708453920,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f015512206de947161fda68b91d9baf0410906f455aa42d6c9590ba0541d02cd562920cd2","timestamp":1708094712,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0x99f716e51bcde24db0d5447cca159e8dd5623238b7fa5cb8568755caf6785770","cid":"0x0f0155122055d64bbe9f9b67bbe3ebfbe0e9dc35fac8a641daea35a613d026df1c469ce4b8","timestamp":1708109700,"dpid":"165"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xa4a574c98253571adc3d841f92768e82c7fe15d9a3afac0418bb67abd549067d","cid":"0x0f0155122025ada02539baf756f626886e566f10397725e1ccc7fa1b5ce9f12ffde0d68e1b","timestamp":1708372176,"dpid":"166"},{"from":"0x0aeba31a80842819ed4f74e3cabbe95d88bbf213","uuid":"0xaf059e2165fd8033b5bb3586495a1026afca64eb20767abda7fb56c0108bcf18","cid":"0x0f01551220c4d3af752b910b80348aebad8355d1bb272ec8ddfc84e151b1232e4ef9d305e8","timestamp":1708458984,"dpid":"167"},{"from":"0xb477ec716cd8676f4e2041f16072c263475c5a45","uuid":"0x9335eaa6ebcc2adb32eb5b535c1edc46a985153fc082206e398af65304af8112","cid":"0x0f015512205c3a7de0500439a66767d9caa5ab6a3f5cae78a249a1fe30950fa998a395e011","timestamp":1708690584,"dpid":"168"},{"from":"0xb477ec716cd8676f4e2041f16072c263475c5a45","uuid":"0x9335eaa6ebcc2adb32eb5b535c1edc46a985153fc082206e398af65304af8112","cid":"0x0f01551220b348bd48e570588a5a3d366932728247e4d75363506ca74d55eff4c6ae65ec60","timestamp":1708493796,"dpid":"168"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x6c5ee35c8e97e0994af70fb433e3063cef696c39f444c450a8588e5c8660dc1d","cid":"0x0f0155122066a67bf9aa1364c1ce39d5f2546bdc86f6fa090c6fd048b75303c5d2d1d1527a","timestamp":1708495980,"dpid":"169"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x41792e13198ad1f824be3e6b4ce73cb3830aeee46dc447f7f140a568b4fc3d2d","cid":"0x0f015512207802b158c58ead95c18cb6d16f33297b2f04e217fd7e02d131c0ef52d5defe9b","timestamp":1708501884,"dpid":"170"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x64777d9a15b2bce04a08d90fe28fbb18072ffbc0f0ae68c9dca7939bac4725eb","cid":"0x0f01551220330272c2fe78f9cf812f3c027a5ff18a9853c5a307706b2dc23f690307c57ac2","timestamp":1708516896,"dpid":"171"},{"from":"0xbc4f75a4579c55b3b347c316159e03ad9a233346","uuid":"0xddec1f7ee5586bf3bea2196614fdd72352aa0a9895e20a6723e2bf9c583d3ca5","cid":"0x0f01551220446912bce35832bd52addcb9e3f3a604d69b9e977de00ae775e2f747e8174e4c","timestamp":1708523184,"dpid":"172"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708532064,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531992,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531620,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531344,"dpid":"173"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xf5cdc6c43ec7085f5bb174d1588c5e2682e4654a7e507a1548ac9d6d00aa6116","cid":"0x0f015512206e0cec38abe3a2f02f0cc72c7d9c2c25449360cbcbf00e3f40aa28c1597fc378","timestamp":1708602732,"dpid":"174"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f015512206f752aa76cf3f0d477ae37e723c10702bf111adbcc6d1b523777d316bea8c041","timestamp":1708890600,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220e3305fb8c50c76e45061d4005e5c741693e3e5d092ec53d7a563d3056474b393","timestamp":1708729500,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f0155122049cc7e3e386bf0f35bec026b4db15a1d93e624b7b60c0847f134c300371c062a","timestamp":1708674912,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220ecfa2880c4795c7b4c44e7561090bb072128924e6241c46610d16839b632b2f0","timestamp":1708672332,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f0155122004f75f6ef073ed6ffeb88d21c06a48ef46a47e685bcc163f8c91da2226171003","timestamp":1708653516,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220cd73c6c245692bbcdcbe1a3a7b98f4df3eec04a6f33be8855d2f90c2277260ab","timestamp":1708619376,"dpid":"175"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xec97340e37b5aeed1ce82cfee79fd04cf4774444efdfede1662ec5abe60c2c59","cid":"0x0f01551220291475a25f74405eeb97657e62801642605154672a84537fa207ec02a371c8cc","timestamp":1708695612,"dpid":"176"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xec97340e37b5aeed1ce82cfee79fd04cf4774444efdfede1662ec5abe60c2c59","cid":"0x0f0155122076bfab5e6dbcae07a355a2f83e770166db53e68a979e49327c20c796650d314a","timestamp":1708695348,"dpid":"176"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xf349746f7a64efce843b8195c734585c060586d9a2123af35559baae249d2fe9","cid":"0x0f01551220eda2fa10397e39bb5943d272a160b3b3be03d3b9ab79e5b8bd2a58b83fbd3c82","timestamp":1708882260,"dpid":"177"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f01551220081201d4fee37bba68edb453986fab0bbbdb82a0d42ae3f297b9f579d884db73","timestamp":1708909188,"dpid":"178"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f0155122020be9b62d44c25b28e32970cf16a2da8f66b541da87b83b3d6c471e94dad80b5","timestamp":1708900680,"dpid":"178"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f015512202dad34a6366ce3f539902585140974e3ce667c00ea51ae8ca0e1e1765b565976","timestamp":1708900272,"dpid":"178"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x60d6758f5d408af09e9314bf29c01c24a73cc48ec6a2af832087c8c506ababf4","cid":"0x0f015512208a651930c7c53795244ed7dff9c534289d0f33a512db1a3e940218602f775e2e","timestamp":1708930572,"dpid":"179"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220a7cc3fec41def1c5512744ff7bc70c227bc2b054b170598a5f0d02756aeb035b","timestamp":1708974048,"dpid":"180"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220ca95456e97df3e9590ddad1d8bcf88ffe343ca85a823c024cfd8eb59fe3a64e3","timestamp":1708966848,"dpid":"180"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220f86e9ecfb21912401c4d4e964449c294e43d9752c0240eff0415aad884c2a9d3","timestamp":1708965960,"dpid":"180"},{"from":"0x178b9faaef2dc2c180bb95d549fbb9dec06cb86d","uuid":"0x9d7c810dff316fbb2d2da5bb5a9139fef91d70e43a5056c5e154bbd71c0738e7","cid":"0x0f0155122090cadc5850bbc014a28a16ce4dff901e8451168568f2083791ddcab4754c8329","timestamp":1709032560,"dpid":"181"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x0ae504d6724d75d7032135addb47ae1220eecc9eca1c181e11628bb4f901f7a8","cid":"0x0f015512206903ac869dfd26d9e42a1bd30a681bac85bd39e4426997d00348662389088d4c","timestamp":1709070600,"dpid":"182"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x0ae504d6724d75d7032135addb47ae1220eecc9eca1c181e11628bb4f901f7a8","cid":"0x0f015512206903ac869dfd26d9e42a1bd30a681bac85bd39e4426997d00348662389088d4c","timestamp":1709070444,"dpid":"182"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x24320c21bc0ac47c01d3f3e97a113f6dd6d931f0699b0f90970be593399bc5df","cid":"0x0f01551220e5c7101a8a23bae1b6fb1e01e4ab9975c1e4ab50d8fdec8e018ae0c4457cf5aa","timestamp":1709074644,"dpid":"183"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x9ee6dd57f08df2190634780e4d856efe5dca0c01b21057b74cea299a24c78bfd","cid":"0x0f01551220bc79bef3ee17a2798701f6e4c99da6f3ee99d29dff6a87b86808e5e36a839e74","timestamp":1709709132,"dpid":"184"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0xbb08bbfa1b4edaacbf70d6ff44de20ac20eeb7452091587895536110ec2aef2b","cid":"0x0f01551220219eb8317b86b66c712678383b090eac4f3335a82737dff97f874bc6b8d48ee8","timestamp":1709710296,"dpid":"185"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x52250f68236c976383be3f0259cbcdc6c7d4202574c1d1dfe592307b811c398d","cid":"0x0f01551220996605014b7cd7a875bc0cb1503bae7fd352c16b42a301cf96f7e936e47f317c","timestamp":1709713596,"dpid":"186"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x208fb27adb4d96ad59815ffb7c1c37b58ef9631ca67fa84d25f3d30a2dc494bb","cid":"0x0f015512208c104b7ca3b5dc928ccedccc25f69821445811641a95c06e523c35f69177f625","timestamp":1709713968,"dpid":"187"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x2fc98ebef59059b3cbbbede1a1817549acad35e072c1e512d7bea8f98eae51d3","cid":"0x0f01551220a2f8576e48a38c218435cec2b59024dc555c1064afbb198b9d58f7ef88ccda0a","timestamp":1709717856,"dpid":"188"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x69a7caacdba86cccc26cce6f67b17645a73b27ef674fbe38deaee3bf0d9686d7","cid":"0x0f015512203db76d004da7a508ac8d9026f624712c166d315b5beb0743495e9052a258f814","timestamp":1709718156,"dpid":"189"},{"from":"0x639c426be8f852b1b62bfd7c3b5c2eb54e7893f5","uuid":"0xb1e3fad03d6e4f45349425a4a4e6bff4cd04c3a40e4d825b9e859e8c5e3f9cb0","cid":"0x0f015512206bb350df536b087ac27cd2039938e7772de349903b742ad36912a3fc386983d5","timestamp":1710044316,"dpid":"190"}] \ No newline at end of file diff --git a/desci-contracts/migration-data/migrationData_Wed Feb 14 2024.json b/desci-contracts/migration-data/migrationData_Wed Feb 14 2024.json deleted file mode 100644 index 9adbcc62f..000000000 --- a/desci-contracts/migration-data/migrationData_Wed Feb 14 2024.json +++ /dev/null @@ -1 +0,0 @@ -[{"from":"0x41a933bab03126d9c1ad5052267edadf265f58b4","uuid":"0x4d3f0ee8f61bc55037076ef55b7c8129b9cf86cf2e3c0146c1378e7356baa99a","cid":"0x0f015512209a40c7ac52c80bdf4480a69945e10b2e79e7c873f8efb70e3c0c5e984d0e47f6","timestamp":1675737468,"dpid":"0"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818608,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818404,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220c17fc203b637a2439ed29b4f8f96610c87ec84aa82b611c08bb30d540ededbb4","timestamp":1675781796,"dpid":"1"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220d502ebf0825885dbdf87a89ce524108290858fc0187b31e97c868e9dd98a0d18","timestamp":1676096820,"dpid":"2"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220eb95d36d9b314299a04e7e90f589e390beff9d94cccb951678a3db9cdc6a100e","timestamp":1676095440,"dpid":"2"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x14c6658aa83701bb18a8225e94ee008bec535c1cd430ffa3279a0df333fa452d","cid":"0x0f015512200d14a1bc62c9ca9d8256c76f0f7c64c228461fe932790ccb63d40087a1666f88","timestamp":1676725008,"dpid":"3"},{"from":"0xaf6d67eb6a07cd7f3d2d690499841042fecd137b","uuid":"0x2ce2eecf9cf99de291623a577afc6f453659a5eed14e0297fd3c4b0a7c88276e","cid":"0x0f015512204adeb2ae11ad4dad8fd61507ecf4bb56e8f85558e6f9d511a55edde1d8f8d47f","timestamp":1676988612,"dpid":"4"},{"from":"0x12ab259853038a8b542b77d4ebf3af671b7e8e73","uuid":"0xeb4670ff98c76bc9c87bbb0c9b48ac34b4416a60f419ed1e12927c7270f231bc","cid":"0x0f01551220f10709a2264cfe211072cc76ad6e6d3c68eb859651af5c17054bd2bdef041103","timestamp":1676996292,"dpid":"5"},{"from":"0x6f5e440d9fad549913512104a8956098c7c7272a","uuid":"0xf90b7a0acdd1e4f958f0955ba9b6de5f1822d34bfce88748db767957c3e1c4af","cid":"0x0f0155122084f827480eb0f8e772e99292c8bcea8194f46f71c831277a35bbeea388568e9a","timestamp":1677066240,"dpid":"6"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122058ae4caf6f4bd65bde8d4190931b4571bac4a8dd277ddbe522bc8b886b65f17a","timestamp":1677081012,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122068d207508426ee3c8a17616846ef9958c99d9d9d0ad1cc78ee2bd987f6bd6db1","timestamp":1677080820,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x38009c640482b5a7880f78014f467be987151e5abaf8cf698601d7e8f2dee8df","cid":"0x0f015512202d3d21c9ad0494f149c2f1289dcb5a3b35f117fc6bc0ef5328637789424fb8c5","timestamp":1677144720,"dpid":"8"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x71b1b81b823d60c7ccd855e030188c91941e0b2120391166228daa8fa0b105ee","cid":"0x0f01551220c94af041db6bfe0b46a4e07389ad78e462219fbd448076089596ad12a6801f79","timestamp":1677230328,"dpid":"9"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220be730fe1e9ae927e4bc786c068fced1e7583f41bec29c1ad8481c843934d3b9e","timestamp":1677511224,"dpid":"10"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220e110cc29d132026ab3842231caa37fde7be2b30275a272ab7a93992386ff7fb2","timestamp":1677510672,"dpid":"10"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x447fbec7a42e617052e792b1edfda430aa0faffec7f105dd7a54ff95bd5ea985","cid":"0x0f01551220dfe8aef953593b5444fdb684b23a5bcbde97476dcf42b32803b6794476aff2a0","timestamp":1678309056,"dpid":"11"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x5f6d2d91fa15a5004d4b7af407ffd8ce768694f5cab631f36c0984894f6f8c6c","cid":"0x0f01551220d520bc99de67d90929118eafefed5927995e541c6b201a455afd5f3f155c4b15","timestamp":1678771692,"dpid":"12"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512207cc5fff1a8eb0b2fa342d6523d8d452ca602d82af065daec2677fd0e61a864a7","timestamp":1680117252,"dpid":"13"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512208dccc1916b787f489adb0c311502e94cbf8ae04af45ff199fadd145361121220","timestamp":1678814328,"dpid":"13"},{"from":"0x60b059dd7799d156f035e6d3ea51262862bc9d4e","uuid":"0x642e30a12bfdce5c5d300578ac7242742a5f359b5561fdb86aba885349118468","cid":"0x0f0155122012bfe6212a9372be0fe15f2274faf82e5bbad020eb568cdc7a6fc2845ae6f067","timestamp":1679014104,"dpid":"14"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219484,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219328,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f01551220a9a416c935b1d5567b5e2991a9dc8b36338704d32c7715933f39a772de69150e","timestamp":1679219244,"dpid":"15"},{"from":"0x32b1f642d5ce695be9ca853aff84d59af5e02116","uuid":"0x21be1e83d8b580427585617ab76531420dea3ca384d3eb5328610c081b2c5756","cid":"0x0f01551220dafc5b29ff71836069925876f573c4e084c770d66371ecd48f3407c5803cc70d","timestamp":1679343324,"dpid":"16"},{"from":"0xa5c21ba7e36cae9af5a5894a9a8a65bac3f752ad","uuid":"0xbf4e8ccc9e5b411edfd246c92b3ec1d829ca4b1eb41701366ec0ff21d9017920","cid":"0x0f01551220c632038257b7e5b73160725957b4f4da2af52004a2bd47981009c94db9c1066c","timestamp":1679409324,"dpid":"17"},{"from":"0x71ad8aee76d7792ec41f3cae707b65594c67373f","uuid":"0x0dc8d351f011ac36a92a714073c6b2ad6e4d5107eb81ff70670c6737a4b6a94e","cid":"0x0f01551220c63b85344cc17c92bf11664a86b7d35e9fb2e6fcd02dfe2a1df19630a124d521","timestamp":1679409744,"dpid":"18"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x1737974bc778096d399921cffb55fa2a0a58b7413eee9a5d9772ea544a56d3ce","cid":"0x0f01551220551b199b7e78003e35010a0fc62759290d362affd13d6f01872cf9846e21b12c","timestamp":1679539764,"dpid":"19"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512202dbe5b2beaf6182583a63a23d587a5c7a573d8637d453445e1d8325a50abe867","timestamp":1680554796,"dpid":"20"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512209e0dcbfa6f3cec9ba0315f70a4941d6e410456899691ab0701904b4592d9a4be","timestamp":1679540424,"dpid":"20"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637288,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637252,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220823b961f7d6323255c47e996afe192c96cb0babd5cf91383c5ca505b00af88e6","timestamp":1679637204,"dpid":"21"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x7a041ca4f95c29e37f84e084752aba25cdc5e4a57e2eef8e6ba02622e97cad63","cid":"0x0f015512207c1f3bcd940e08a792dcfddcca0fd350fa6d05afe6dbbba0f94ed56e1878d807","timestamp":1679658768,"dpid":"22"},{"from":"0xaa572e27403dcabd42f0afe938bdd18c3b52523f","uuid":"0xaeb5c1f0576f6c24fd087c9ca9837452c0ac5f8d41104becb848b057d4cbcf76","cid":"0x0f01551220b97f2b4a0ed522b7b888b3d447a9653143098fe0991482cd02cabea69951b6b2","timestamp":1680567024,"dpid":"23"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0xece33e446b40791e7d5079daf61fc5d7a5ef41c0029297b8fa4aef09ec9c1825","cid":"0x0f0155122050118b2b1175fa6b3dbbac44651b048694f7de272bee5a53cb122a3aab03ae23","timestamp":1681191960,"dpid":"24"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xba82c370711c6a35946fa10ac32d27019ec1d0981057fed3d1aa9025297c44b8","cid":"0x0f0155122008f915011dc3f8bed078321740440a869c23a0238938f0902f94567291bae372","timestamp":1681495752,"dpid":"25"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f01551220413f7132abee3941f9db9c875ac4ab2c84888249d2558496cec2f01f7fa0b8c2","timestamp":1681497900,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f015512201237f9c3c73a3fa6a55b80d67bd744fbdd7b19693ed32fb0465485c1d1bdf8cc","timestamp":1681497684,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa94370567701bbaaca632e502b4a84c07441daf07bf1a23ca2a46004a35fede0","cid":"0x0f01551220874f2f08bd5d67a432327d6d7ca987b4bbfc83b0db03c76453d73a9395899450","timestamp":1681505184,"dpid":"27"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x7664a535b66afbf011d6884a50a280ae9a503ce94acc9497728d459a153d827d","cid":"0x0f01551220eca5152df9f89f614a5521ba8f8a796719772286152a11e4e8c4659f4d505efc","timestamp":1681506588,"dpid":"28"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220574146a7501807df98a7547c0b3d0bdbfcfc0b29704c823ff86571b9a3deab85","timestamp":1681736628,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220c82d987df438ab758c9b557259e8fa0f4e1c2278651c802608fbdf8033419821","timestamp":1681736556,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220be43004fa14f3ca7e2e9cf01f1a0b7906b3728e53c8b1af19e309e1568f85cc5","timestamp":1681762272,"dpid":"30"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220734c2b0c3a1f21c05663f5a9d2b258d3baae0847e06da7699959aadc6616c026","timestamp":1681761420,"dpid":"30"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x57e2c2007b7af4859a04a5a1ed555f17f4d54a969158bc73f079b7f85a133ad5","cid":"0x0f0155122007140ffce5d9d7cd93e847b4ddaa75400b0baab040ddc2ccc56c33a141458556","timestamp":1681805808,"dpid":"31"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x5207335dee8c3818e7cf16b4a11ade55ab52d3957b8bd179cf351b8578746c03","cid":"0x0f015512200053d8f17531e05fb7d33978d35eb4fb6028dc8414369fbdf5a660cb22914ab9","timestamp":1681830960,"dpid":"32"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x8e794cafc680e76baeeb09e74ea413c816fedf6b716337d07abdd5657f69f822","cid":"0x0f015512205aca92353605ea8a45e732995d51da82d0dcb08089f907420dbe60ff1795dafe","timestamp":1682014560,"dpid":"33"},{"from":"0x134e95ce73fbb2a223e52351f8492088a86991ec","uuid":"0xf1a54e169d7c721a532b63fe25a070c673dee267f9688537ea9005f9fce8f118","cid":"0x0f015512202a09ce4187780645e8e49efff4ea3b0caef18ed60c42d9647890fe296db7d3a1","timestamp":1682144088,"dpid":"34"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f015512208076546c5b3eab9a046d4c3c7c214fa94bc80a6d67c6b310e8b3d8e4da0c17c3","timestamp":1682813004,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f0155122060953bffcc76ff9af880b9c7dc0e69ab8f8c2c2b9d01afb982d1b6f38bd3eca8","timestamp":1682746284,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f01551220fc56171ee7ae7bd3eb3e36d2e88c34d26eef0deb8a2850aa70874734324a5c72","timestamp":1682534976,"dpid":"35"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x66ec71949b03ac1cda5600f93a042cf0ef4a5fbc114abb5ab00f879320e67429","cid":"0x0f01551220a2e49ddbb71fabd49f69c44aeeb69f597fadff2061adf6c46a7d6a8f77848d09","timestamp":1682670864,"dpid":"36"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f0155122003fd6d8a9eef363a8f0331c364da74dabf485fa2c90142d6d68a5045f1d7068d","timestamp":1682793408,"dpid":"37"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f015512200370361d9eabcbcab401ef4d4f97005094f536d3b7f89353d84349deb8014c66","timestamp":1682793228,"dpid":"37"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682822136,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682814000,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f0155122006c38ee5c3d87df8f1871df54b987c1ce43726f892a9ddfb08be670863bc4970","timestamp":1682813880,"dpid":"38"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122091768c624c35d1bb57139837d71eec4bf81c2888616f5a3cffbc0351a172f6c1","timestamp":1682849124,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682821080,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682820648,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122033259ecc232dd46a608ff88651128a8da6bdccc2c917a0c2ef56b4dc27f7e498","timestamp":1682820372,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821884,"dpid":"40"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821224,"dpid":"40"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220ac1f68266f0f2a9e7fa96731e46c54a86aa36bdbd4a22cf1a5c08b2ee9957600","timestamp":1682854344,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220e49575cb06ca399247ae08fae9a8b3a3ff5de24b6a8dc29e44ac3ab6115c1539","timestamp":1682854224,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0xc73b88a9747fb3eb3fb051bbb3971faaf4819d1b8cd041028cc5531e3f9c6e94","cid":"0x0f015512209cf107adddf229ae090c27cc3998b51daf075dac2e3824d828cc71e1c3782903","timestamp":1682856480,"dpid":"42"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x13ce389478fadc96534f666ea8a035dc54c4d08f12ec16bbbbbb0dded66e93fb","cid":"0x0f01551220d46086ee0c05a4f167ae2637ee677a562ea1832d38cd953900b43d4836d5ec3e","timestamp":1682951112,"dpid":"43"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0xfba4b603620f33f51b5afbdf87de9ae79796d5ac1d4ac6f19329460615a8eae5","cid":"0x0f01551220f078470899aff3081b145084f68c9a2445b99322dcd658a2650f62a75fffe89d","timestamp":1682962248,"dpid":"44"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5e53b3b10212b4ce9cdec84c8fafbd305d80df6c778375e2977620d1b3f366c2","cid":"0x0f01551220e5895006b048366ad69277566cb11b20ff47201fe00f40dbf36f3d36c5137456","timestamp":1682993892,"dpid":"45"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220e627616fc85b6405cb28bc119f5f5073ac4c8796f6c3cff19d78a782a54ff32c","timestamp":1705420740,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512208f74fda7bac4317f39ff66c233ae140290d6ec58c604e73d0259ee384040eac2","timestamp":1683299940,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512202dda4e35c872736baecfe8d06d38854bda736485adb616f220fb4b19919e4562","timestamp":1683298680,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220bb1fb9ca4d11adaaa6514289cdee3c0b7ee3cbb848b49be0f9da3dd8a1dc0b0e","timestamp":1683227616,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220fd53a16eb6b7a09035a0f62c96a6a7dfe38948b84b44ffc8a8107938c87af450","timestamp":1683222132,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512201a6d456535ce453d3f62ce0f0671f8970ec00638d2271bf52b03c0520a1871f5","timestamp":1683053508,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x90ba1ee3a35ac4377b45b8576d2bad8dd590b8d97fc907966b08eb15061b874e","cid":"0x0f015512201f746518f1f6b93acd19aa5a9af16baa4cbe66e48c71548d8087f6067e1d454d","timestamp":1683222948,"dpid":"47"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x3afb6232b1af22d2d2b32c8b8f93f51cd826fde329b43c1ad296b090810ea96c","cid":"0x0f01551220803851d9e43a70fed0e93da3f8e720cba9f4b9e34130a3648b6a67cad93d60bd","timestamp":1683232692,"dpid":"48"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220a4e515a62882a47bc943ffe60338a81d5f0c3effff4f4494c84565f95141a50b","timestamp":1683237288,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220d866d792ea34c8f71d6d855dd3901605bb91d0b451a6e7c5637da941408544df","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f015512202fd9deb76c3a394930c41135746ae86abed45816500dceaa5483d2b4d206e278","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f0155122093f39a0766cc860ab7853207cbe2f52a3ba9d6eeb7baaec5180b3b63de07259d","timestamp":1683236460,"dpid":"49"},{"from":"0xe861856c961f853dc47e5f2ad1fa2b9ea20e4e88","uuid":"0x29d466756bc5ad7e00d1197785c6e18c9adbf139ed8cd9669a381d4d3ab5185e","cid":"0x0f0155122031700de6766f972518cc770961fe4a4aabcb4e482700cea3eea5735315b25518","timestamp":1683886968,"dpid":"50"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220124bbb6ca94ad4bbe9d46a6049df553c4fcd886f9dab60fb55b5b3b393cd572c","timestamp":1683931428,"dpid":"51"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220e4266d1c3697778cd48f4f600ea15b7694dcebcbc5a80ab7a5d425987e411b00","timestamp":1683930000,"dpid":"51"},{"from":"0x9fcc55e782c2e43dfadcc428c4f2f8f32e095782","uuid":"0x136d9f9e3810666980107d2d4cbdb0032ed4f67f591ad82ade1658a29702fff8","cid":"0x0f0155122057b7679b0135b03fdfa0f49ecf5599a50be9f2838eb96b55ca54e450a2c66caf","timestamp":1684412244,"dpid":"52"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f01551220b49ba9590a9b78640004d71de051fb2079d42a111e46ca808c842b227e3a890e","timestamp":1686612108,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f015512201fc246787a63ba676c4780494f7c3e1b4dc2ee82868e33923a5f14221c63c962","timestamp":1684862784,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220ee15b4b25f3f6e7922d998effc6a1c2415db9872c55cdb7eced06e84b69b64b5","timestamp":1685098776,"dpid":"54"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220d32c64e3089d45cc9e0ea93553a81932a265d37240f7255ca118cf93a0812891","timestamp":1685098464,"dpid":"54"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x814875f70b49d8855ca70a4b842ec18e0cbfed86f7dacc406451b6c74946b061","cid":"0x0f01551220547ea04b46ceaa946574346f2afb4be20c3706d7510cff38d316ef1d6aceceab","timestamp":1685442360,"dpid":"55"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512207e406a140574f56a8a0b6bf22ac7b1e30a751ccfdae880f623883365a8fd5ca1","timestamp":1685448060,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512208897402d12a4ca848c6bc5acad80b318044ad8aeb83fdfd00aa138a422030e8c","timestamp":1685444172,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5a82718776361e7b3218a895525f3bf16954747a919ad4279cd9a51f8153613a","cid":"0x0f01551220145c239a14db836ddec6d984dbd3e855902c3a3625b4f89deb169f9d2b23a12b","timestamp":1685525952,"dpid":"57"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512203a32dbfccc4f9fb3f87f0ef22596afcb03399aff87b49763bd67f1bbd8935e5b","timestamp":1685536224,"dpid":"58"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512206bbc0246759b51a6d9c3dae6eb449e98acf52fea38d2bb4c70be3b1360932349","timestamp":1685526132,"dpid":"58"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220d5a01de71ad36c74e536b75ec1d64e8b38272f8e1245274886ed6802b255d102","timestamp":1685613240,"dpid":"59"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220c9d4ab3fb535d36f96e59cd3d120a4cf2a72773a2b14a384aefd1381a52e5255","timestamp":1685613060,"dpid":"59"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f01551220ac71c7dfb47eb844988b61f0ee67e0464256473d52f9e2cc8393d6c7585c7a05","timestamp":1685613708,"dpid":"60"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f0155122085924ebb47c11438d9086ecea1a9a840ea3ee15cd36f5b731945d2e3d06b3a5c","timestamp":1685613216,"dpid":"60"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x23d7465583afc75276d7ec121fd82d34d4d38b6456be9990ab50fe6b2aec11b5","cid":"0x0f015512207dad824f451fe44d3192a14e5b1212ee20e4e11669819ee7df6141fddf26d96a","timestamp":1685614104,"dpid":"61"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x71e940680347c5c59fe91b01784ecc9c6ffcc4c65ebfab0d5b8ff9dc02166a99","cid":"0x0f015512200f484328bac037a779eed442d60d55fe19ce84ab0b52d951e45c24b700ebe1a4","timestamp":1685615388,"dpid":"62"},{"from":"0x008292e57a2d9b34525d82876068652e639e61d8","uuid":"0xc2ee84577e3896e376fb8ddb1f5b8c776b14a641e301db88e4995d2992946486","cid":"0x0f015512204961cc8ec829abb48db7362aac5600e643c38879009114809a0f5ffa21a20392","timestamp":1685615724,"dpid":"63"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xff282722074468174bbcca8902d81de7fb794a493c26edcca8ac007cf7638ebd","cid":"0x0f015512203a8aa5608277fc2026e1971013089a38b172b9211211e512bac708fb54964a2a","timestamp":1685719428,"dpid":"64"},{"from":"0x813eabba8e094bef89fe77b4f497810b9795ea66","uuid":"0x7c56741adb2e6f53a1bd354a7863b817a42d1e00d602450d351b5a3b57d96e59","cid":"0x0f01551220a3c2ca0411fc58b9de718eb7408872a6dfc3420518096fdb632d2a38f757d08a","timestamp":1686220584,"dpid":"65"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f0155122085acd5e30aabbc367b6d6ab8929c7410502f8a7256a0a5ab0f68624e8d60a37b","timestamp":1687805484,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f01551220245a17d29a145e9db11ef5f9bf760e0aae95182abe8f9830a2dfd54507f2d756","timestamp":1687805292,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220747a2fa16ca8ca254aeb3e9ae987d6522fa4e5be266b095f517eabfc37c6ce7f","timestamp":1687808232,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220195d0afb118d9073215302753e64759f9e9fcc5c37abb2aadc97e7e82cd1ca08","timestamp":1687807524,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x58703be0a37ec8b08984024a4659667901d03a7e1c66612766ca3a99ca369ac7","cid":"0x0f01551220e054f76eecf6ab486d3b64e5f12310d65753d8cbcca1bd8b2ec1d058f8b396ce","timestamp":1687812132,"dpid":"68"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5825084093f35bf3b98bb9ecd724400a0f01ed6c3a2ca27b16ea69b53306faa6","cid":"0x0f01551220c522c541b31394352d279616369fce5804ded295e299cbece7f0ed81c934051b","timestamp":1687812804,"dpid":"69"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xc335bda4b1f79e72ff0c5d061e6fdf7af21a86ebac698e90f0cca5ac69b3020e","cid":"0x0f015512204068d1d21f66b52f65c3caf15e4a522d0bc37dee1b425a337386769fd229a8de","timestamp":1687817568,"dpid":"70"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122063982338abc89465b4f573bf9aa1579bfa654f6aa2f12db15ab756d9220726e9","timestamp":1688024676,"dpid":"71"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122021e9bb44b2e4a93be54db472c3f8c5a2604c41ce29230923b7d1b86276f28479","timestamp":1688024628,"dpid":"71"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xfd54b8d85ecd02cac3e64144ab492cb75faf8167b75e73b7141a3404e639c1df","cid":"0x0f0155122049e0b9c318e2763599d6c4de8ac0d7e2a5678d1ebac71a38b47e31e2bd890020","timestamp":1688552688,"dpid":"72"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1689009768,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1688720808,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x04be83778e156d843a2551448780727a3c0bf21107d66d08e2f50f370be98712","cid":"0x0f01551220b0ba939c3c33cfe4d4bf663a635ef823ed188388efb15ef6bb3efcc4c3d21fb2","timestamp":1689041640,"dpid":"74"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x6047e10d820b878a9c553073a5c140bf1023fa3426bb25348037826399913556","cid":"0x0f015512203392d7b04341c36abbb607f36e02e46ce09e87563b089a20ab291637ab816ffa","timestamp":1689294216,"dpid":"75"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220735441775977d79d9e9bd0c1680b1efd6c5c85f01c63bd8b03ea6948bf967a1c","timestamp":1702045944,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f0155122051014af7073b576391b1065f67952d07b510ce2ac4fdd7da516c2c551e52acd5","timestamp":1702045680,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512205cb228099c1cb09650d8b3e5404241058843a2ee706708e025cc638d4186b2b5","timestamp":1702000140,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220a62e52b9c6a2cee08be12a4502664b51d950666fe4a5af90a3cfa913a613d349","timestamp":1701997248,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220513199f4bee602755360752169105632d04fc23173f1003bef320d0337d16c14","timestamp":1692330000,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220c6ddd5e72684c2dad436b6946ded360f9fdf84b73e99c08787030f57312c535e","timestamp":1692182952,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512201348deea506b711b91e43f1ec9d7b8d1a56c13d2226b346e9fdc4b14f56a8409","timestamp":1689518988,"dpid":"76"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f015512208e1e764e2b216acdc6a81d7da26016d4a1185a1137803a378c1059a7e0a65f2b","timestamp":1691496348,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f01551220e9765441e96679a63152b92240d3b59eec842b19660aee519b62b23faaae33ac","timestamp":1691493636,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f0155122010bc45102349d2dead31c0893a00c3959e0f75799d4dddd2860a8cb1ae286cfc","timestamp":1691492520,"dpid":"77"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x985b7ff62652f432b38e1b8aba5d3f4fedbc36345d2f818fdd0011c42fc1a43e","cid":"0x0f01551220a8bb15e9a0913fa0e63caea2bdb8f84b37521252b639231b8050e51c41ab8eec","timestamp":1691501736,"dpid":"78"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x10fd63608937c5589c65117fb50a3736196e854c2746e5afa18616352fc15da5","cid":"0x0f0155122033a510449f17a7331d387be0514110675b2036408cf5751a429e7574a348ad28","timestamp":1692472464,"dpid":"79"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f01551220475e5ebbbde7ce1cedb1a937a6cd13947adece0f50f7be0f0c39f5ce29d55302","timestamp":1693246872,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f0155122016b13ce97577c13677246cb18439f1b197ef62c31b7eeb4afeee59c2d169b004","timestamp":1693245804,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f015512204f1a4a775cdb3605abb7db7bc372fc1fb548752f87df0607c090228a49da8d61","timestamp":1700147784,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f01551220842e076e8c09994d9ede0411b1885e7f5673840507c70756c676028003a9bbe6","timestamp":1693246440,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2985ad1a8ec856aae4e741ec6442b1cb31df4e689741850cc7f401a2d23c74df","cid":"0x0f015512204cac6289a604e10132a917dabca35f3f75d77234d829cdf8aa81780ccbe18880","timestamp":1693247148,"dpid":"82"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f01551220710ec51c7187f14485779174c132b73a601e6db96295e0f70cc3090513f514ef","timestamp":1700147268,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f015512201e109b99ffc1d6eea87e4bae6e62057362d4ca88358ffedc970207ecf87a0a8d","timestamp":1693247616,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f015512206554b159bfb54e5c2ca68f6f8fe3ff431474fd459edafebec2cdf4a1e1e9b84e","timestamp":1700146980,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f01551220262bd98464a8a798f60c4df021584568feb20fe8428de4866b8d3ccb5d8a01fb","timestamp":1693248192,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f0155122089b4726dd6758d6ecff4793315bfefd5e5a275fa886fb87cc3fe711415411a12","timestamp":1700146392,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f015512204730b046919be6e2dd88cfc619840866713f532895fe7e110a4a68814bfe379f","timestamp":1693248672,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f015512206b80bc92b65b2cdf7739f7f926c2c1ffedece7cc7e24b7eba23a2af8d55597f2","timestamp":1700145552,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f01551220f784661a9ee6ddb4da6c0778a9a44fd0ab582072e1feab0e5b5f24775e464932","timestamp":1693249560,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f01551220204550a97883e629602079e67248acec5a82315e82563fc01f8da6fe26739b5b","timestamp":1700146176,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f015512206b0eb5f87cd5afb5a44d84b56435a3faf324149a72750a023e4002622f787afd","timestamp":1693249908,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220bf26daa8622f079ea3adb5fc871b28d814fe539b3094c8ee77ea7839eb50ab39","timestamp":1700146776,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220237e23eaae482991b11035fa1faf61af5ad65cbc8abe7992a7f7683f472de936","timestamp":1693250244,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x87cfcaf39a1c482f5866bfbe48d4f63d65d7db9fb992b6837c688d2013940c87","cid":"0x0f015512206fd907cd2fc2464c48bba2fe4acbbd967f4ea17277f533f6190ebc88fe583e8b","timestamp":1693251900,"dpid":"89"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512205e6eafe4aeb2971047b54a0f1dcb449c69321094bf55b9e6674434f3704a7db9","timestamp":1695653376,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512206afa0e08ee564a4bcf5a739a57dd19d5b835df7f5da459da3c442d3962d5b77b","timestamp":1694187648,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f0155122016df22da6fcfd0840b276673f1732fdc8276316d0fdbf3529fa06e63565399ed","timestamp":1694114940,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f0155122073452cfb6096325fb8f41f91eb93223f7d424352ebafb240bc61bc62040167bd","timestamp":1695653220,"dpid":"91"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f01551220cf13504896eb49ca532783f3b14b105c7882a0a712f19c031adfec44e08fd56d","timestamp":1694197140,"dpid":"91"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x43c4629df6245fc911ed28bd3e4fd92899dbed0e70d6086467ddf89407c41fe1","cid":"0x0f0155122050265ea5c933a4b296c88a16862c006698445750eb177f512e3613b9d364345f","timestamp":1695218412,"dpid":"92"},{"from":"0x262b4f07e42bbc33f597fcf0d854e9dafaf3d469","uuid":"0x9db9db43f2e485f733b91814cbeb189c03f6a4ca18c4f07729cdb9bc9d88f852","cid":"0x0f015512209a7f7d3d0f68ffb55d85d6da6c442c9e2b2389ea0b1261b13159fa9f098102d0","timestamp":1695246144,"dpid":"93"},{"from":"0x9452d0680a39195f59cc8a8b794aec0a81d51cc9","uuid":"0x6d7d697d017315f644992600e7c28f2914a3908ed134aa6b1e49ebe708c16dfe","cid":"0x0f01551220106cfb1003c1e512f5187ca90dfdc66fe8a4df16d7889413c38c5457fb4bdb1e","timestamp":1695246324,"dpid":"94"},{"from":"0x64b3f6f1eace5ba2d49c430ffbf085f4847bdec7","uuid":"0xba7fc52a499293973b4b35f8bbcfda823a2059c9a8a175b13cf35d24707b50b9","cid":"0x0f0155122083f5c28f77367e6084020d3c3621c39a17f108dfd21ef4d157c0aa9d5107c5f6","timestamp":1695324696,"dpid":"95"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x26a149a3b1efaa583e80571482cec997f375990f70bee46e3230bed5ba78fc55","cid":"0x0f01551220d48c3bca9221e49074d1cd6df4f0bbff5852baa1cbd24a9bdcd8ce54efbb9a50","timestamp":1695816576,"dpid":"96"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f015512204818e564ec9e3bbae2feff07d68040876da0436fb6d89fb5f54daf95a98d72b0","timestamp":1696594740,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696481172,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480884,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480764,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480608,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696479552,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696468416,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466964,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466820,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466724,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459584,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459560,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440036,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299912,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299876,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299600,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299000,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696296012,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696295376,"dpid":"97"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303944,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303560,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536972,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536936,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536912,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536888,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536828,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536804,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536756,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696469268,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696336296,"dpid":"99"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512207d74909d018b17bf267e9983f5a4ff1b1b7cb91314c7f4e3fb99ec60e3f6089e","timestamp":1696840824,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f01551220e88a7c59024cac199699b88226bf15f3dad2079ad7f8de522cd58d212a7e4cb7","timestamp":1696507296,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512203a2cbe6fe0167c0984e4139576143faff5e3afbda15e52091379c4788bcc34f0","timestamp":1696506528,"dpid":"100"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe3bcfed1e03918f9d7a48903f9a96e2589f8823d1c47b6293cd744b7d7d57161","cid":"0x0f015512200e0e343667925a707bc9194a7581e9350e73aacb16423757faf047229216ebe4","timestamp":1696589760,"dpid":"101"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x9e102f9a7ce12cd3dd4944b13d51493e7079ab344acc5d84e6f5ea05a12353fd","cid":"0x0f0155122044410acab6cec9a6fad6d5e92f690eecdfb0bebab46b04d4dfaa4cc50ab3cbb1","timestamp":1696605300,"dpid":"102"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x69114e8fa768f26d452f12090831b9c6e8d58ae100ac16ec68cbd661ee8b3997","cid":"0x0f01551220be7eb409dbc450417545a5612651c26d3ac6085bd09c11017d700d25e02331a7","timestamp":1696841976,"dpid":"103"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f0155122081133e104e9fce1fc05bcfca24152c735c24639fa938b2751fdb5dcc9bbfb699","timestamp":1698779592,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f015512209bfe5c87d9e68468f132e569e0583f33a30e2a4721d7e250481d43c0edeadb40","timestamp":1697792352,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f01551220149da347cc8d88f970c3a014de162231bbe2c6b6f8b977f45c2b60b0d2052084","timestamp":1696842144,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1698911760,"dpid":"105"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1696842444,"dpid":"105"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512204a990fa9cf6ec736ee690ab111e9bde63b2615384a56b40db50eaa3bfa19d1fc","timestamp":1696961232,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512205c33c5b575919cd5dfdbcae96b335681a9fd72d8cca0482bf761ef6f2bb815b9","timestamp":1696944228,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220e46482f58f98a662de09515c518875d19ad5815effe0305a19ae113ee24e4c03","timestamp":1696942104,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220210b3fed6c321b8b3258241c07b791b8f64f07cfd349afefba85f1cf50d7481a","timestamp":1696941732,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x8f79e11baf8d51b43253181d18c55f177041ded43dc9c9672995a777468b3640","cid":"0x0f015512204694fa680941e0723a66f03b755e81baba5ac3d7d0b48569b76649e8f5bebb4b","timestamp":1697040396,"dpid":"107"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x65be6859a644c7bc213656bc2ffbb228819097e5a830a0d84f681597d30df140","cid":"0x0f01551220b93efc4a93e3930240b6b73bc0bb8cc248a91f81b75af382d9ac24d72ac345ef","timestamp":1697792640,"dpid":"108"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xb8ebf456801e699d1ac6aa26330c041d6c28ceedb7062de145d478a69b7e5820","cid":"0x0f0155122028ca283b93da193e6e73785f3bb9bdaac6bb44c4433d0141ced0f9ef18c7d0db","timestamp":1698054684,"dpid":"109"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698323460,"dpid":"110"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698079308,"dpid":"110"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512200b0096b5867205f23384349f18aefee7e47e1927be1079c2b84a1ddca165a157","timestamp":1698178344,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512208992878828526d44bf352a455357ce72f77d7dc2b1f71b248db7f3c4df04679f","timestamp":1698177444,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f01551220af0bc91008bdfcf0f05188052122ed4262d2667c87a6aa962cabb11e31bc933f","timestamp":1698747864,"dpid":"112"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f0155122053cb052093615303fae1741d71f86fe18d656f43f70602bc379d8eb6dfc69ad7","timestamp":1698747720,"dpid":"112"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xaa6e41ba11eae99e35c56cab24c16a6e5473e49d9be3f59901f15bc3ac5449d4","cid":"0x0f01551220da6ad5231abc31c3ae5edf69b5b52e339df6a453731adb2068c26eb2013d9707","timestamp":1698782484,"dpid":"113"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x4c693ef748d114e76316c3407a0d442f9d9d64f1a7ab9a9c318a2bd4a5b14a77","cid":"0x0f015512203203a4104a1e2478ed314ea918b7fa667bf04a0e84f2e57f0c396841df3983f1","timestamp":1698782652,"dpid":"114"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f015512204765f0ba19163ce27730a917da91b1fe448a8ab0722aceca648dcddb85ffccea","timestamp":1699355784,"dpid":"115"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f01551220109f00c84c67068052e782043d08af74cab99a4ec56e442f041dca2de44c5a9e","timestamp":1699355412,"dpid":"115"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512202411f0188e2db2e46dd1a7d3cd736926228deeecfbf9397c8b76067191272434","timestamp":1699954776,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f0155122089afb0c6def46745efc1eaabf44254d8fc4ca943f53e4d82dcdd8a2cbded7981","timestamp":1699887960,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512207c93e0ec1b4c56a3f08934f555791a62be8abd7e78456758d5b65c0cdd7a836f","timestamp":1699608000,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f0155122072f88be300d505c2c03197f114be1377b1c58b6f7554198eb17a6708fabd36a0","timestamp":1700053860,"dpid":"117"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f015512208f0866a3d06693c7e1c7916894085864690643caaf7ab0055264f677e0bd667e","timestamp":1699954800,"dpid":"117"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220b66a4185023ca8ce27e10c8ff6752e78fb60d67ff4dfe3960f0758e6b593022e","timestamp":1702053972,"dpid":"118"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220f5fd32994c198aa5588ed19f93b74116fedd046951ad9797242eee0f12c5e2a7","timestamp":1699979532,"dpid":"118"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220e73795df1898e6aab1dc02dfa9ba1164871b98b359b74b72886cb08712e12f12","timestamp":1699984152,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220a895d90ce662de4cb21c88029bcbb7b6fe49e03fa8c35cce7869bd09de36aaea","timestamp":1699983900,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0xc3fb14242b8038ff617d4e31b26ad0d2594e59c7e010b5b25bd1f5d1d1ab49de","cid":"0x0f01551220ae6d7d9e91b90af9c55aa7da36ceca6c0184a0ace57f24a6216c9ff452ec7339","timestamp":1699984440,"dpid":"120"},{"from":"0xec29aca1a8740b8c5e2e06ebb52290700b9a2c40","uuid":"0x0ae8abde65748fe1ced55a91190483d29ac72384593e0dee1eb4a36ebf9c31a0","cid":"0x0f01551220df36b21446f6dc9e3ba055f20d5a727a2c7230a1f93f21a5bfe0fd7326aa63c3","timestamp":1699984896,"dpid":"121"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x6221f9c34c95bdbaf8b3bd7685c13bf50ace7a160bf28d98aff645ec3fb8e6a0","cid":"0x0f0155122067995ecfc055df88a582b9a1e1f1dc2587c1a76dd5afa1dec281c47f76d5ed67","timestamp":1700005716,"dpid":"122"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x2859eed83647d87114be9fb521ed5a51e7cdb924cf493d7e59e4b73d6bc8c346","cid":"0x0f01551220b4c0bcdb82ae88ecd2584487a63c8732e53b4f910e3cb4b2aec008d878c4579b","timestamp":1700006352,"dpid":"123"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f015512209993f6809c47dd8bc0443c4125ee92e525f4893acf2ca315c3cfc5413412f1ec","timestamp":1700046552,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f01551220e8df95ee93c95e2741fce2acef1a6ae153cf3b8474ddefa7a99ddc2c1eb13931","timestamp":1700046432,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f0155122042b4a34b09a4e8a6ce04608c7dffeae6bc062c6d26f7a333b07d4021a3b49732","timestamp":1700046408,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f0155122069111964df6b4928906d649e3ba2aa55569c9a2aeabd0616da9f51a44d673b9b","timestamp":1700058384,"dpid":"125"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f01551220721aff2f3e00530a72d440a38bf7570b21ae0eb6cfd0ef4b8fb10875fac95c1f","timestamp":1700057772,"dpid":"125"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0xa3e130367fbebd19013318124d7d089536db6d5688e75c80772875e65b050ecc","cid":"0x0f015512203ecfb122b716f2bcbc7c4f1bff0489210d52e295bc7bd008a18c56f720de8ec7","timestamp":1700059584,"dpid":"126"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220a60380f7f954d667b0583b954fb72ffd94c59ad3417377fd8513e58e06903a5b","timestamp":1700063832,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220306b0b6e24f14ab86367db5427347e39bc5d49ba718931a4efe0d807ab168e4b","timestamp":1700063400,"dpid":"127"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0x2cc8cd59679bd6e95683ed68b681add38c62e459406047f00a34e8ed0549d9bb","cid":"0x0f01551220e931c8247b57d7c261d00f509960dd637db0ae80bd542a17c34d615932dc6c63","timestamp":1700063832,"dpid":"128"},{"from":"0x13b71b614715db683d0985f15dfd9888c429317b","uuid":"0x782136c47d959413bd15ed0b9fd5fdecb7a06437751bd5dee317f87a09d019f1","cid":"0x0f01551220d36e5b943c41f27942bdac19364f79f95f76df926aba53cb01d150b552e4206f","timestamp":1700754096,"dpid":"129"},{"from":"0x73e4d86f1686671761c640556fe2e12a2a94c4ad","uuid":"0x0aba8b597b2877138a8785d7cb0a8ed230cb1a9b2f52517d6676cb832947d39a","cid":"0x0f0155122008b11e04f4fba10c61564ffc65ecca9d232a20dcdc001b38736c4c6aa0f3d3ea","timestamp":1701434724,"dpid":"130"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122000e10fa0b2965d2666d5a108fdc6bcb01af37c8bfd5a3afc9d6c1aa354f6098c","timestamp":1701703056,"dpid":"131"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122076eabcb47c97f19d71ab1bfcfce0987be7f5109b066569d8b4be421f38c14c46","timestamp":1701702708,"dpid":"131"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x1d8ff65463a48809e6c4a9da98d864dbb39a6e70f952a7850513d9f6343fd307","cid":"0x0f01551220b0be3482781d35a1648e29cbe848ec7d1d83c9028b4a7c27392dcbe2ba9492d1","timestamp":1701788316,"dpid":"132"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xeac3f6244306f4afa2e4d202e80909d4818a49dc0c6a14aec56d0a05b8195a64","cid":"0x0f01551220b8bd404569b21cd44f6ad5451edfc21336494145e4e8bde5c702acea494d4a05","timestamp":1701795900,"dpid":"133"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xbf07d6a25bf38eec9a87eee75afc5a9b287c6c8473a9d8cf367d6e796323623a","cid":"0x0f01551220d4e5ef8956132f8481027b41c94323c6e76b2335f30c4f3f3fce66e77aca73c1","timestamp":1701872976,"dpid":"134"},{"from":"0xf44fb21f73df7b54c3305f1326df86ab073731d4","uuid":"0x7292bd468b30e40b3c40a39b4dffee06500286bb1a44c59070291a5f1ef56ca9","cid":"0x0f01551220e5e75323762d53eba66756b3cbdb6e9e45e9ff741d3894066d3b2857d46a660c","timestamp":1701875664,"dpid":"135"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220b876e7933f617fc1fcdaf86797254fbefc4754b793def83164cb554c17996b07","timestamp":1702202688,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220089b9550d2cb5b107014545de8d459181cd7a152943c02c552af57b54a1d94e1","timestamp":1702145736,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220fd36de1434faf71b4b1ab2a12342504678055ee2685af920de7fcc897315b382","timestamp":1702142316,"dpid":"136"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220dd652b98741db1d28d7b990e5ea1f3ba54112b3b8e6ec3bb01018d853279ba4c","timestamp":1702439796,"dpid":"137"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220819b84a99e498da48505323e46852640da77d055cbc0036d657d6dc7c6bf5007","timestamp":1702430448,"dpid":"137"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220b7256ffc53ad70214a702e4b30bf3e8183a6a7f2d20a5e3f5439db49457dabbd","timestamp":1707153744,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220995897dfa81254a1f3d870bc8a57c16e22b890c7958d414904de766516d9aa2c","timestamp":1702512600,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x7e008f972f815b02881457ea07f03b9a4eaa1b4a45b61fc22c925b7f50015a6b","cid":"0x0f01551220535462ad82251639194ea94cdf68db782fec335c8f2f73a13134457483286b6b","timestamp":1702512876,"dpid":"139"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f0155122039e36aab0d90bb2772154b2063089c213a012d86b3fb1ca77526b78ee7a8f630","timestamp":1702513068,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f01551220aa4db6c4cf880f0674a5edd4835dba05e0bac117adfe566361b5ac1765487706","timestamp":1702513164,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f015512206b5f100c2ea07ae1083a6fd93e172efb81a0d4ab2b43d6138f3fafc6288dbeec","timestamp":1702513344,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220697369ba9d9da8fa571a5bcc53986e020252a7d6d64f3661c1ba9590e7cba65b","timestamp":1702513392,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512208e3570f0b0dfa9a93d17fe0ef6a82fc2b72b29e59c2fc12711a5c9f51a0de453","timestamp":1702513452,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f0155122021a6c2afd04b4770042982b0c74418082374380741cc3802fa85cc594f56569e","timestamp":1702513524,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xac8e69eeea26aae8b657e3466fbec53d2f5afe65fbbf0d6d1c6f656b3f390a74","cid":"0x0f0155122083dc3d796d1391aa931301a744d65283969f452d5289cb5c71c548c6edb55859","timestamp":1702513584,"dpid":"146"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f015512200f50a0f502a5b405c40fac0fc9cf3765eb63da20dc42be1b02eaf83b375f599c","timestamp":1702513620,"dpid":"147"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220904c16b294634d220959d0e3d9d1f443e929a53604f6104fc53e050b44cc53e1","timestamp":1702907160,"dpid":"148"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220267c4eb8eb592d8d167f1b55f89bc96f7660fe3d8e2ca29ecc307a817474cb79","timestamp":1702559448,"dpid":"148"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122046b8c587821d9b1918d41b9afead51bcfbcae59b6c75ffa4f55eee5139514542","timestamp":1707406116,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122048ddb39fb53041b0ef9039b376a406e6b263cda0eeb58815f0976171fecd4f4b","timestamp":1703072388,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220de5bfdaf769cd2d703f8eacdc5de1d982901f05fe6258df98f1599d0474d967e","timestamp":1703003868,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220c21697f0031be23b923a7db26af93c6fb3fc8797252cb626b5e17cfe2d1a14f2","timestamp":1703003448,"dpid":"149"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x85d5f216ff2be7742bc640646b4d9b9836a20a852ff25ce715e095b3e1f4255e","cid":"0x0f01551220bb03814b82b0fcae80ab12471446407608899e0933665cea73c14f391d445b90","timestamp":1703205816,"dpid":"150"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x2add80498110745a1115061b43c7067c92018c667f6e0da0bf0fee267241a3d2","cid":"0x0f01551220502682b3241166c26f25cdec935653ffd85b4024ad5316dabba71f689d623adf","timestamp":1703212224,"dpid":"151"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f015512208a7070a9a1120216956a40a42e4607388135ecfd1f65d4bf5d0339d61f6acdc2","timestamp":1706832732,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220f5a4e879a08793b02f7a9f07c2d136053b9d2c348901958528b607cca8ea3298","timestamp":1705091496,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220a8c690fbad722773e549f293cd3d73e400d157213fdf93bc10f627858ec5be6e","timestamp":1705091376,"dpid":"152"},{"from":"0xe493a10f41a846b67cb12a91cac4b2ae22440921","uuid":"0xfbae316e2b0148b3f13c11052503b00fe1cac5672875abdf09092a65aaee97fe","cid":"0x0f01551220d1ef0ec2445118d9a6b70ee7b056eedcf7b24702cf3fd5adcad98f6be5b8224b","timestamp":1705491780,"dpid":"153"},{"from":"0xe33c428cbd313983a5432a3d255025e456a4daf5","uuid":"0x276da67ec23c8727b5e9951e63a5e1cd507720d3b1194fb3e4147120767f3e06","cid":"0x0f015512207905922fd01255f1a077a628f6f4c2525f6be69609e18f9419611968ad82258a","timestamp":1705579488,"dpid":"154"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x3fcfba6cbd10882d546c675a77f2a2ecb3a618e6fa633358ff8377a28540a84f","cid":"0x0f01551220908567a0df7c37399730344ebbc1e60d3757c0a45bdd5b41d10052ca92fd31c8","timestamp":1706550924,"dpid":"155"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f015512204cc5d27a1115aae826e242ec8cc1b6e6931bdb470070d83b2ff73aa9d7707652","timestamp":1706737632,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f0155122027a51c66a2c693b30f6606794ded695306784e5e727d6f5f049fcb80a6adff72","timestamp":1706735148,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x47f74c470c50ae5ddfe11da2f3b585d05ffbdc4dfb0c01547274676c4ef60e2c","cid":"0x0f01551220a8161f63c033a70021c6e60e471786dd1b45788ad392a2409ebddce3256b68a9","timestamp":1706738172,"dpid":"157"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xb04be273bc7f354da4585104aae0fbf4c548fc681ab9d40cba3d5d404e11aa45","cid":"0x0f01551220cc325f22df3238eaecad77db3d2ed028a2c57fe28c393e08b0c06e468a734525","timestamp":1706834520,"dpid":"158"},{"from":"0x020e8c4ea0fc434257e86c51b69da2d62106879a","uuid":"0xf6666111a06e00eaa5a4912162684ae3b1852b3387d3bacc243284e79562e6a0","cid":"0x0f01551220abf9ce0479fd7b8603c452275c252cc5d4060c5b7b88080a195c124d4345d47c","timestamp":1707473772,"dpid":"159"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ee7c02a42066b4b2b99857d89fb6f59baa8a2c40bd9aa602ff2f42876829ea65","timestamp":1707646572,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ba3af9f1c4d0b07d0063a308d8c67115088b496ed1732c03bb56ba1a4f35141b","timestamp":1707645552,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220a99be0a78266663897b0f223cb57d746621c5360fe83d0d2b653c46542a04aa0","timestamp":1707644916,"dpid":"160"},{"from":"0xb9a4b7f5a15dcaa88d8b25704925543f006fd0aa","uuid":"0xa763c3e4720c8ad2bf11a5e2b5354b0134cd7dd76c62b8dc386f8f13b0183a64","cid":"0x0f015512200b6e4e0ccea7a56cacbe0b94ff6de273aa2d2ecc4f1b6d53186cbb6fac0f2489","timestamp":1707848244,"dpid":"161"}] \ No newline at end of file diff --git a/desci-contracts/migration-data/migrationData_Wed Mar 13 2024.json b/desci-contracts/migration-data/migrationData_Wed Mar 13 2024.json deleted file mode 100644 index ea6bf99d0..000000000 --- a/desci-contracts/migration-data/migrationData_Wed Mar 13 2024.json +++ /dev/null @@ -1 +0,0 @@ -[{"from":"0x41a933bab03126d9c1ad5052267edadf265f58b4","uuid":"0x4d3f0ee8f61bc55037076ef55b7c8129b9cf86cf2e3c0146c1378e7356baa99a","cid":"0x0f015512209a40c7ac52c80bdf4480a69945e10b2e79e7c873f8efb70e3c0c5e984d0e47f6","timestamp":1675737468,"dpid":"0"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818608,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220d6cc9190ffc1f696dedda73c0987dcf885ad87f7d913e2beea48a4f50f9f4b56","timestamp":1682818404,"dpid":"1"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x326d373f481973be63bf4dd4e8068c78fbc321ac1e67ed9c11474e7e14bffc2a","cid":"0x0f01551220c17fc203b637a2439ed29b4f8f96610c87ec84aa82b611c08bb30d540ededbb4","timestamp":1675781796,"dpid":"1"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220d502ebf0825885dbdf87a89ce524108290858fc0187b31e97c868e9dd98a0d18","timestamp":1676096820,"dpid":"2"},{"from":"0x4ba89e74869f7ec9a96792c18742876a0218d2db","uuid":"0xbdb3cc087df9b3b244e2b85676b42530eaeb7136b3b51494487cb87d345297c2","cid":"0x0f01551220eb95d36d9b314299a04e7e90f589e390beff9d94cccb951678a3db9cdc6a100e","timestamp":1676095440,"dpid":"2"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x14c6658aa83701bb18a8225e94ee008bec535c1cd430ffa3279a0df333fa452d","cid":"0x0f015512200d14a1bc62c9ca9d8256c76f0f7c64c228461fe932790ccb63d40087a1666f88","timestamp":1676725008,"dpid":"3"},{"from":"0xaf6d67eb6a07cd7f3d2d690499841042fecd137b","uuid":"0x2ce2eecf9cf99de291623a577afc6f453659a5eed14e0297fd3c4b0a7c88276e","cid":"0x0f015512204adeb2ae11ad4dad8fd61507ecf4bb56e8f85558e6f9d511a55edde1d8f8d47f","timestamp":1676988612,"dpid":"4"},{"from":"0x12ab259853038a8b542b77d4ebf3af671b7e8e73","uuid":"0xeb4670ff98c76bc9c87bbb0c9b48ac34b4416a60f419ed1e12927c7270f231bc","cid":"0x0f01551220f10709a2264cfe211072cc76ad6e6d3c68eb859651af5c17054bd2bdef041103","timestamp":1676996292,"dpid":"5"},{"from":"0x6f5e440d9fad549913512104a8956098c7c7272a","uuid":"0xf90b7a0acdd1e4f958f0955ba9b6de5f1822d34bfce88748db767957c3e1c4af","cid":"0x0f0155122084f827480eb0f8e772e99292c8bcea8194f46f71c831277a35bbeea388568e9a","timestamp":1677066240,"dpid":"6"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122058ae4caf6f4bd65bde8d4190931b4571bac4a8dd277ddbe522bc8b886b65f17a","timestamp":1677081012,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x6f4585e89f963dc039f932dfac228c734bd94de0871eea7a62cfaf6e4d019283","cid":"0x0f0155122068d207508426ee3c8a17616846ef9958c99d9d9d0ad1cc78ee2bd987f6bd6db1","timestamp":1677080820,"dpid":"7"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x38009c640482b5a7880f78014f467be987151e5abaf8cf698601d7e8f2dee8df","cid":"0x0f015512202d3d21c9ad0494f149c2f1289dcb5a3b35f117fc6bc0ef5328637789424fb8c5","timestamp":1677144720,"dpid":"8"},{"from":"0x3c6107b62c05e65f223f638ffa768bd011ed35a1","uuid":"0x71b1b81b823d60c7ccd855e030188c91941e0b2120391166228daa8fa0b105ee","cid":"0x0f01551220c94af041db6bfe0b46a4e07389ad78e462219fbd448076089596ad12a6801f79","timestamp":1677230328,"dpid":"9"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220be730fe1e9ae927e4bc786c068fced1e7583f41bec29c1ad8481c843934d3b9e","timestamp":1677511224,"dpid":"10"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x36a41fb106c58919fe47b0e04e95bea61931b5a23173134be29b12b229865e1b","cid":"0x0f01551220e110cc29d132026ab3842231caa37fde7be2b30275a272ab7a93992386ff7fb2","timestamp":1677510672,"dpid":"10"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x447fbec7a42e617052e792b1edfda430aa0faffec7f105dd7a54ff95bd5ea985","cid":"0x0f01551220dfe8aef953593b5444fdb684b23a5bcbde97476dcf42b32803b6794476aff2a0","timestamp":1678309056,"dpid":"11"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x5f6d2d91fa15a5004d4b7af407ffd8ce768694f5cab631f36c0984894f6f8c6c","cid":"0x0f01551220d520bc99de67d90929118eafefed5927995e541c6b201a455afd5f3f155c4b15","timestamp":1678771692,"dpid":"12"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512207cc5fff1a8eb0b2fa342d6523d8d452ca602d82af065daec2677fd0e61a864a7","timestamp":1680117252,"dpid":"13"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x12b956189253bc670f246bc4530689f66030ee44af9ec63fc116a15e97dffca9","cid":"0x0f015512208dccc1916b787f489adb0c311502e94cbf8ae04af45ff199fadd145361121220","timestamp":1678814328,"dpid":"13"},{"from":"0x60b059dd7799d156f035e6d3ea51262862bc9d4e","uuid":"0x642e30a12bfdce5c5d300578ac7242742a5f359b5561fdb86aba885349118468","cid":"0x0f0155122012bfe6212a9372be0fe15f2274faf82e5bbad020eb568cdc7a6fc2845ae6f067","timestamp":1679014104,"dpid":"14"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219484,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f0155122011d8fd550b152b55f514f4e6235a2fc7937856a636343f60af5f9f09b21ca7b4","timestamp":1679219328,"dpid":"15"},{"from":"0xa7b9772e93d5f43b8b74a823e4b742052f9e6c37","uuid":"0x985cc093c272658f893e316b7e4b792bf1ce0b1d9d9367e5db79b11aeaa4b951","cid":"0x0f01551220a9a416c935b1d5567b5e2991a9dc8b36338704d32c7715933f39a772de69150e","timestamp":1679219244,"dpid":"15"},{"from":"0x32b1f642d5ce695be9ca853aff84d59af5e02116","uuid":"0x21be1e83d8b580427585617ab76531420dea3ca384d3eb5328610c081b2c5756","cid":"0x0f01551220dafc5b29ff71836069925876f573c4e084c770d66371ecd48f3407c5803cc70d","timestamp":1679343324,"dpid":"16"},{"from":"0xa5c21ba7e36cae9af5a5894a9a8a65bac3f752ad","uuid":"0xbf4e8ccc9e5b411edfd246c92b3ec1d829ca4b1eb41701366ec0ff21d9017920","cid":"0x0f01551220c632038257b7e5b73160725957b4f4da2af52004a2bd47981009c94db9c1066c","timestamp":1679409324,"dpid":"17"},{"from":"0x71ad8aee76d7792ec41f3cae707b65594c67373f","uuid":"0x0dc8d351f011ac36a92a714073c6b2ad6e4d5107eb81ff70670c6737a4b6a94e","cid":"0x0f01551220c63b85344cc17c92bf11664a86b7d35e9fb2e6fcd02dfe2a1df19630a124d521","timestamp":1679409744,"dpid":"18"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x1737974bc778096d399921cffb55fa2a0a58b7413eee9a5d9772ea544a56d3ce","cid":"0x0f01551220551b199b7e78003e35010a0fc62759290d362affd13d6f01872cf9846e21b12c","timestamp":1679539764,"dpid":"19"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512202dbe5b2beaf6182583a63a23d587a5c7a573d8637d453445e1d8325a50abe867","timestamp":1680554796,"dpid":"20"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x155ae66a79a498560bd443ea776b81711483a1f54695a06d4c99ed67cd55a996","cid":"0x0f015512209e0dcbfa6f3cec9ba0315f70a4941d6e410456899691ab0701904b4592d9a4be","timestamp":1679540424,"dpid":"20"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637288,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220fe4bef7acbb1a58e564bf3e28db8575fbf845e41bf8e5c52892730a69489bf66","timestamp":1679637252,"dpid":"21"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0x4e8a0b467c02c932530981a696a30951101d7c478e939aaf00560bf451052e65","cid":"0x0f01551220823b961f7d6323255c47e996afe192c96cb0babd5cf91383c5ca505b00af88e6","timestamp":1679637204,"dpid":"21"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x7a041ca4f95c29e37f84e084752aba25cdc5e4a57e2eef8e6ba02622e97cad63","cid":"0x0f015512207c1f3bcd940e08a792dcfddcca0fd350fa6d05afe6dbbba0f94ed56e1878d807","timestamp":1679658768,"dpid":"22"},{"from":"0xaa572e27403dcabd42f0afe938bdd18c3b52523f","uuid":"0xaeb5c1f0576f6c24fd087c9ca9837452c0ac5f8d41104becb848b057d4cbcf76","cid":"0x0f01551220b97f2b4a0ed522b7b888b3d447a9653143098fe0991482cd02cabea69951b6b2","timestamp":1680567024,"dpid":"23"},{"from":"0x83ee33564ea39cc2152bad87f1d0d464d07fa3ab","uuid":"0xece33e446b40791e7d5079daf61fc5d7a5ef41c0029297b8fa4aef09ec9c1825","cid":"0x0f0155122050118b2b1175fa6b3dbbac44651b048694f7de272bee5a53cb122a3aab03ae23","timestamp":1681191960,"dpid":"24"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xba82c370711c6a35946fa10ac32d27019ec1d0981057fed3d1aa9025297c44b8","cid":"0x0f0155122008f915011dc3f8bed078321740440a869c23a0238938f0902f94567291bae372","timestamp":1681495752,"dpid":"25"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f01551220413f7132abee3941f9db9c875ac4ab2c84888249d2558496cec2f01f7fa0b8c2","timestamp":1681497900,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xdf7c88ca90ed8369caf0d471d2002ad9bed055979e797c0629b9b84516e3158e","cid":"0x0f015512201237f9c3c73a3fa6a55b80d67bd744fbdd7b19693ed32fb0465485c1d1bdf8cc","timestamp":1681497684,"dpid":"26"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa94370567701bbaaca632e502b4a84c07441daf07bf1a23ca2a46004a35fede0","cid":"0x0f01551220874f2f08bd5d67a432327d6d7ca987b4bbfc83b0db03c76453d73a9395899450","timestamp":1681505184,"dpid":"27"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x7664a535b66afbf011d6884a50a280ae9a503ce94acc9497728d459a153d827d","cid":"0x0f01551220eca5152df9f89f614a5521ba8f8a796719772286152a11e4e8c4659f4d505efc","timestamp":1681506588,"dpid":"28"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220574146a7501807df98a7547c0b3d0bdbfcfc0b29704c823ff86571b9a3deab85","timestamp":1681736628,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf7e79629cf74e93badb2e8be9142afba0d500c71df79d7a4bb8ecc1d3344b7c8","cid":"0x0f01551220c82d987df438ab758c9b557259e8fa0f4e1c2278651c802608fbdf8033419821","timestamp":1681736556,"dpid":"29"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220be43004fa14f3ca7e2e9cf01f1a0b7906b3728e53c8b1af19e309e1568f85cc5","timestamp":1681762272,"dpid":"30"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x071c36b72a3caf0d6392384b27ac6ec65bb8f9fcebd00f4381b5ff3563145288","cid":"0x0f01551220734c2b0c3a1f21c05663f5a9d2b258d3baae0847e06da7699959aadc6616c026","timestamp":1681761420,"dpid":"30"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x57e2c2007b7af4859a04a5a1ed555f17f4d54a969158bc73f079b7f85a133ad5","cid":"0x0f0155122007140ffce5d9d7cd93e847b4ddaa75400b0baab040ddc2ccc56c33a141458556","timestamp":1681805808,"dpid":"31"},{"from":"0xb7633a1c95cdeff14fe90a18c61ea2eea56add6f","uuid":"0x5207335dee8c3818e7cf16b4a11ade55ab52d3957b8bd179cf351b8578746c03","cid":"0x0f015512200053d8f17531e05fb7d33978d35eb4fb6028dc8414369fbdf5a660cb22914ab9","timestamp":1681830960,"dpid":"32"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x8e794cafc680e76baeeb09e74ea413c816fedf6b716337d07abdd5657f69f822","cid":"0x0f015512205aca92353605ea8a45e732995d51da82d0dcb08089f907420dbe60ff1795dafe","timestamp":1682014560,"dpid":"33"},{"from":"0x134e95ce73fbb2a223e52351f8492088a86991ec","uuid":"0xf1a54e169d7c721a532b63fe25a070c673dee267f9688537ea9005f9fce8f118","cid":"0x0f015512202a09ce4187780645e8e49efff4ea3b0caef18ed60c42d9647890fe296db7d3a1","timestamp":1682144088,"dpid":"34"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f015512208076546c5b3eab9a046d4c3c7c214fa94bc80a6d67c6b310e8b3d8e4da0c17c3","timestamp":1682813004,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f0155122060953bffcc76ff9af880b9c7dc0e69ab8f8c2c2b9d01afb982d1b6f38bd3eca8","timestamp":1682746284,"dpid":"35"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x90f86c5a7583bcc259d8fb5775e3a2076665f65a5cb8898c5d6d89b08af1b24d","cid":"0x0f01551220fc56171ee7ae7bd3eb3e36d2e88c34d26eef0deb8a2850aa70874734324a5c72","timestamp":1682534976,"dpid":"35"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x66ec71949b03ac1cda5600f93a042cf0ef4a5fbc114abb5ab00f879320e67429","cid":"0x0f01551220a2e49ddbb71fabd49f69c44aeeb69f597fadff2061adf6c46a7d6a8f77848d09","timestamp":1682670864,"dpid":"36"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f0155122003fd6d8a9eef363a8f0331c364da74dabf485fa2c90142d6d68a5045f1d7068d","timestamp":1682793408,"dpid":"37"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0xfd5a3abfa855bb28d91bde740dd3a3df2340a76b503582f9a4cd978f930c9b41","cid":"0x0f015512200370361d9eabcbcab401ef4d4f97005094f536d3b7f89353d84349deb8014c66","timestamp":1682793228,"dpid":"37"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682822136,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f015512200f2cb36fafb2c4afa399cf3c733b608e6bdef23357bd83449cf6075487e1f856","timestamp":1682814000,"dpid":"38"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x7fa601779203a1c794bf53b4dcc5dac09f7ae58cf17f081565523061c32a132f","cid":"0x0f0155122006c38ee5c3d87df8f1871df54b987c1ce43726f892a9ddfb08be670863bc4970","timestamp":1682813880,"dpid":"38"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122091768c624c35d1bb57139837d71eec4bf81c2888616f5a3cffbc0351a172f6c1","timestamp":1682849124,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682821080,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f01551220185d1da3997286a0501df9b41cf358001fc30bb01db13cbd061996b25aabc450","timestamp":1682820648,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb2e530c0811cf798acbc1fd221b29143ad413deb43028c1915cdd185c7217732","cid":"0x0f0155122033259ecc232dd46a608ff88651128a8da6bdccc2c917a0c2ef56b4dc27f7e498","timestamp":1682820372,"dpid":"39"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821884,"dpid":"40"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0xb3aa39792e39b8c5f2e8082107c15123497ab17abf15c491910158290057a072","cid":"0x0f01551220fba56e3d91b322c2d944e84d94f2465666383d7c49adf456d22984139abff5ef","timestamp":1682821224,"dpid":"40"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220ac1f68266f0f2a9e7fa96731e46c54a86aa36bdbd4a22cf1a5c08b2ee9957600","timestamp":1682854344,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x69fa83483ceb67b5eed688c0331214d5b9c7002cc5212f91f593403026906e74","cid":"0x0f01551220e49575cb06ca399247ae08fae9a8b3a3ff5de24b6a8dc29e44ac3ab6115c1539","timestamp":1682854224,"dpid":"41"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0xc73b88a9747fb3eb3fb051bbb3971faaf4819d1b8cd041028cc5531e3f9c6e94","cid":"0x0f015512209cf107adddf229ae090c27cc3998b51daf075dac2e3824d828cc71e1c3782903","timestamp":1682856480,"dpid":"42"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x13ce389478fadc96534f666ea8a035dc54c4d08f12ec16bbbbbb0dded66e93fb","cid":"0x0f01551220d46086ee0c05a4f167ae2637ee677a562ea1832d38cd953900b43d4836d5ec3e","timestamp":1682951112,"dpid":"43"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0xfba4b603620f33f51b5afbdf87de9ae79796d5ac1d4ac6f19329460615a8eae5","cid":"0x0f01551220f078470899aff3081b145084f68c9a2445b99322dcd658a2650f62a75fffe89d","timestamp":1682962248,"dpid":"44"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5e53b3b10212b4ce9cdec84c8fafbd305d80df6c778375e2977620d1b3f366c2","cid":"0x0f01551220e5895006b048366ad69277566cb11b20ff47201fe00f40dbf36f3d36c5137456","timestamp":1682993892,"dpid":"45"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220e627616fc85b6405cb28bc119f5f5073ac4c8796f6c3cff19d78a782a54ff32c","timestamp":1705420740,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512208f74fda7bac4317f39ff66c233ae140290d6ec58c604e73d0259ee384040eac2","timestamp":1683299940,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512202dda4e35c872736baecfe8d06d38854bda736485adb616f220fb4b19919e4562","timestamp":1683298680,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220bb1fb9ca4d11adaaa6514289cdee3c0b7ee3cbb848b49be0f9da3dd8a1dc0b0e","timestamp":1683227616,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f01551220fd53a16eb6b7a09035a0f62c96a6a7dfe38948b84b44ffc8a8107938c87af450","timestamp":1683222132,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf","cid":"0x0f015512201a6d456535ce453d3f62ce0f0671f8970ec00638d2271bf52b03c0520a1871f5","timestamp":1683053508,"dpid":"46"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x90ba1ee3a35ac4377b45b8576d2bad8dd590b8d97fc907966b08eb15061b874e","cid":"0x0f015512201f746518f1f6b93acd19aa5a9af16baa4cbe66e48c71548d8087f6067e1d454d","timestamp":1683222948,"dpid":"47"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x3afb6232b1af22d2d2b32c8b8f93f51cd826fde329b43c1ad296b090810ea96c","cid":"0x0f01551220803851d9e43a70fed0e93da3f8e720cba9f4b9e34130a3648b6a67cad93d60bd","timestamp":1683232692,"dpid":"48"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220a4e515a62882a47bc943ffe60338a81d5f0c3effff4f4494c84565f95141a50b","timestamp":1683237288,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f01551220d866d792ea34c8f71d6d855dd3901605bb91d0b451a6e7c5637da941408544df","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f015512202fd9deb76c3a394930c41135746ae86abed45816500dceaa5483d2b4d206e278","timestamp":1683236760,"dpid":"49"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xcb898a4283248b0f3adcaa39881487bd04c68d948763c2aae85051e27496d6f6","cid":"0x0f0155122093f39a0766cc860ab7853207cbe2f52a3ba9d6eeb7baaec5180b3b63de07259d","timestamp":1683236460,"dpid":"49"},{"from":"0xe861856c961f853dc47e5f2ad1fa2b9ea20e4e88","uuid":"0x29d466756bc5ad7e00d1197785c6e18c9adbf139ed8cd9669a381d4d3ab5185e","cid":"0x0f0155122031700de6766f972518cc770961fe4a4aabcb4e482700cea3eea5735315b25518","timestamp":1683886968,"dpid":"50"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220124bbb6ca94ad4bbe9d46a6049df553c4fcd886f9dab60fb55b5b3b393cd572c","timestamp":1683931428,"dpid":"51"},{"from":"0x62e4851e88bec4f5c5ee3dd347f2c601a18af1af","uuid":"0x74d616c752797ffbda494d17f307944d5278a34412c93d449f3f8da43763cc8c","cid":"0x0f01551220e4266d1c3697778cd48f4f600ea15b7694dcebcbc5a80ab7a5d425987e411b00","timestamp":1683930000,"dpid":"51"},{"from":"0x9fcc55e782c2e43dfadcc428c4f2f8f32e095782","uuid":"0x136d9f9e3810666980107d2d4cbdb0032ed4f67f591ad82ade1658a29702fff8","cid":"0x0f0155122057b7679b0135b03fdfa0f49ecf5599a50be9f2838eb96b55ca54e450a2c66caf","timestamp":1684412244,"dpid":"52"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f01551220b49ba9590a9b78640004d71de051fb2079d42a111e46ca808c842b227e3a890e","timestamp":1686612108,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x264d32566f1fc2666dc973471ca8fb18bffc0c51b5bd2e4ca48ba96bc038ddb5","cid":"0x0f015512201fc246787a63ba676c4780494f7c3e1b4dc2ee82868e33923a5f14221c63c962","timestamp":1684862784,"dpid":"53"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220ee15b4b25f3f6e7922d998effc6a1c2415db9872c55cdb7eced06e84b69b64b5","timestamp":1685098776,"dpid":"54"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x3d92250e43114bf88cdc7177ac03d97b513c52c0836be9dc6cce1d9ec81fc40e","cid":"0x0f01551220d32c64e3089d45cc9e0ea93553a81932a265d37240f7255ca118cf93a0812891","timestamp":1685098464,"dpid":"54"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x814875f70b49d8855ca70a4b842ec18e0cbfed86f7dacc406451b6c74946b061","cid":"0x0f01551220547ea04b46ceaa946574346f2afb4be20c3706d7510cff38d316ef1d6aceceab","timestamp":1685442360,"dpid":"55"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512207e406a140574f56a8a0b6bf22ac7b1e30a751ccfdae880f623883365a8fd5ca1","timestamp":1685448060,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xa1003e22d0a53c4462a6fd74f25f2904d162d7e0ce13bfb71e64fabd78aeafcf","cid":"0x0f015512208897402d12a4ca848c6bc5acad80b318044ad8aeb83fdfd00aa138a422030e8c","timestamp":1685444172,"dpid":"56"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5a82718776361e7b3218a895525f3bf16954747a919ad4279cd9a51f8153613a","cid":"0x0f01551220145c239a14db836ddec6d984dbd3e855902c3a3625b4f89deb169f9d2b23a12b","timestamp":1685525952,"dpid":"57"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512203a32dbfccc4f9fb3f87f0ef22596afcb03399aff87b49763bd67f1bbd8935e5b","timestamp":1685536224,"dpid":"58"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x0fd2c5466eec70eade1ca792d028277abf54829a478f4938ce6dce7239dc1a74","cid":"0x0f015512206bbc0246759b51a6d9c3dae6eb449e98acf52fea38d2bb4c70be3b1360932349","timestamp":1685526132,"dpid":"58"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220d5a01de71ad36c74e536b75ec1d64e8b38272f8e1245274886ed6802b255d102","timestamp":1685613240,"dpid":"59"},{"from":"0x855d6db82bc9941731ef4c8f24ef8f8c2ba70d57","uuid":"0xeb882976fe1e6c6b396014fee4951fff5d9e0961d4e03c2554813d8b131e2690","cid":"0x0f01551220c9d4ab3fb535d36f96e59cd3d120a4cf2a72773a2b14a384aefd1381a52e5255","timestamp":1685613060,"dpid":"59"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f01551220ac71c7dfb47eb844988b61f0ee67e0464256473d52f9e2cc8393d6c7585c7a05","timestamp":1685613708,"dpid":"60"},{"from":"0xbd04ef06b426f90989f21e1e4a8322148be15f98","uuid":"0x36d7c583fad52ce2cc73c3e64d26ec7d952dea16dc86e1bc61be04ae174a7298","cid":"0x0f0155122085924ebb47c11438d9086ecea1a9a840ea3ee15cd36f5b731945d2e3d06b3a5c","timestamp":1685613216,"dpid":"60"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x23d7465583afc75276d7ec121fd82d34d4d38b6456be9990ab50fe6b2aec11b5","cid":"0x0f015512207dad824f451fe44d3192a14e5b1212ee20e4e11669819ee7df6141fddf26d96a","timestamp":1685614104,"dpid":"61"},{"from":"0x0218cd84d3f4c5ba7af9daee7ec9193596743c24","uuid":"0x71e940680347c5c59fe91b01784ecc9c6ffcc4c65ebfab0d5b8ff9dc02166a99","cid":"0x0f015512200f484328bac037a779eed442d60d55fe19ce84ab0b52d951e45c24b700ebe1a4","timestamp":1685615388,"dpid":"62"},{"from":"0x008292e57a2d9b34525d82876068652e639e61d8","uuid":"0xc2ee84577e3896e376fb8ddb1f5b8c776b14a641e301db88e4995d2992946486","cid":"0x0f015512204961cc8ec829abb48db7362aac5600e643c38879009114809a0f5ffa21a20392","timestamp":1685615724,"dpid":"63"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xff282722074468174bbcca8902d81de7fb794a493c26edcca8ac007cf7638ebd","cid":"0x0f015512203a8aa5608277fc2026e1971013089a38b172b9211211e512bac708fb54964a2a","timestamp":1685719428,"dpid":"64"},{"from":"0x813eabba8e094bef89fe77b4f497810b9795ea66","uuid":"0x7c56741adb2e6f53a1bd354a7863b817a42d1e00d602450d351b5a3b57d96e59","cid":"0x0f01551220a3c2ca0411fc58b9de718eb7408872a6dfc3420518096fdb632d2a38f757d08a","timestamp":1686220584,"dpid":"65"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f0155122085acd5e30aabbc367b6d6ab8929c7410502f8a7256a0a5ab0f68624e8d60a37b","timestamp":1687805484,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xb1af911e2703832e8d512e80924a4ac700c3ae4145f401e6654b7c9d4bd865d0","cid":"0x0f01551220245a17d29a145e9db11ef5f9bf760e0aae95182abe8f9830a2dfd54507f2d756","timestamp":1687805292,"dpid":"66"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220747a2fa16ca8ca254aeb3e9ae987d6522fa4e5be266b095f517eabfc37c6ce7f","timestamp":1687808232,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x26a4bb3a35c2909090c8a2214db2e27fbcbef373d026e04bc75c12e20c5ce22c","cid":"0x0f01551220195d0afb118d9073215302753e64759f9e9fcc5c37abb2aadc97e7e82cd1ca08","timestamp":1687807524,"dpid":"67"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x58703be0a37ec8b08984024a4659667901d03a7e1c66612766ca3a99ca369ac7","cid":"0x0f01551220e054f76eecf6ab486d3b64e5f12310d65753d8cbcca1bd8b2ec1d058f8b396ce","timestamp":1687812132,"dpid":"68"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x5825084093f35bf3b98bb9ecd724400a0f01ed6c3a2ca27b16ea69b53306faa6","cid":"0x0f01551220c522c541b31394352d279616369fce5804ded295e299cbece7f0ed81c934051b","timestamp":1687812804,"dpid":"69"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xc335bda4b1f79e72ff0c5d061e6fdf7af21a86ebac698e90f0cca5ac69b3020e","cid":"0x0f015512204068d1d21f66b52f65c3caf15e4a522d0bc37dee1b425a337386769fd229a8de","timestamp":1687817568,"dpid":"70"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122063982338abc89465b4f573bf9aa1579bfa654f6aa2f12db15ab756d9220726e9","timestamp":1688024676,"dpid":"71"},{"from":"0x4ea7034b9abca9f6a7e43f8025df07bf0da3b349","uuid":"0x43af54a74f93983a442a466eb8ee20efb274575656b3a600b078ab3060107936","cid":"0x0f0155122021e9bb44b2e4a93be54db472c3f8c5a2604c41ce29230923b7d1b86276f28479","timestamp":1688024628,"dpid":"71"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xfd54b8d85ecd02cac3e64144ab492cb75faf8167b75e73b7141a3404e639c1df","cid":"0x0f0155122049e0b9c318e2763599d6c4de8ac0d7e2a5678d1ebac71a38b47e31e2bd890020","timestamp":1688552688,"dpid":"72"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1689009768,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x57a04f8c5aadfc0c03871f0839a53c63b47e080f0d6ced3209658a106442e069","cid":"0x0f01551220a3324b4d9b9018c5f375556ab6b91d54c1414fbb50593b49f5927ce8b0de5061","timestamp":1688720808,"dpid":"73"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x04be83778e156d843a2551448780727a3c0bf21107d66d08e2f50f370be98712","cid":"0x0f01551220b0ba939c3c33cfe4d4bf663a635ef823ed188388efb15ef6bb3efcc4c3d21fb2","timestamp":1689041640,"dpid":"74"},{"from":"0xf0c6957a0caff18d4a18e1ce99b769d20026685e","uuid":"0x6047e10d820b878a9c553073a5c140bf1023fa3426bb25348037826399913556","cid":"0x0f015512203392d7b04341c36abbb607f36e02e46ce09e87563b089a20ab291637ab816ffa","timestamp":1689294216,"dpid":"75"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220735441775977d79d9e9bd0c1680b1efd6c5c85f01c63bd8b03ea6948bf967a1c","timestamp":1702045944,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f0155122051014af7073b576391b1065f67952d07b510ce2ac4fdd7da516c2c551e52acd5","timestamp":1702045680,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512205cb228099c1cb09650d8b3e5404241058843a2ee706708e025cc638d4186b2b5","timestamp":1702000140,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220a62e52b9c6a2cee08be12a4502664b51d950666fe4a5af90a3cfa913a613d349","timestamp":1701997248,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220513199f4bee602755360752169105632d04fc23173f1003bef320d0337d16c14","timestamp":1692330000,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f01551220c6ddd5e72684c2dad436b6946ded360f9fdf84b73e99c08787030f57312c535e","timestamp":1692182952,"dpid":"76"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x76d10f2905b92794f13a89161f0ebe4e967306b55a2b166f105ad6a09e68a436","cid":"0x0f015512201348deea506b711b91e43f1ec9d7b8d1a56c13d2226b346e9fdc4b14f56a8409","timestamp":1689518988,"dpid":"76"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f015512208e1e764e2b216acdc6a81d7da26016d4a1185a1137803a378c1059a7e0a65f2b","timestamp":1691496348,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f01551220e9765441e96679a63152b92240d3b59eec842b19660aee519b62b23faaae33ac","timestamp":1691493636,"dpid":"77"},{"from":"0x07c33d5c1f3f0dbd03d6ba4c55f2b5277d1faf59","uuid":"0x7ede0403530b1dae67fe29c92612dab71301e6e65e1613b6ec23a53bd7e1571d","cid":"0x0f0155122010bc45102349d2dead31c0893a00c3959e0f75799d4dddd2860a8cb1ae286cfc","timestamp":1691492520,"dpid":"77"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x985b7ff62652f432b38e1b8aba5d3f4fedbc36345d2f818fdd0011c42fc1a43e","cid":"0x0f01551220a8bb15e9a0913fa0e63caea2bdb8f84b37521252b639231b8050e51c41ab8eec","timestamp":1691501736,"dpid":"78"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x10fd63608937c5589c65117fb50a3736196e854c2746e5afa18616352fc15da5","cid":"0x0f0155122033a510449f17a7331d387be0514110675b2036408cf5751a429e7574a348ad28","timestamp":1692472464,"dpid":"79"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f01551220475e5ebbbde7ce1cedb1a937a6cd13947adece0f50f7be0f0c39f5ce29d55302","timestamp":1693246872,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe96babe930c24652da98af769f0e37110dcaacf54a92b9c380dbb08c603714a5","cid":"0x0f0155122016b13ce97577c13677246cb18439f1b197ef62c31b7eeb4afeee59c2d169b004","timestamp":1693245804,"dpid":"80"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f015512204f1a4a775cdb3605abb7db7bc372fc1fb548752f87df0607c090228a49da8d61","timestamp":1700147784,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x202af6094a0755a5747e33ba8b0bd1eb53fccc8f402a058a986e241cf151d4f2","cid":"0x0f01551220842e076e8c09994d9ede0411b1885e7f5673840507c70756c676028003a9bbe6","timestamp":1693246440,"dpid":"81"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2985ad1a8ec856aae4e741ec6442b1cb31df4e689741850cc7f401a2d23c74df","cid":"0x0f015512204cac6289a604e10132a917dabca35f3f75d77234d829cdf8aa81780ccbe18880","timestamp":1693247148,"dpid":"82"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f01551220710ec51c7187f14485779174c132b73a601e6db96295e0f70cc3090513f514ef","timestamp":1700147268,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xf5ae826167424db2bfa5ee9d751067f6dafbfde7d75392850b4e47a3f550789b","cid":"0x0f015512201e109b99ffc1d6eea87e4bae6e62057362d4ca88358ffedc970207ecf87a0a8d","timestamp":1693247616,"dpid":"83"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f015512206554b159bfb54e5c2ca68f6f8fe3ff431474fd459edafebec2cdf4a1e1e9b84e","timestamp":1700146980,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x97a5fb4f04e6ce814587d8aebf4f9cb1f1e366f807625f729eb046460aa5cfb6","cid":"0x0f01551220262bd98464a8a798f60c4df021584568feb20fe8428de4866b8d3ccb5d8a01fb","timestamp":1693248192,"dpid":"84"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f0155122089b4726dd6758d6ecff4793315bfefd5e5a275fa886fb87cc3fe711415411a12","timestamp":1700146392,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x28e67c72d63beb9ed51e08a29025e74bcee7fab0108a54ca7f0ce69d96a74477","cid":"0x0f015512204730b046919be6e2dd88cfc619840866713f532895fe7e110a4a68814bfe379f","timestamp":1693248672,"dpid":"85"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f015512206b80bc92b65b2cdf7739f7f926c2c1ffedece7cc7e24b7eba23a2af8d55597f2","timestamp":1700145552,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x2ec50138c265035b818f1cf1aabb56606b43a40f9a02e6ff9bb499afce02ccc5","cid":"0x0f01551220f784661a9ee6ddb4da6c0778a9a44fd0ab582072e1feab0e5b5f24775e464932","timestamp":1693249560,"dpid":"86"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f01551220204550a97883e629602079e67248acec5a82315e82563fc01f8da6fe26739b5b","timestamp":1700146176,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xd4d21b11a2fe34a271d4b57465400ded30b7bc8964f6cd24aa4471350dd13444","cid":"0x0f015512206b0eb5f87cd5afb5a44d84b56435a3faf324149a72750a023e4002622f787afd","timestamp":1693249908,"dpid":"87"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220bf26daa8622f079ea3adb5fc871b28d814fe539b3094c8ee77ea7839eb50ab39","timestamp":1700146776,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0xe1a6d112f048443100a10ca23a23246c5ce6e74a1152867019841c5b7e28a177","cid":"0x0f01551220237e23eaae482991b11035fa1faf61af5ad65cbc8abe7992a7f7683f472de936","timestamp":1693250244,"dpid":"88"},{"from":"0x573b64ab6896048ee3629c675a4bcf43f15cae67","uuid":"0x87cfcaf39a1c482f5866bfbe48d4f63d65d7db9fb992b6837c688d2013940c87","cid":"0x0f015512206fd907cd2fc2464c48bba2fe4acbbd967f4ea17277f533f6190ebc88fe583e8b","timestamp":1693251900,"dpid":"89"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512205e6eafe4aeb2971047b54a0f1dcb449c69321094bf55b9e6674434f3704a7db9","timestamp":1695653376,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f015512206afa0e08ee564a4bcf5a739a57dd19d5b835df7f5da459da3c442d3962d5b77b","timestamp":1694187648,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0xb042634bd8cf3e2486267d063ac9d83e2efb3b721e6e465c58bdc7c980d8f8c8","cid":"0x0f0155122016df22da6fcfd0840b276673f1732fdc8276316d0fdbf3529fa06e63565399ed","timestamp":1694114940,"dpid":"90"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f0155122073452cfb6096325fb8f41f91eb93223f7d424352ebafb240bc61bc62040167bd","timestamp":1695653220,"dpid":"91"},{"from":"0xab8f4ef398d4e4dc187de771af84e7d0184f3143","uuid":"0x6d37e28e7f317a180564f3b46ddc08ac873928669c5ad219825a25c2274d1b7d","cid":"0x0f01551220cf13504896eb49ca532783f3b14b105c7882a0a712f19c031adfec44e08fd56d","timestamp":1694197140,"dpid":"91"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x43c4629df6245fc911ed28bd3e4fd92899dbed0e70d6086467ddf89407c41fe1","cid":"0x0f0155122050265ea5c933a4b296c88a16862c006698445750eb177f512e3613b9d364345f","timestamp":1695218412,"dpid":"92"},{"from":"0x262b4f07e42bbc33f597fcf0d854e9dafaf3d469","uuid":"0x9db9db43f2e485f733b91814cbeb189c03f6a4ca18c4f07729cdb9bc9d88f852","cid":"0x0f015512209a7f7d3d0f68ffb55d85d6da6c442c9e2b2389ea0b1261b13159fa9f098102d0","timestamp":1695246144,"dpid":"93"},{"from":"0x9452d0680a39195f59cc8a8b794aec0a81d51cc9","uuid":"0x6d7d697d017315f644992600e7c28f2914a3908ed134aa6b1e49ebe708c16dfe","cid":"0x0f01551220106cfb1003c1e512f5187ca90dfdc66fe8a4df16d7889413c38c5457fb4bdb1e","timestamp":1695246324,"dpid":"94"},{"from":"0x64b3f6f1eace5ba2d49c430ffbf085f4847bdec7","uuid":"0xba7fc52a499293973b4b35f8bbcfda823a2059c9a8a175b13cf35d24707b50b9","cid":"0x0f0155122083f5c28f77367e6084020d3c3621c39a17f108dfd21ef4d157c0aa9d5107c5f6","timestamp":1695324696,"dpid":"95"},{"from":"0xbfeabcaf054e5a1bcc665b2ccf0eb12b2a6de683","uuid":"0x26a149a3b1efaa583e80571482cec997f375990f70bee46e3230bed5ba78fc55","cid":"0x0f01551220d48c3bca9221e49074d1cd6df4f0bbff5852baa1cbd24a9bdcd8ce54efbb9a50","timestamp":1695816576,"dpid":"96"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f015512204818e564ec9e3bbae2feff07d68040876da0436fb6d89fb5f54daf95a98d72b0","timestamp":1696594740,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696481172,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480884,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480764,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696480608,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696479552,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696468416,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466964,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466820,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696466724,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459584,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220a2282832493f2f5374b765209d542ade51cf5ac9f738b81ec440f4ac21d4e310","timestamp":1696459560,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696440036,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299996,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299912,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299876,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299600,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220d45eccfc59bb6925d4a6f23e8632d09c59b7f2ccdf90e029b33783fe2b8edb46","timestamp":1696299000,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696296012,"dpid":"97"},{"from":"0xb2bcace7094384e4e833cd4311f9387f526d0935","uuid":"0x387f925dfdf2120f7ff453a729f11dc9395f9ac1c767c28648de5fac509ee3e5","cid":"0x0f01551220dff53ce2ff20d1faf1bcf9d66725f6e3918daac647d0ee8626fb86812c9530f3","timestamp":1696295376,"dpid":"97"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303944,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x08988137e3c7ca1900a6a8743c11a60f8eca30b45a36e0dd5675453502755d3d","cid":"0x0f01551220526f20807b8f2fc8867e4931aac698d000d8564622674c4105e51e6f6cad5f47","timestamp":1696303560,"dpid":"98"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536972,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536936,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536912,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536888,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536828,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536804,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696536756,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696469268,"dpid":"99"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe9bc28a933c69b81e3eec7d48d86ca3d7fdcad3d70f9a156959f27807dad4dff","cid":"0x0f0155122037fc886413e4ece65d5f89dd6808c0324962d029be944be662001e76a0a19039","timestamp":1696336296,"dpid":"99"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512207d74909d018b17bf267e9983f5a4ff1b1b7cb91314c7f4e3fb99ec60e3f6089e","timestamp":1696840824,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f01551220e88a7c59024cac199699b88226bf15f3dad2079ad7f8de522cd58d212a7e4cb7","timestamp":1696507296,"dpid":"100"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x7b26ec3b06554fd57508e83524ab4a96d97d7d963f87d4524cc493d021508c01","cid":"0x0f015512203a2cbe6fe0167c0984e4139576143faff5e3afbda15e52091379c4788bcc34f0","timestamp":1696506528,"dpid":"100"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xe3bcfed1e03918f9d7a48903f9a96e2589f8823d1c47b6293cd744b7d7d57161","cid":"0x0f015512200e0e343667925a707bc9194a7581e9350e73aacb16423757faf047229216ebe4","timestamp":1696589760,"dpid":"101"},{"from":"0xaaa76086e55054cb4cb6f428ebd0b3ae0637772b","uuid":"0x9e102f9a7ce12cd3dd4944b13d51493e7079ab344acc5d84e6f5ea05a12353fd","cid":"0x0f0155122044410acab6cec9a6fad6d5e92f690eecdfb0bebab46b04d4dfaa4cc50ab3cbb1","timestamp":1696605300,"dpid":"102"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x69114e8fa768f26d452f12090831b9c6e8d58ae100ac16ec68cbd661ee8b3997","cid":"0x0f01551220be7eb409dbc450417545a5612651c26d3ac6085bd09c11017d700d25e02331a7","timestamp":1696841976,"dpid":"103"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f0155122081133e104e9fce1fc05bcfca24152c735c24639fa938b2751fdb5dcc9bbfb699","timestamp":1698779592,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f015512209bfe5c87d9e68468f132e569e0583f33a30e2a4721d7e250481d43c0edeadb40","timestamp":1697792352,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf4d539c10fb8fa1cb6b0a7b1e76589c1810b87cbe218399baa3af21805205e66","cid":"0x0f01551220149da347cc8d88f970c3a014de162231bbe2c6b6f8b977f45c2b60b0d2052084","timestamp":1696842144,"dpid":"104"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1698911760,"dpid":"105"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xf9fd76516bcece8238e57daaf24542ad194fb87b8547db93b54849fc418df0ad","cid":"0x0f01551220dbdc1fef980eaef480d661e9a13134b16ce32887329e962344cd5069c386624f","timestamp":1696842444,"dpid":"105"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512204a990fa9cf6ec736ee690ab111e9bde63b2615384a56b40db50eaa3bfa19d1fc","timestamp":1696961232,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f015512205c33c5b575919cd5dfdbcae96b335681a9fd72d8cca0482bf761ef6f2bb815b9","timestamp":1696944228,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220e46482f58f98a662de09515c518875d19ad5815effe0305a19ae113ee24e4c03","timestamp":1696942104,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xbc90ff106b8438bebcb072a0f7092d550c6552e5ed8dfe82107ab7c4294c3a86","cid":"0x0f01551220210b3fed6c321b8b3258241c07b791b8f64f07cfd349afefba85f1cf50d7481a","timestamp":1696941732,"dpid":"106"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x8f79e11baf8d51b43253181d18c55f177041ded43dc9c9672995a777468b3640","cid":"0x0f015512204694fa680941e0723a66f03b755e81baba5ac3d7d0b48569b76649e8f5bebb4b","timestamp":1697040396,"dpid":"107"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x65be6859a644c7bc213656bc2ffbb228819097e5a830a0d84f681597d30df140","cid":"0x0f01551220b93efc4a93e3930240b6b73bc0bb8cc248a91f81b75af382d9ac24d72ac345ef","timestamp":1697792640,"dpid":"108"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xb8ebf456801e699d1ac6aa26330c041d6c28ceedb7062de145d478a69b7e5820","cid":"0x0f0155122028ca283b93da193e6e73785f3bb9bdaac6bb44c4433d0141ced0f9ef18c7d0db","timestamp":1698054684,"dpid":"109"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698323460,"dpid":"110"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x694700a57364c00cbef7aad12f0ad9eec89a765770c39a858c452dece2927afd","cid":"0x0f015512205eeb019d7cbf04e9f07094cafc9af05a567de18ea2bd0e30257c4717afd2d642","timestamp":1698079308,"dpid":"110"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512200b0096b5867205f23384349f18aefee7e47e1927be1079c2b84a1ddca165a157","timestamp":1698178344,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x42e23ed9102e3274829d322e5503598eb6d20450920e1fc4c782672a1b2e87d6","cid":"0x0f015512208992878828526d44bf352a455357ce72f77d7dc2b1f71b248db7f3c4df04679f","timestamp":1698177444,"dpid":"111"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f01551220af0bc91008bdfcf0f05188052122ed4262d2667c87a6aa962cabb11e31bc933f","timestamp":1698747864,"dpid":"112"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xc8f8c06cae74d6b5d3991873533798ac466c7706d9b28dd06d7264aadfd6dabc","cid":"0x0f0155122053cb052093615303fae1741d71f86fe18d656f43f70602bc379d8eb6dfc69ad7","timestamp":1698747720,"dpid":"112"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xaa6e41ba11eae99e35c56cab24c16a6e5473e49d9be3f59901f15bc3ac5449d4","cid":"0x0f01551220da6ad5231abc31c3ae5edf69b5b52e339df6a453731adb2068c26eb2013d9707","timestamp":1698782484,"dpid":"113"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x4c693ef748d114e76316c3407a0d442f9d9d64f1a7ab9a9c318a2bd4a5b14a77","cid":"0x0f015512203203a4104a1e2478ed314ea918b7fa667bf04a0e84f2e57f0c396841df3983f1","timestamp":1698782652,"dpid":"114"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f015512204765f0ba19163ce27730a917da91b1fe448a8ab0722aceca648dcddb85ffccea","timestamp":1699355784,"dpid":"115"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x435786b5220ba10bf1d89ad4e910a40c82e51fd222951f51a60e94a4153569b2","cid":"0x0f01551220109f00c84c67068052e782043d08af74cab99a4ec56e442f041dca2de44c5a9e","timestamp":1699355412,"dpid":"115"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512202411f0188e2db2e46dd1a7d3cd736926228deeecfbf9397c8b76067191272434","timestamp":1699954776,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f0155122089afb0c6def46745efc1eaabf44254d8fc4ca943f53e4d82dcdd8a2cbded7981","timestamp":1699887960,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xcd1d7762db9d33838c3a1d642a2c0da8e08eb9f0d0a106ee03ee4a1b86e1abed","cid":"0x0f015512207c93e0ec1b4c56a3f08934f555791a62be8abd7e78456758d5b65c0cdd7a836f","timestamp":1699608000,"dpid":"116"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f0155122072f88be300d505c2c03197f114be1377b1c58b6f7554198eb17a6708fabd36a0","timestamp":1700053860,"dpid":"117"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x385559fdd2dd50b1ac5b64d55e9b36da309562de6489a9322f9acba396b3cd0a","cid":"0x0f015512208f0866a3d06693c7e1c7916894085864690643caaf7ab0055264f677e0bd667e","timestamp":1699954800,"dpid":"117"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220b66a4185023ca8ce27e10c8ff6752e78fb60d67ff4dfe3960f0758e6b593022e","timestamp":1702053972,"dpid":"118"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0xb2b8b7a1c9ab90c586db455c029d6c133be703088d8aa0c0f7f499f346c0d7f7","cid":"0x0f01551220f5fd32994c198aa5588ed19f93b74116fedd046951ad9797242eee0f12c5e2a7","timestamp":1699979532,"dpid":"118"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220e73795df1898e6aab1dc02dfa9ba1164871b98b359b74b72886cb08712e12f12","timestamp":1699984152,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0x27b7d20592fa753273345d377ca094f1662e210c4b34ee0cb2118e5396e0da71","cid":"0x0f01551220a895d90ce662de4cb21c88029bcbb7b6fe49e03fa8c35cce7869bd09de36aaea","timestamp":1699983900,"dpid":"119"},{"from":"0x924ba93eeff276c34f84697e4fff059a66b406b7","uuid":"0xc3fb14242b8038ff617d4e31b26ad0d2594e59c7e010b5b25bd1f5d1d1ab49de","cid":"0x0f01551220ae6d7d9e91b90af9c55aa7da36ceca6c0184a0ace57f24a6216c9ff452ec7339","timestamp":1699984440,"dpid":"120"},{"from":"0xec29aca1a8740b8c5e2e06ebb52290700b9a2c40","uuid":"0x0ae8abde65748fe1ced55a91190483d29ac72384593e0dee1eb4a36ebf9c31a0","cid":"0x0f01551220df36b21446f6dc9e3ba055f20d5a727a2c7230a1f93f21a5bfe0fd7326aa63c3","timestamp":1699984896,"dpid":"121"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x6221f9c34c95bdbaf8b3bd7685c13bf50ace7a160bf28d98aff645ec3fb8e6a0","cid":"0x0f0155122067995ecfc055df88a582b9a1e1f1dc2587c1a76dd5afa1dec281c47f76d5ed67","timestamp":1700005716,"dpid":"122"},{"from":"0x329097a82cdcfda29d844238d98a2cc99956d991","uuid":"0x2859eed83647d87114be9fb521ed5a51e7cdb924cf493d7e59e4b73d6bc8c346","cid":"0x0f01551220b4c0bcdb82ae88ecd2584487a63c8732e53b4f910e3cb4b2aec008d878c4579b","timestamp":1700006352,"dpid":"123"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f015512209993f6809c47dd8bc0443c4125ee92e525f4893acf2ca315c3cfc5413412f1ec","timestamp":1700046552,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f01551220e8df95ee93c95e2741fce2acef1a6ae153cf3b8474ddefa7a99ddc2c1eb13931","timestamp":1700046432,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x5b154de010445532baea627753fbf59bbcb0cec21dd169d48df4d02f2347c2c8","cid":"0x0f0155122042b4a34b09a4e8a6ce04608c7dffeae6bc062c6d26f7a333b07d4021a3b49732","timestamp":1700046408,"dpid":"124"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f0155122069111964df6b4928906d649e3ba2aa55569c9a2aeabd0616da9f51a44d673b9b","timestamp":1700058384,"dpid":"125"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0xca904151c538458dac86a94bbff17736d3e1a1fe7ccdbc05f9f3b04751520b11","cid":"0x0f01551220721aff2f3e00530a72d440a38bf7570b21ae0eb6cfd0ef4b8fb10875fac95c1f","timestamp":1700057772,"dpid":"125"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0xa3e130367fbebd19013318124d7d089536db6d5688e75c80772875e65b050ecc","cid":"0x0f015512203ecfb122b716f2bcbc7c4f1bff0489210d52e295bc7bd008a18c56f720de8ec7","timestamp":1700059584,"dpid":"126"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220210e8caba0e00af12d153389051d4ea50d138a2c2b454b06f1325f8f8bf4663e","timestamp":1708492476,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220a60380f7f954d667b0583b954fb72ffd94c59ad3417377fd8513e58e06903a5b","timestamp":1700063832,"dpid":"127"},{"from":"0x270f0c834a6cece776c3b522b6ac9f40cf57d347","uuid":"0xce3387c6d36a349b2f88c95392d7c62d37e0dbc1aafef3da3a158c89e07e6ce6","cid":"0x0f01551220306b0b6e24f14ab86367db5427347e39bc5d49ba718931a4efe0d807ab168e4b","timestamp":1700063400,"dpid":"127"},{"from":"0x711e9b9e8ad75cbd3ac024a8e4aeeff59afbae6c","uuid":"0x2cc8cd59679bd6e95683ed68b681add38c62e459406047f00a34e8ed0549d9bb","cid":"0x0f01551220e931c8247b57d7c261d00f509960dd637db0ae80bd542a17c34d615932dc6c63","timestamp":1700063832,"dpid":"128"},{"from":"0x13b71b614715db683d0985f15dfd9888c429317b","uuid":"0x782136c47d959413bd15ed0b9fd5fdecb7a06437751bd5dee317f87a09d019f1","cid":"0x0f01551220d36e5b943c41f27942bdac19364f79f95f76df926aba53cb01d150b552e4206f","timestamp":1700754096,"dpid":"129"},{"from":"0x73e4d86f1686671761c640556fe2e12a2a94c4ad","uuid":"0x0aba8b597b2877138a8785d7cb0a8ed230cb1a9b2f52517d6676cb832947d39a","cid":"0x0f0155122008b11e04f4fba10c61564ffc65ecca9d232a20dcdc001b38736c4c6aa0f3d3ea","timestamp":1701434724,"dpid":"130"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122000e10fa0b2965d2666d5a108fdc6bcb01af37c8bfd5a3afc9d6c1aa354f6098c","timestamp":1701703056,"dpid":"131"},{"from":"0x0c80554c182101b455a9c40ee47b0424875b775b","uuid":"0x568929296b86d11eb3125bcf9e8fd7d8aa08fe94d14026a929a566b0bba49103","cid":"0x0f0155122076eabcb47c97f19d71ab1bfcfce0987be7f5109b066569d8b4be421f38c14c46","timestamp":1701702708,"dpid":"131"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x1d8ff65463a48809e6c4a9da98d864dbb39a6e70f952a7850513d9f6343fd307","cid":"0x0f01551220b0be3482781d35a1648e29cbe848ec7d1d83c9028b4a7c27392dcbe2ba9492d1","timestamp":1701788316,"dpid":"132"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xeac3f6244306f4afa2e4d202e80909d4818a49dc0c6a14aec56d0a05b8195a64","cid":"0x0f01551220b8bd404569b21cd44f6ad5451edfc21336494145e4e8bde5c702acea494d4a05","timestamp":1701795900,"dpid":"133"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0xbf07d6a25bf38eec9a87eee75afc5a9b287c6c8473a9d8cf367d6e796323623a","cid":"0x0f01551220d4e5ef8956132f8481027b41c94323c6e76b2335f30c4f3f3fce66e77aca73c1","timestamp":1701872976,"dpid":"134"},{"from":"0xf44fb21f73df7b54c3305f1326df86ab073731d4","uuid":"0x7292bd468b30e40b3c40a39b4dffee06500286bb1a44c59070291a5f1ef56ca9","cid":"0x0f01551220e5e75323762d53eba66756b3cbdb6e9e45e9ff741d3894066d3b2857d46a660c","timestamp":1701875664,"dpid":"135"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220bcc013dc83401bf1bb314b0ca76780487057b4f29615a361451f08542ad90af4","timestamp":1708382904,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220b876e7933f617fc1fcdaf86797254fbefc4754b793def83164cb554c17996b07","timestamp":1702202688,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220089b9550d2cb5b107014545de8d459181cd7a152943c02c552af57b54a1d94e1","timestamp":1702145736,"dpid":"136"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xc51179db71e43248f452f531cefd89363af01483fc220b60e258b12aee3b8916","cid":"0x0f01551220fd36de1434faf71b4b1ab2a12342504678055ee2685af920de7fcc897315b382","timestamp":1702142316,"dpid":"136"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220dd652b98741db1d28d7b990e5ea1f3ba54112b3b8e6ec3bb01018d853279ba4c","timestamp":1702439796,"dpid":"137"},{"from":"0x955bcc4a744f7a63c064bcdcb41d3da32ab59fa2","uuid":"0xbfe898f12f7e4642529ec582871e10203422513655c372a197af1182deda42ee","cid":"0x0f01551220819b84a99e498da48505323e46852640da77d055cbc0036d657d6dc7c6bf5007","timestamp":1702430448,"dpid":"137"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220b7256ffc53ad70214a702e4b30bf3e8183a6a7f2d20a5e3f5439db49457dabbd","timestamp":1707153744,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x02408e532df71b508745a88cfa85bafb41938e5987b6ffc22a1eed8baff22d61","cid":"0x0f01551220995897dfa81254a1f3d870bc8a57c16e22b890c7958d414904de766516d9aa2c","timestamp":1702512600,"dpid":"138"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x7e008f972f815b02881457ea07f03b9a4eaa1b4a45b61fc22c925b7f50015a6b","cid":"0x0f01551220535462ad82251639194ea94cdf68db782fec335c8f2f73a13134457483286b6b","timestamp":1702512876,"dpid":"139"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f01551220a1386e567a5e1a73d9833d0d26782df8d0a34062456a2ee4e681b194f8c830e2","timestamp":1708801020,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xf2b993bc58538848a7b4010fc57a2b706df29d87d657894e17740206f9869b94","cid":"0x0f0155122039e36aab0d90bb2772154b2063089c213a012d86b3fb1ca77526b78ee7a8f630","timestamp":1702513068,"dpid":"140"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f0155122001aef818cb8368515664b83185a8e01797f2b0eefbc9f586a09ddca8a9ad13a8","timestamp":1708802436,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f0155122001aef818cb8368515664b83185a8e01797f2b0eefbc9f586a09ddca8a9ad13a8","timestamp":1708802436,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xc81e89ec4a4e83af46d5186dca0a7b48ad4267672c2ae3b7c6538796a5de8d65","cid":"0x0f01551220aa4db6c4cf880f0674a5edd4835dba05e0bac117adfe566361b5ac1765487706","timestamp":1702513164,"dpid":"141"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f0155122092cb302ebcfcd967ff995c7a7a461e98eed05f552121139b8633a4ae1dba90ef","timestamp":1708802160,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x8ba6e8c36ab082b1ee5a488b8d81b79399728ea90139fd4992b5a2f04426c77c","cid":"0x0f015512206b5f100c2ea07ae1083a6fd93e172efb81a0d4ab2b43d6138f3fafc6288dbeec","timestamp":1702513344,"dpid":"142"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220faed6c16cef7c05f2b8a6f37490478bf25856cc32f52d050960528a2197baaf7","timestamp":1708802052,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x2cb917211446560d557edf898899b2b3981e855f27b398fcc7395617adcb0ec6","cid":"0x0f01551220697369ba9d9da8fa571a5bcc53986e020252a7d6d64f3661c1ba9590e7cba65b","timestamp":1702513392,"dpid":"143"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512203b0fb331f678204e99de49e0debd36db0a1e44815d6ef39fd3f306c93d18f874","timestamp":1708801908,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x07e2e1c62fe9a0296a05f49c3922c5a3e9fc1e0495f5f3e66d052b9051f7ea2c","cid":"0x0f015512208e3570f0b0dfa9a93d17fe0ef6a82fc2b72b29e59c2fc12711a5c9f51a0de453","timestamp":1702513452,"dpid":"144"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f01551220da64c412f894d56208331d2ce8a6f11e29888b15d4d65b2b5a52ec81193a6c13","timestamp":1708801680,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x82c26466917cb0606db3232e26bfe50532bc153fb4a0e8f7fce12b0f4a83fc7e","cid":"0x0f0155122021a6c2afd04b4770042982b0c74418082374380741cc3802fa85cc594f56569e","timestamp":1702513524,"dpid":"145"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0xac8e69eeea26aae8b657e3466fbec53d2f5afe65fbbf0d6d1c6f656b3f390a74","cid":"0x0f0155122083dc3d796d1391aa931301a744d65283969f452d5289cb5c71c548c6edb55859","timestamp":1702513584,"dpid":"146"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f01551220b7a80cd9a6057e62834925024ab802795706e343be5c1d304135f8f68a18719b","timestamp":1708801236,"dpid":"147"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f01551220b7a80cd9a6057e62834925024ab802795706e343be5c1d304135f8f68a18719b","timestamp":1708801212,"dpid":"147"},{"from":"0xbaf4a58783150abaaec703e43e6cca151d4ff475","uuid":"0x57aedd80889d1c21e005654d59512aa18a05bb2e8b57a723d2bb370791067057","cid":"0x0f015512200f50a0f502a5b405c40fac0fc9cf3765eb63da20dc42be1b02eaf83b375f599c","timestamp":1702513620,"dpid":"147"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220904c16b294634d220959d0e3d9d1f443e929a53604f6104fc53e050b44cc53e1","timestamp":1702907160,"dpid":"148"},{"from":"0x110b07a74bc3df928c5c22abea8d62f716775ca7","uuid":"0x05f06b645af3e691a30c2d3c3a8091f4f948a3d9abd97a574a7395b361f09794","cid":"0x0f01551220267c4eb8eb592d8d167f1b55f89bc96f7660fe3d8e2ca29ecc307a817474cb79","timestamp":1702559448,"dpid":"148"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f015512209f4f928fe1a7e8fb872c6eb949502bbd6a982bf4ffaec5e3f2f8fac9aec82651","timestamp":1709143824,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122046b8c587821d9b1918d41b9afead51bcfbcae59b6c75ffa4f55eee5139514542","timestamp":1707406116,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f0155122048ddb39fb53041b0ef9039b376a406e6b263cda0eeb58815f0976171fecd4f4b","timestamp":1703072388,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220de5bfdaf769cd2d703f8eacdc5de1d982901f05fe6258df98f1599d0474d967e","timestamp":1703003868,"dpid":"149"},{"from":"0x0f81a4d0553f09767027b4c15d0c374b939cd5f1","uuid":"0x30e50caed18dd0291990adf1a8ace1d7a3cec6228319cf79a3e105f8496f6c9e","cid":"0x0f01551220c21697f0031be23b923a7db26af93c6fb3fc8797252cb626b5e17cfe2d1a14f2","timestamp":1703003448,"dpid":"149"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x85d5f216ff2be7742bc640646b4d9b9836a20a852ff25ce715e095b3e1f4255e","cid":"0x0f01551220bb03814b82b0fcae80ab12471446407608899e0933665cea73c14f391d445b90","timestamp":1703205816,"dpid":"150"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x2add80498110745a1115061b43c7067c92018c667f6e0da0bf0fee267241a3d2","cid":"0x0f01551220502682b3241166c26f25cdec935653ffd85b4024ad5316dabba71f689d623adf","timestamp":1703212224,"dpid":"151"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f015512208a7070a9a1120216956a40a42e4607388135ecfd1f65d4bf5d0339d61f6acdc2","timestamp":1706832732,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220f5a4e879a08793b02f7a9f07c2d136053b9d2c348901958528b607cca8ea3298","timestamp":1705091496,"dpid":"152"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0x447584e5f15e78e46978ae4cbe81dd68f9265f9e55eaf76cfea973f91589af78","cid":"0x0f01551220a8c690fbad722773e549f293cd3d73e400d157213fdf93bc10f627858ec5be6e","timestamp":1705091376,"dpid":"152"},{"from":"0xe493a10f41a846b67cb12a91cac4b2ae22440921","uuid":"0xfbae316e2b0148b3f13c11052503b00fe1cac5672875abdf09092a65aaee97fe","cid":"0x0f01551220d1ef0ec2445118d9a6b70ee7b056eedcf7b24702cf3fd5adcad98f6be5b8224b","timestamp":1705491780,"dpid":"153"},{"from":"0xe33c428cbd313983a5432a3d255025e456a4daf5","uuid":"0x276da67ec23c8727b5e9951e63a5e1cd507720d3b1194fb3e4147120767f3e06","cid":"0x0f015512207905922fd01255f1a077a628f6f4c2525f6be69609e18f9419611968ad82258a","timestamp":1705579488,"dpid":"154"},{"from":"0x93af2e3057f7a1deec2bedab92014372529917b2","uuid":"0x3fcfba6cbd10882d546c675a77f2a2ecb3a618e6fa633358ff8377a28540a84f","cid":"0x0f01551220908567a0df7c37399730344ebbc1e60d3757c0a45bdd5b41d10052ca92fd31c8","timestamp":1706550924,"dpid":"155"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f015512204cc5d27a1115aae826e242ec8cc1b6e6931bdb470070d83b2ff73aa9d7707652","timestamp":1706737632,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0xd0bbd699475062032a4ce0864f9878373f020590474e9596835f1139e5229318","cid":"0x0f0155122027a51c66a2c693b30f6606794ded695306784e5e727d6f5f049fcb80a6adff72","timestamp":1706735148,"dpid":"156"},{"from":"0x7ec8afdde28349671f2ea8b57fad53e200f301ff","uuid":"0x47f74c470c50ae5ddfe11da2f3b585d05ffbdc4dfb0c01547274676c4ef60e2c","cid":"0x0f01551220a8161f63c033a70021c6e60e471786dd1b45788ad392a2409ebddce3256b68a9","timestamp":1706738172,"dpid":"157"},{"from":"0xf8c20ef67cddd6959e813def086766bffe70b24c","uuid":"0xb04be273bc7f354da4585104aae0fbf4c548fc681ab9d40cba3d5d404e11aa45","cid":"0x0f01551220cc325f22df3238eaecad77db3d2ed028a2c57fe28c393e08b0c06e468a734525","timestamp":1706834520,"dpid":"158"},{"from":"0x020e8c4ea0fc434257e86c51b69da2d62106879a","uuid":"0xf6666111a06e00eaa5a4912162684ae3b1852b3387d3bacc243284e79562e6a0","cid":"0x0f01551220abf9ce0479fd7b8603c452275c252cc5d4060c5b7b88080a195c124d4345d47c","timestamp":1707473772,"dpid":"159"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ee7c02a42066b4b2b99857d89fb6f59baa8a2c40bd9aa602ff2f42876829ea65","timestamp":1707646572,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220ba3af9f1c4d0b07d0063a308d8c67115088b496ed1732c03bb56ba1a4f35141b","timestamp":1707645552,"dpid":"160"},{"from":"0x903082d2f955a07b4e3e4f0801fc931d47bbe124","uuid":"0xb564de7454ba7c01290355988adc942a7980d8fc6dc482a902f387574a933696","cid":"0x0f01551220a99be0a78266663897b0f223cb57d746621c5360fe83d0d2b653c46542a04aa0","timestamp":1707644916,"dpid":"160"},{"from":"0xb9a4b7f5a15dcaa88d8b25704925543f006fd0aa","uuid":"0xa763c3e4720c8ad2bf11a5e2b5354b0134cd7dd76c62b8dc386f8f13b0183a64","cid":"0x0f015512200b6e4e0ccea7a56cacbe0b94ff6de273aa2d2ecc4f1b6d53186cbb6fac0f2489","timestamp":1707848244,"dpid":"161"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xd6bfbb7ec4e1a9cd43d3066f51f3223235141057f881133b5abb1a475afb8b14","cid":"0x0f015512208eb0adbec6b4ab840a3c72e96512319c3f93b14512eca422a68de3b44e044258","timestamp":1707967356,"dpid":"162"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x045272643ba9f14c8f690ba8fd6137e85385651ce9922b41387574fabfdb221f","cid":"0x0f01551220bcef790971ef1cbfbf71e524160f6b640b9bd6aeb2eb3bb20adc49c6a64da589","timestamp":1707967740,"dpid":"163"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f01551220bf482a18ecf16d2cc718d5f8e6f8cbe0b8a4358e507d98f28868ce3a156a65b8","timestamp":1708514124,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f015512202f01576894f833ce4122cb232a03cd4ab0cc6df46d2569aec503e790026ad2f2","timestamp":1708453920,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xd65dbc9ec9701ba8344ae8db967a07a67bbcaeef101c1b1b309b0baf30b4dc6d","cid":"0x0f015512206de947161fda68b91d9baf0410906f455aa42d6c9590ba0541d02cd562920cd2","timestamp":1708094712,"dpid":"164"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0x99f716e51bcde24db0d5447cca159e8dd5623238b7fa5cb8568755caf6785770","cid":"0x0f0155122055d64bbe9f9b67bbe3ebfbe0e9dc35fac8a641daea35a613d026df1c469ce4b8","timestamp":1708109700,"dpid":"165"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xa4a574c98253571adc3d841f92768e82c7fe15d9a3afac0418bb67abd549067d","cid":"0x0f0155122025ada02539baf756f626886e566f10397725e1ccc7fa1b5ce9f12ffde0d68e1b","timestamp":1708372176,"dpid":"166"},{"from":"0x0aeba31a80842819ed4f74e3cabbe95d88bbf213","uuid":"0xaf059e2165fd8033b5bb3586495a1026afca64eb20767abda7fb56c0108bcf18","cid":"0x0f01551220c4d3af752b910b80348aebad8355d1bb272ec8ddfc84e151b1232e4ef9d305e8","timestamp":1708458984,"dpid":"167"},{"from":"0xb477ec716cd8676f4e2041f16072c263475c5a45","uuid":"0x9335eaa6ebcc2adb32eb5b535c1edc46a985153fc082206e398af65304af8112","cid":"0x0f015512205c3a7de0500439a66767d9caa5ab6a3f5cae78a249a1fe30950fa998a395e011","timestamp":1708690584,"dpid":"168"},{"from":"0xb477ec716cd8676f4e2041f16072c263475c5a45","uuid":"0x9335eaa6ebcc2adb32eb5b535c1edc46a985153fc082206e398af65304af8112","cid":"0x0f01551220b348bd48e570588a5a3d366932728247e4d75363506ca74d55eff4c6ae65ec60","timestamp":1708493796,"dpid":"168"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x6c5ee35c8e97e0994af70fb433e3063cef696c39f444c450a8588e5c8660dc1d","cid":"0x0f0155122066a67bf9aa1364c1ce39d5f2546bdc86f6fa090c6fd048b75303c5d2d1d1527a","timestamp":1708495980,"dpid":"169"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0x41792e13198ad1f824be3e6b4ce73cb3830aeee46dc447f7f140a568b4fc3d2d","cid":"0x0f015512207802b158c58ead95c18cb6d16f33297b2f04e217fd7e02d131c0ef52d5defe9b","timestamp":1708501884,"dpid":"170"},{"from":"0x371e269bff1aaa342b43b74cf1ad9789baf183f7","uuid":"0x64777d9a15b2bce04a08d90fe28fbb18072ffbc0f0ae68c9dca7939bac4725eb","cid":"0x0f01551220330272c2fe78f9cf812f3c027a5ff18a9853c5a307706b2dc23f690307c57ac2","timestamp":1708516896,"dpid":"171"},{"from":"0xbc4f75a4579c55b3b347c316159e03ad9a233346","uuid":"0xddec1f7ee5586bf3bea2196614fdd72352aa0a9895e20a6723e2bf9c583d3ca5","cid":"0x0f01551220446912bce35832bd52addcb9e3f3a604d69b9e977de00ae775e2f747e8174e4c","timestamp":1708523184,"dpid":"172"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708532064,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531992,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531620,"dpid":"173"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x8f7d4f1377b894f6088a646b93019da827d54b1eb9d57c959cfdbb921eec2fa4","cid":"0x0f015512209add5954355af860efc33990da6e1ddad50f133a4223451fcb8899151cc4803e","timestamp":1708531344,"dpid":"173"},{"from":"0x52718a489d9bca83031b388ff3b8d0390720970d","uuid":"0xf5cdc6c43ec7085f5bb174d1588c5e2682e4654a7e507a1548ac9d6d00aa6116","cid":"0x0f015512206e0cec38abe3a2f02f0cc72c7d9c2c25449360cbcbf00e3f40aa28c1597fc378","timestamp":1708602732,"dpid":"174"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f015512206f752aa76cf3f0d477ae37e723c10702bf111adbcc6d1b523777d316bea8c041","timestamp":1708890600,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220e3305fb8c50c76e45061d4005e5c741693e3e5d092ec53d7a563d3056474b393","timestamp":1708729500,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f0155122049cc7e3e386bf0f35bec026b4db15a1d93e624b7b60c0847f134c300371c062a","timestamp":1708674912,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220ecfa2880c4795c7b4c44e7561090bb072128924e6241c46610d16839b632b2f0","timestamp":1708672332,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f0155122004f75f6ef073ed6ffeb88d21c06a48ef46a47e685bcc163f8c91da2226171003","timestamp":1708653516,"dpid":"175"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x3b0dac5e7a2604bf769f9bff18209139d09d716390be4674de2d43ac67babd81","cid":"0x0f01551220cd73c6c245692bbcdcbe1a3a7b98f4df3eec04a6f33be8855d2f90c2277260ab","timestamp":1708619376,"dpid":"175"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xec97340e37b5aeed1ce82cfee79fd04cf4774444efdfede1662ec5abe60c2c59","cid":"0x0f01551220291475a25f74405eeb97657e62801642605154672a84537fa207ec02a371c8cc","timestamp":1708695612,"dpid":"176"},{"from":"0x42d4ff8298dfcdcbb70823b146d0a1a3af128a45","uuid":"0xec97340e37b5aeed1ce82cfee79fd04cf4774444efdfede1662ec5abe60c2c59","cid":"0x0f0155122076bfab5e6dbcae07a355a2f83e770166db53e68a979e49327c20c796650d314a","timestamp":1708695348,"dpid":"176"},{"from":"0xdaf8752ddcce8a6b709aa271e7efc60f75cddf64","uuid":"0xf349746f7a64efce843b8195c734585c060586d9a2123af35559baae249d2fe9","cid":"0x0f01551220eda2fa10397e39bb5943d272a160b3b3be03d3b9ab79e5b8bd2a58b83fbd3c82","timestamp":1708882260,"dpid":"177"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f01551220081201d4fee37bba68edb453986fab0bbbdb82a0d42ae3f297b9f579d884db73","timestamp":1708909188,"dpid":"178"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f0155122020be9b62d44c25b28e32970cf16a2da8f66b541da87b83b3d6c471e94dad80b5","timestamp":1708900680,"dpid":"178"},{"from":"0x16040958fe4bf8e90428f8368f579b717cdcbce3","uuid":"0xf1d0a644aa7d0f3ac1056ff687e2da61c892fa0a314411bf9a87637919d0d9ab","cid":"0x0f015512202dad34a6366ce3f539902585140974e3ce667c00ea51ae8ca0e1e1765b565976","timestamp":1708900272,"dpid":"178"},{"from":"0x1fd49a9f25b2fdac08e54526b6524bae9464f3e1","uuid":"0x60d6758f5d408af09e9314bf29c01c24a73cc48ec6a2af832087c8c506ababf4","cid":"0x0f015512208a651930c7c53795244ed7dff9c534289d0f33a512db1a3e940218602f775e2e","timestamp":1708930572,"dpid":"179"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220a7cc3fec41def1c5512744ff7bc70c227bc2b054b170598a5f0d02756aeb035b","timestamp":1708974048,"dpid":"180"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220ca95456e97df3e9590ddad1d8bcf88ffe343ca85a823c024cfd8eb59fe3a64e3","timestamp":1708966848,"dpid":"180"},{"from":"0x08fdb27e9872c19b4225f8c81fbbc2a3c60f76d6","uuid":"0xe433de333990459b27201a9d20c2b1001f092a2175899519eba1855213cd6b81","cid":"0x0f01551220f86e9ecfb21912401c4d4e964449c294e43d9752c0240eff0415aad884c2a9d3","timestamp":1708965960,"dpid":"180"},{"from":"0x178b9faaef2dc2c180bb95d549fbb9dec06cb86d","uuid":"0x9d7c810dff316fbb2d2da5bb5a9139fef91d70e43a5056c5e154bbd71c0738e7","cid":"0x0f0155122090cadc5850bbc014a28a16ce4dff901e8451168568f2083791ddcab4754c8329","timestamp":1709032560,"dpid":"181"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x0ae504d6724d75d7032135addb47ae1220eecc9eca1c181e11628bb4f901f7a8","cid":"0x0f015512206903ac869dfd26d9e42a1bd30a681bac85bd39e4426997d00348662389088d4c","timestamp":1709070600,"dpid":"182"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x0ae504d6724d75d7032135addb47ae1220eecc9eca1c181e11628bb4f901f7a8","cid":"0x0f015512206903ac869dfd26d9e42a1bd30a681bac85bd39e4426997d00348662389088d4c","timestamp":1709070444,"dpid":"182"},{"from":"0x94bebc9d10b8dda3fe5f408a5c9a24c6821b0a58","uuid":"0x24320c21bc0ac47c01d3f3e97a113f6dd6d931f0699b0f90970be593399bc5df","cid":"0x0f01551220e5c7101a8a23bae1b6fb1e01e4ab9975c1e4ab50d8fdec8e018ae0c4457cf5aa","timestamp":1709074644,"dpid":"183"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x9ee6dd57f08df2190634780e4d856efe5dca0c01b21057b74cea299a24c78bfd","cid":"0x0f01551220bc79bef3ee17a2798701f6e4c99da6f3ee99d29dff6a87b86808e5e36a839e74","timestamp":1709709132,"dpid":"184"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0xbb08bbfa1b4edaacbf70d6ff44de20ac20eeb7452091587895536110ec2aef2b","cid":"0x0f01551220219eb8317b86b66c712678383b090eac4f3335a82737dff97f874bc6b8d48ee8","timestamp":1709710296,"dpid":"185"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x52250f68236c976383be3f0259cbcdc6c7d4202574c1d1dfe592307b811c398d","cid":"0x0f01551220996605014b7cd7a875bc0cb1503bae7fd352c16b42a301cf96f7e936e47f317c","timestamp":1709713596,"dpid":"186"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x208fb27adb4d96ad59815ffb7c1c37b58ef9631ca67fa84d25f3d30a2dc494bb","cid":"0x0f015512208c104b7ca3b5dc928ccedccc25f69821445811641a95c06e523c35f69177f625","timestamp":1709713968,"dpid":"187"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x2fc98ebef59059b3cbbbede1a1817549acad35e072c1e512d7bea8f98eae51d3","cid":"0x0f01551220a2f8576e48a38c218435cec2b59024dc555c1064afbb198b9d58f7ef88ccda0a","timestamp":1709717856,"dpid":"188"},{"from":"0xe713c665ac962155ce2230b67034fbbc68aa001e","uuid":"0x69a7caacdba86cccc26cce6f67b17645a73b27ef674fbe38deaee3bf0d9686d7","cid":"0x0f015512203db76d004da7a508ac8d9026f624712c166d315b5beb0743495e9052a258f814","timestamp":1709718156,"dpid":"189"},{"from":"0x639c426be8f852b1b62bfd7c3b5c2eb54e7893f5","uuid":"0xb1e3fad03d6e4f45349425a4a4e6bff4cd04c3a40e4d825b9e859e8c5e3f9cb0","cid":"0x0f015512206bb350df536b087ac27cd2039938e7772de349903b742ad36912a3fc386983d5","timestamp":1710044316,"dpid":"190"}] \ No newline at end of file diff --git a/desci-server/src/controllers/nodes/contributions/create.ts b/desci-server/src/controllers/nodes/contributions/create.ts index d4d5ccb08..bcdb11c60 100644 --- a/desci-server/src/controllers/nodes/contributions/create.ts +++ b/desci-server/src/controllers/nodes/contributions/create.ts @@ -78,9 +78,9 @@ export const addContributor = async (req: AddContributorRequest, res: Response { - if (!contribution.email) return null; + if (!contribution.email && !contribution.userId) return null; + let email = contribution.email; + if (!email) { + // Extract the email from the userId + const user = await prisma.user.findUnique({ where: { id: contribution.userId } }); + if (!user) return null; + email = user.email; + } const privShare = await prisma.privateShare.findFirst({ - where: { nodeUUID: node.uuid, memo: PRIV_SHARE_CONTRIBUTION_PREFIX + contribution.email }, + where: { nodeUUID: node.uuid, memo: PRIV_SHARE_CONTRIBUTION_PREFIX + email }, }); if (privShare) return privShare.shareId; @@ -232,8 +239,8 @@ class ContributorService { const newPrivShare = await prisma.privateShare.create({ data: { nodeUUID: node.uuid, - shareId: shareCode as unknown as string, - memo: PRIV_SHARE_CONTRIBUTION_PREFIX + contribution.email, + shareId: shareCode() as string, + memo: PRIV_SHARE_CONTRIBUTION_PREFIX + email, }, }); From 8521620f14781c682a7809c8d5c63d9390da2345 Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 21:14:05 +0700 Subject: [PATCH 014/141] fix revoking share codes for contributors linked with nodes profile --- desci-server/src/services/Contributors.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 02ad9f9c6..dc2af832b 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -248,9 +248,16 @@ class ContributorService { } async removePrivShareCodeForContribution(contribution: NodeContribution, node: Node): Promise { - if (!contribution.email) return; + if (!contribution.email && !contribution.userId) return; + let email = contribution.email; + if (!email) { + // Extract the email from the userId + const user = await prisma.user.findUnique({ where: { id: contribution.userId } }); + if (!user) return; + email = user.email; + } const privShare = await prisma.privateShare.findFirst({ - where: { nodeUUID: node.uuid, memo: PRIV_SHARE_CONTRIBUTION_PREFIX + contribution.email }, + where: { nodeUUID: node.uuid, memo: PRIV_SHARE_CONTRIBUTION_PREFIX + email }, }); if (privShare) await prisma.privateShare.delete({ where: { id: privShare.id } }); From 54b7460c89632b3333f18682a8572d80fea59717 Mon Sep 17 00:00:00 2001 From: kadami Date: Tue, 26 Mar 2024 21:15:06 +0700 Subject: [PATCH 015/141] fix get share code for contribution helper --- desci-server/src/services/Contributors.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index dc2af832b..3c048fef1 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -264,9 +264,16 @@ class ContributorService { } async getShareCodeForContribution(contribution: NodeContribution, node: Node): Promise { - if (!contribution.email) return null; + if (!contribution.email && !contribution.userId) return null; + let email = contribution.email; + if (!email) { + // Extract the email from the userId + const user = await prisma.user.findUnique({ where: { id: contribution.userId } }); + if (!user) return null; + email = user.email; + } const privShare = await prisma.privateShare.findFirst({ - where: { nodeUUID: node.uuid, memo: PRIV_SHARE_CONTRIBUTION_PREFIX + contribution.email }, + where: { nodeUUID: node.uuid, memo: PRIV_SHARE_CONTRIBUTION_PREFIX + email }, }); if (privShare) return privShare.shareId; From 635992715b1a9dc64dcfcad4b5d0b7caf98d8144 Mon Sep 17 00:00:00 2001 From: kadami Date: Wed, 27 Mar 2024 05:00:48 +0700 Subject: [PATCH 016/141] update contributor invite template to include correct env url, non hardcoded --- desci-server/src/templates/emails/ContributorInvite.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/desci-server/src/templates/emails/ContributorInvite.tsx b/desci-server/src/templates/emails/ContributorInvite.tsx index f6cd442d1..680b54a4d 100644 --- a/desci-server/src/templates/emails/ContributorInvite.tsx +++ b/desci-server/src/templates/emails/ContributorInvite.tsx @@ -28,6 +28,8 @@ const NEW_USER_TEXT = `Sign up on Desci Nodes to confirm your contribution to en const EXISTING_USER_TEXT = `Confirm your contribution to ensure you're credited for your work.`; +const DAPP_URL = process.env.DAPP_URL || 'http://localhost:3000'; + export const ContributorInvite = ({ inviter, nodeUuid, @@ -36,8 +38,8 @@ export const ContributorInvite = ({ newUser, }: ContributorInviteEmailProps) => { if (nodeUuid?.endsWith('.') || nodeUuid?.endsWith('=')) nodeUuid = nodeUuid.slice(0, -1); - const privShareUrl = `https://nodes.desci.com/node/${nodeUuid}?shareId=${privShareCode}`; - const contributorUrl = `https://nodes.desci.com/node/${nodeUuid}/contributors/${contributorId}?shareId=${privShareCode}`; + const privShareUrl = `${DAPP_URL}/node/${nodeUuid}?shareId=${privShareCode}`; + const contributorUrl = `${DAPP_URL}/node/${nodeUuid}/contributors/${contributorId}?shareId=${privShareCode}`; return ( From 0bf39b33b147573dc8bfcf4a9949c01fb15680bd Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 25 Mar 2024 14:04:18 +0100 Subject: [PATCH 017/141] contracts: remove unused hardhat artifacts --- .../.openzeppelin/old/sepoliaDev-dpid.json | 167 -------------- .../old/sepoliaDev-research-object.json | 211 ------------------ .../.openzeppelin/old/sepoliaProd-dpid.json | 167 -------------- .../old/sepoliaProd-research-object.json | 211 ------------------ .../working/sepoliaDev-dpid.json | 167 -------------- .../working/sepoliaDev-research-object.json | 211 ------------------ .../working/sepoliaProd-dpid.json | 167 -------------- .../working/sepoliaProd-research-object.json | 211 ------------------ desci-contracts/package.json | 2 +- 9 files changed, 1 insertion(+), 1513 deletions(-) delete mode 100644 desci-contracts/.openzeppelin/old/sepoliaDev-dpid.json delete mode 100644 desci-contracts/.openzeppelin/old/sepoliaDev-research-object.json delete mode 100644 desci-contracts/.openzeppelin/old/sepoliaProd-dpid.json delete mode 100644 desci-contracts/.openzeppelin/old/sepoliaProd-research-object.json delete mode 100644 desci-contracts/.openzeppelin/working/sepoliaDev-dpid.json delete mode 100644 desci-contracts/.openzeppelin/working/sepoliaDev-research-object.json delete mode 100644 desci-contracts/.openzeppelin/working/sepoliaProd-dpid.json delete mode 100644 desci-contracts/.openzeppelin/working/sepoliaProd-research-object.json diff --git a/desci-contracts/.openzeppelin/old/sepoliaDev-dpid.json b/desci-contracts/.openzeppelin/old/sepoliaDev-dpid.json deleted file mode 100644 index fc596196d..000000000 --- a/desci-contracts/.openzeppelin/old/sepoliaDev-dpid.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x6FAD4bF532EbaA56Ecf5CFd0E59617F5Fe173aa2", - "txHash": "0x5b1e70832abbcd6f11d19f027119d0da3deb062f82deff25b63d100dd1990056" - }, - "proxies": [ - { - "address": "0xb9F1b29d9435Ff4772F57067C927367B337B0456", - "txHash": "0xcbf8a479adaab2755220d93e8cddcf61e7ec0d9eb6e024e4f064851a8a7ef3a8", - "kind": "transparent" - } - ], - "impls": { - "7d36eb1fb5509724c9c86e5567a213c3dc9d83c3cbe4f6b633ad300b6ccc8728": { - "address": "0xC9bd4f323E037f5560Bb96f90c4Dc170bdD6E550", - "txHash": "0xd1081c86a9500a81fa498e3838ae05691b6185686e09c3de7133a83f262c704b", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "organizations", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(Organization)4485_storage)", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:36" - }, - { - "label": "_fee", - "offset": 0, - "slot": "102", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:39" - }, - { - "label": "_orgFee", - "offset": 0, - "slot": "103", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:42" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(Organization)4485_storage)": { - "label": "mapping(bytes32 => struct DpidRegistry.Organization)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Organization)4485_storage": { - "label": "struct DpidRegistry.Organization", - "members": [ - { - "label": "prefix", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "registrant", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "tokenGate", - "type": "t_array(t_address)dyn_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "entries", - "type": "t_mapping(t_uint256,t_uint256)", - "offset": 0, - "slot": "3" - }, - { - "label": "count", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/old/sepoliaDev-research-object.json b/desci-contracts/.openzeppelin/old/sepoliaDev-research-object.json deleted file mode 100644 index a2ff20149..000000000 --- a/desci-contracts/.openzeppelin/old/sepoliaDev-research-object.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x47104e854aFCd127D38C4912D08b56b8Ab725007", - "txHash": "0xfe2ea6623b8c198e374336daad878da5cc46d0c0fab93fbce4623a4b1e2da531" - }, - "proxies": [ - { - "address": "0x41198b022A912A0133cF8CefcE114F1af65daFAB", - "txHash": "0x8b103c7879308f05a845c1388ca511588eb90b09573fe2e2b81c0375e4ea6db9", - "kind": "transparent" - } - ], - "impls": { - "a5c4d1541a917c4a437ff6778252fe52280f098d0ae95696d86f7642a6b8d3dc": { - "address": "0x506625f6269Ecc8ec31E4246eecF09C16cC49555", - "txHash": "0xbf9ef9650c46b825c3f76e19b1df47b609777b7c0dc5656a444931826e679490", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_name", - "offset": 0, - "slot": "101", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" - }, - { - "label": "_symbol", - "offset": 0, - "slot": "102", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" - }, - { - "label": "_owners", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" - }, - { - "label": "_balances", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" - }, - { - "label": "_tokenApprovals", - "offset": 0, - "slot": "105", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" - }, - { - "label": "_operatorApprovals", - "offset": 0, - "slot": "106", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" - }, - { - "label": "__gap", - "offset": 0, - "slot": "107", - "type": "t_array(t_uint256)44_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:465" - }, - { - "label": "_metadata", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_uint256,t_bytes_storage)", - "contract": "VersionedERC721V2", - "src": "contracts/VersionedERC721V2.sol:8" - }, - { - "label": "_owner", - "offset": 0, - "slot": "152", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "153", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "_uri", - "offset": 0, - "slot": "202", - "type": "t_string_storage", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:9" - }, - { - "label": "_dpidRegistry", - "offset": 0, - "slot": "203", - "type": "t_address", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:11" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]", - "numberOfBytes": "1408" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_address)": { - "label": "mapping(uint256 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/old/sepoliaProd-dpid.json b/desci-contracts/.openzeppelin/old/sepoliaProd-dpid.json deleted file mode 100644 index 921b11fda..000000000 --- a/desci-contracts/.openzeppelin/old/sepoliaProd-dpid.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x5C54AB11DE0d7710e8936688f62951e3172977A2", - "txHash": "0x642fea22f9ac076abcb5e76be62bc9af7c3ee9d454c6664272887990f9081672" - }, - "proxies": [ - { - "address": "0x181ef1CF56BA0D9f03F4212D1B4B3A2A861dBAfb", - "txHash": "0x97570316c4e293b253afa5ddf2fb20eda2a007083a84e43090354117e5993693", - "kind": "transparent" - } - ], - "impls": { - "7d36eb1fb5509724c9c86e5567a213c3dc9d83c3cbe4f6b633ad300b6ccc8728": { - "address": "0x071E15A8A08294a057Bc71131E68dA0FFaC437d7", - "txHash": "0xefdcf8e7ed68a58ded1ebe3d7014499f206b2d4fc3571b210861ae4046dff6ee", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "organizations", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(Organization)4485_storage)", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:36" - }, - { - "label": "_fee", - "offset": 0, - "slot": "102", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:39" - }, - { - "label": "_orgFee", - "offset": 0, - "slot": "103", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:42" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(Organization)4485_storage)": { - "label": "mapping(bytes32 => struct DpidRegistry.Organization)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Organization)4485_storage": { - "label": "struct DpidRegistry.Organization", - "members": [ - { - "label": "prefix", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "registrant", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "tokenGate", - "type": "t_array(t_address)dyn_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "entries", - "type": "t_mapping(t_uint256,t_uint256)", - "offset": 0, - "slot": "3" - }, - { - "label": "count", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/old/sepoliaProd-research-object.json b/desci-contracts/.openzeppelin/old/sepoliaProd-research-object.json deleted file mode 100644 index 16f0f8f99..000000000 --- a/desci-contracts/.openzeppelin/old/sepoliaProd-research-object.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x4a5a67E09D05Fa3FcBF72B9f528f90c3F5667139", - "txHash": "0xa6ce17f969f3f24668e19af439fae9bea133f4975f2964496df689a1aec9525b" - }, - "proxies": [ - { - "address": "0x3D7BEaC4925a59B7cce2f6Ca6D2b50C1E4822759", - "txHash": "0x1bfa3a99bbd2adec6ce069be34be9d3352e87c91baf24ffe25503a620db1d488", - "kind": "transparent" - } - ], - "impls": { - "a5c4d1541a917c4a437ff6778252fe52280f098d0ae95696d86f7642a6b8d3dc": { - "address": "0x53A27950B3C2E618ff8E2b0F7e15E7979572e6C7", - "txHash": "0x4b59797ecc618688a812ad3511b7ab3a24394ff19a28b32f4a5e39774c1e1976", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_name", - "offset": 0, - "slot": "101", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" - }, - { - "label": "_symbol", - "offset": 0, - "slot": "102", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" - }, - { - "label": "_owners", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" - }, - { - "label": "_balances", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" - }, - { - "label": "_tokenApprovals", - "offset": 0, - "slot": "105", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" - }, - { - "label": "_operatorApprovals", - "offset": 0, - "slot": "106", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" - }, - { - "label": "__gap", - "offset": 0, - "slot": "107", - "type": "t_array(t_uint256)44_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:465" - }, - { - "label": "_metadata", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_uint256,t_bytes_storage)", - "contract": "VersionedERC721V2", - "src": "contracts/VersionedERC721V2.sol:8" - }, - { - "label": "_owner", - "offset": 0, - "slot": "152", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "153", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "_uri", - "offset": 0, - "slot": "202", - "type": "t_string_storage", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:9" - }, - { - "label": "_dpidRegistry", - "offset": 0, - "slot": "203", - "type": "t_address", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:11" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]", - "numberOfBytes": "1408" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_address)": { - "label": "mapping(uint256 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/working/sepoliaDev-dpid.json b/desci-contracts/.openzeppelin/working/sepoliaDev-dpid.json deleted file mode 100644 index 47e44ec97..000000000 --- a/desci-contracts/.openzeppelin/working/sepoliaDev-dpid.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x41e57D45BeC7b7D0c71C3C905C9c446Cf5183908", - "txHash": "0xcc1c5a5182e8474f641b83f216c9af8bcc1a009d7242dc111b84b95bcf1d4007" - }, - "proxies": [ - { - "address": "0xC898Bf5BCe3181b4e99c819591878fE82A00DB27", - "txHash": "0x7604d5cdb7fb05b0f3bc1de552c73246d7cc3492952b85fdd4370096e90fcee8", - "kind": "transparent" - } - ], - "impls": { - "7d36eb1fb5509724c9c86e5567a213c3dc9d83c3cbe4f6b633ad300b6ccc8728": { - "address": "0xA80e3169178a05a0e4BDB7A427AD0844ddCEC193", - "txHash": "0x64cecfe4ddf464ca5e27985fad8d5c79ee7c5156920c991656b6a1a82ad86309", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "organizations", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(Organization)4485_storage)", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:36" - }, - { - "label": "_fee", - "offset": 0, - "slot": "102", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:39" - }, - { - "label": "_orgFee", - "offset": 0, - "slot": "103", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:42" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(Organization)4485_storage)": { - "label": "mapping(bytes32 => struct DpidRegistry.Organization)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Organization)4485_storage": { - "label": "struct DpidRegistry.Organization", - "members": [ - { - "label": "prefix", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "registrant", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "tokenGate", - "type": "t_array(t_address)dyn_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "entries", - "type": "t_mapping(t_uint256,t_uint256)", - "offset": 0, - "slot": "3" - }, - { - "label": "count", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/working/sepoliaDev-research-object.json b/desci-contracts/.openzeppelin/working/sepoliaDev-research-object.json deleted file mode 100644 index 3a15e08bd..000000000 --- a/desci-contracts/.openzeppelin/working/sepoliaDev-research-object.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0xc339e7DC6bE76Cdd2ecba9ce3C6D81d94adE53B0", - "txHash": "0x65a7b1dfba9e730071413efa77fca5b8f3e793d2a9a3782762565ca35745e0ea" - }, - "proxies": [ - { - "address": "0x97B149D477bA197F6fB954175d481aC247469457", - "txHash": "0x74df19d0cbb06cfab7e72ba60b913cd2ab9b2932e99d1c0d5000e2b43f2829a4", - "kind": "transparent" - } - ], - "impls": { - "a5c4d1541a917c4a437ff6778252fe52280f098d0ae95696d86f7642a6b8d3dc": { - "address": "0xA10d4A5692e115Fae6C0c424Ee3d84C13181295a", - "txHash": "0x1b91cf065f04fcdf8a0d6380b9b3705b68205c996276f89a4bd8408a79ff7636", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_name", - "offset": 0, - "slot": "101", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" - }, - { - "label": "_symbol", - "offset": 0, - "slot": "102", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" - }, - { - "label": "_owners", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" - }, - { - "label": "_balances", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" - }, - { - "label": "_tokenApprovals", - "offset": 0, - "slot": "105", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" - }, - { - "label": "_operatorApprovals", - "offset": 0, - "slot": "106", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" - }, - { - "label": "__gap", - "offset": 0, - "slot": "107", - "type": "t_array(t_uint256)44_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:465" - }, - { - "label": "_metadata", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_uint256,t_bytes_storage)", - "contract": "VersionedERC721V2", - "src": "contracts/VersionedERC721V2.sol:8" - }, - { - "label": "_owner", - "offset": 0, - "slot": "152", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "153", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "_uri", - "offset": 0, - "slot": "202", - "type": "t_string_storage", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:9" - }, - { - "label": "_dpidRegistry", - "offset": 0, - "slot": "203", - "type": "t_address", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:11" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]", - "numberOfBytes": "1408" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_address)": { - "label": "mapping(uint256 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/working/sepoliaProd-dpid.json b/desci-contracts/.openzeppelin/working/sepoliaProd-dpid.json deleted file mode 100644 index 14eb8e118..000000000 --- a/desci-contracts/.openzeppelin/working/sepoliaProd-dpid.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0x5C839523E8503710Dbb82F899b8322d00f80f4E3", - "txHash": "0xc26b686aa3a4331f1411669c02495d0728656b5bf13959547f40b6830bcc5bdd" - }, - "proxies": [ - { - "address": "0x0215242e85D7c480bEAb862cEb9AD6829C1D74E7", - "txHash": "0xc4f69f76533ebe1ccf892df02abed451bc135a6d063640dc089ab0c06243c369", - "kind": "transparent" - } - ], - "impls": { - "7d36eb1fb5509724c9c86e5567a213c3dc9d83c3cbe4f6b633ad300b6ccc8728": { - "address": "0x75A2e9400DE571E9C695c0Fe0e2DeeE3d510C394", - "txHash": "0x0e716d850063e85abaced43683b584011307dc0922738c93e3f17751ead963ba", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "organizations", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(Organization)4485_storage)", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:36" - }, - { - "label": "_fee", - "offset": 0, - "slot": "102", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:39" - }, - { - "label": "_orgFee", - "offset": 0, - "slot": "103", - "type": "t_uint256", - "contract": "DpidRegistry", - "src": "contracts/DpidRegistry.sol:42" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]", - "numberOfBytes": "32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_mapping(t_bytes32,t_struct(Organization)4485_storage)": { - "label": "mapping(bytes32 => struct DpidRegistry.Organization)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)", - "numberOfBytes": "32" - }, - "t_struct(Organization)4485_storage": { - "label": "struct DpidRegistry.Organization", - "members": [ - { - "label": "prefix", - "type": "t_bytes32", - "offset": 0, - "slot": "0" - }, - { - "label": "registrant", - "type": "t_address", - "offset": 0, - "slot": "1" - }, - { - "label": "tokenGate", - "type": "t_array(t_address)dyn_storage", - "offset": 0, - "slot": "2" - }, - { - "label": "entries", - "type": "t_mapping(t_uint256,t_uint256)", - "offset": 0, - "slot": "3" - }, - { - "label": "count", - "type": "t_uint256", - "offset": 0, - "slot": "4" - } - ], - "numberOfBytes": "160" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/.openzeppelin/working/sepoliaProd-research-object.json b/desci-contracts/.openzeppelin/working/sepoliaProd-research-object.json deleted file mode 100644 index b87846f29..000000000 --- a/desci-contracts/.openzeppelin/working/sepoliaProd-research-object.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "manifestVersion": "3.2", - "admin": { - "address": "0xc36b1A363D0C996449eBE2753376AeD62Fc981f6", - "txHash": "0x63885cdd3d70f796296d2fa66a0149cccca9a68dcb0e5362d828e48ca3b4bf19" - }, - "proxies": [ - { - "address": "0x1fA4c72680af35FE1eb7345509E39498be6Ce03b", - "txHash": "0xfa3245b9b7bbf711a993751c706028b3599767ba03648e12685122cf03356936", - "kind": "transparent" - } - ], - "impls": { - "a5c4d1541a917c4a437ff6778252fe52280f098d0ae95696d86f7642a6b8d3dc": { - "address": "0xb882A72ECA6B4CB586ce83073ab2c364BCa9CcF2", - "txHash": "0xad282a5a8e81cc2d907321534fab06ff418b5df0235bcce541c63a1fbcbcf564", - "layout": { - "storage": [ - { - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_uint8", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:62", - "retypedFrom": "bool" - }, - { - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool", - "contract": "Initializable", - "src": "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:67" - }, - { - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage", - "contract": "ContextUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:36" - }, - { - "label": "__gap", - "offset": 0, - "slot": "51", - "type": "t_array(t_uint256)50_storage", - "contract": "ERC165Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol:41" - }, - { - "label": "_name", - "offset": 0, - "slot": "101", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:25" - }, - { - "label": "_symbol", - "offset": 0, - "slot": "102", - "type": "t_string_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:28" - }, - { - "label": "_owners", - "offset": 0, - "slot": "103", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:31" - }, - { - "label": "_balances", - "offset": 0, - "slot": "104", - "type": "t_mapping(t_address,t_uint256)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:34" - }, - { - "label": "_tokenApprovals", - "offset": 0, - "slot": "105", - "type": "t_mapping(t_uint256,t_address)", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:37" - }, - { - "label": "_operatorApprovals", - "offset": 0, - "slot": "106", - "type": "t_mapping(t_address,t_mapping(t_address,t_bool))", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:40" - }, - { - "label": "__gap", - "offset": 0, - "slot": "107", - "type": "t_array(t_uint256)44_storage", - "contract": "ERC721Upgradeable", - "src": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol:465" - }, - { - "label": "_metadata", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_uint256,t_bytes_storage)", - "contract": "VersionedERC721V2", - "src": "contracts/VersionedERC721V2.sol:8" - }, - { - "label": "_owner", - "offset": 0, - "slot": "152", - "type": "t_address", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:22" - }, - { - "label": "__gap", - "offset": 0, - "slot": "153", - "type": "t_array(t_uint256)49_storage", - "contract": "OwnableUpgradeable", - "src": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:94" - }, - { - "label": "_uri", - "offset": 0, - "slot": "202", - "type": "t_string_storage", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:9" - }, - { - "label": "_dpidRegistry", - "offset": 0, - "slot": "203", - "type": "t_address", - "contract": "ResearchObjectV2", - "src": "contracts/ResearchObjectV2.sol:11" - } - ], - "types": { - "t_address": { - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]", - "numberOfBytes": "1408" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes_storage": { - "label": "bytes", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_mapping(t_address,t_bool))": { - "label": "mapping(address => mapping(address => bool))", - "numberOfBytes": "32" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_address)": { - "label": "mapping(uint256 => address)", - "numberOfBytes": "32" - }, - "t_mapping(t_uint256,t_bytes_storage)": { - "label": "mapping(uint256 => bytes)", - "numberOfBytes": "32" - }, - "t_string_storage": { - "label": "string", - "numberOfBytes": "32" - }, - "t_uint256": { - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint8": { - "label": "uint8", - "numberOfBytes": "1" - } - } - } - } - } -} diff --git a/desci-contracts/package.json b/desci-contracts/package.json index dd76a07c4..9ccf1ce9c 100644 --- a/desci-contracts/package.json +++ b/desci-contracts/package.json @@ -1,7 +1,7 @@ { "name": "@desci-labs/desci-contracts", "description": "Smart contracts implementing DeSci Nodes on-chain state and logic", - "version": "0.2.0", + "version": "0.2.1", "license": "MIT", "scripts": { "test": "hardhat clean && hardhat test", From f72b25d68f798e60b1dcec32d1e9fce618a38347 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 26 Mar 2024 15:10:10 +0100 Subject: [PATCH 018/141] nodes-lib: rework config system, allow passing signer --- nodes-lib/.env.example | 54 - nodes-lib/package-lock.json | 2344 ++++++++++++++++----------------- nodes-lib/package.json | 9 +- nodes-lib/src/api.ts | 42 +- nodes-lib/src/chain.ts | 74 +- nodes-lib/src/codex.ts | 116 +- nodes-lib/src/config.ts | 29 - nodes-lib/src/config/chain.ts | 67 + nodes-lib/src/config/index.ts | 52 + nodes-lib/src/index.ts | 2 +- nodes-lib/src/publish.ts | 28 +- nodes-lib/src/routes.ts | 8 +- nodes-lib/src/util/signing.ts | 16 + nodes-lib/test/root.spec.ts | 26 +- 14 files changed, 1420 insertions(+), 1447 deletions(-) delete mode 100644 nodes-lib/.env.example delete mode 100644 nodes-lib/src/config.ts create mode 100644 nodes-lib/src/config/chain.ts create mode 100644 nodes-lib/src/config/index.ts create mode 100644 nodes-lib/src/util/signing.ts diff --git a/nodes-lib/.env.example b/nodes-lib/.env.example deleted file mode 100644 index d6aa61c07..000000000 --- a/nodes-lib/.env.example +++ /dev/null @@ -1,54 +0,0 @@ -## Configure RPC nodes (open an issue/ping us to access DeSci Labs' nodes) -ETHEREUM_RPC_URL=http://localhost:8545 - -# Use this for Goerli testnet -# ETHEREUM_RPC_URL=https://eth-goerli.g.alchemy.com/v2/demo - -# Use this for Sepolia testnet -# ETHEREUM_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/demo - -########################################################################## - -## Contract addresses -# Use these against local devcluster -DPID_CONTRACT_ADDRESS=0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 -RO_CONTRACT_ADDRESS=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707 - -# Use these against the görli testnet -# DPID_CONTRACT_ADDRESS=0xd92C9cC823926145b89263cd3A4CeD6161a8bDD5 -# RO_CONTRACT_ADDRESS=0x47104e854aFCd127D38C4912D08b56b8Ab725007 - -# Use these against the sepolia testnet -# DPID_CONTRACT_ADDRESS= -# RO_CONTRACT_ADDRESS= - -######################################################################### - -## Ceramic node -CERAMIC_NODE_URL=http://localhost:7007 - -# Use this for DeSci Labs' node -# CERAMIC_NODE_URL=https://ceramic-dev.desci.com - -######################################################################### - -## Connection to Nodes backend API -# Use this for local devcluster -NODES_API_URL=http://localhost:5420 - -# Use this against nodes-dev -# NODES_API_URL=https://nodes-api-dev.desci.com - -#!!!!!!!!!! -# REQUIRED: Set your API key (login to nodes-web-v2 locally/on dev, generate API key from profile page) -#!!!!!!!!!! -NODES_API_KEY= - -######################################################################## - -## Private key for publish (Ceramic & Ethereum chain) -# Use with local devcluster (pre-funded by ganache) -PUBLISH_PKEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 - -# Set your own private key -# PUBLISH_PKEY= diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json index 18b350fb5..20bc51d19 100644 --- a/nodes-lib/package-lock.json +++ b/nodes-lib/package-lock.json @@ -1,18 +1,19 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.4", + "version": "0.0.5-rc0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@desci-labs/nodes-lib", - "version": "0.0.4", + "version": "0.0.5-rc0", "license": "MIT", "dependencies": { - "@desci-labs/desci-codex-lib": "^1.1.6", + "@desci-labs/desci-codex-lib": "^1.1.7-rc0", "@desci-labs/desci-models": "^0.2.3-rc1", + "@didtools/pkh-ethereum": "^0.5.0", "axios": "^1.6.5", - "dotenv": "^16.4.4", + "did-session": "^3.1.0", "ethers": "^5.7.2", "form-data": "^4.0.0", "mime-types": "^2.1.35", @@ -20,7 +21,7 @@ "url-safe-base64": "1.2.0" }, "devDependencies": { - "@desci-labs/desci-contracts": "^0.2.0-rc1", + "@desci-labs/desci-contracts": "^0.2.1", "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", "typedoc": "^0.25.8", @@ -115,21 +116,21 @@ } }, "node_modules/@ceramicnetwork/anchor-listener": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-listener/-/anchor-listener-4.2.0.tgz", - "integrity": "sha512-Gxe4KzuV2sOpEoqp7SSWaPdXPJnOg+Pal8QBQrM1e/ctQTLqPA86GXLzfzN7fW3OIU5r05EikdX+B4tlwVRQsA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-listener/-/anchor-listener-4.3.0.tgz", + "integrity": "sha512-9kLg7YjHT6jn4DtlwkDMniZm0Ze98WDr7Md6xI4eEY5HCDk5yfL62oiIvt7+Al5gf4mIFT9lsP+IShCGgNEW0Q==", "dependencies": { - "@ceramicnetwork/anchor-utils": "^4.2.0", + "@ceramicnetwork/anchor-utils": "^4.3.0", "@ethersproject/providers": "^5.5.1", "rxjs": "^7.8.1" } }, "node_modules/@ceramicnetwork/anchor-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-utils/-/anchor-utils-4.2.0.tgz", - "integrity": "sha512-R4gqTcPZTEyNI31TQIX9plkMazObJ2dzyYk/2gJEkQrktohP9gtpm9eYIDicHj41bWeoubgDwJ7S4mKQ4Xokeg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-utils/-/anchor-utils-4.3.0.tgz", + "integrity": "sha512-dIuazx0WSnqxSMpaP6In2OjfdWpSsFbGCFRip9FO68kmm+GPh/EPpLzQsCNPBDGrO5XGmSTmkMoQUcu9UhFvOQ==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ethersproject/abi": "^5.7.0", "multiformats": "^13.0.0", "uint8arrays": "^5.0.1" @@ -166,12 +167,12 @@ } }, "node_modules/@ceramicnetwork/blockchain-utils-validation": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-validation/-/blockchain-utils-validation-5.2.0.tgz", - "integrity": "sha512-GmmAYXOTOSxaR5Cv8JWx4j4/Y11MOkjDAI3l0pXlPapxE3/nluDLbYQURkaSaHxdVylVh6Re7GI9EnQfmepNuw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-validation/-/blockchain-utils-validation-5.3.0.tgz", + "integrity": "sha512-7dUZVR9wezc4Fjml76FwicWrF2+ogBJ72XKNBjR4lHv5VXlEZRmeqntiw0ZpNQJInut4tvqJIex6Fu2AAHdjWw==", "dependencies": { "@ceramicnetwork/blockchain-utils-linking": "^5.0.0", - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ethersproject/contracts": "^5.5.0", "@ethersproject/providers": "^5.5.1", "@ethersproject/wallet": "^5.5.0", @@ -195,11 +196,11 @@ } }, "node_modules/@ceramicnetwork/codecs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-4.2.0.tgz", - "integrity": "sha512-II/KXww5nWJnK86nt2+9edJ6f/opC4sNwdAumZr0fHRnjzrLm0s5hjfM/9N0s0P5k5x9VHxJ1bmlUTpMQdlMyg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-4.3.0.tgz", + "integrity": "sha512-FT+EoPis+F/E+nUGFi2osP5b1JpPaUKYWhkVX6J/s5A7PPpPxyNnfM0h3B+LIsaDef5jSTtNWI9L3AhrNAjPXg==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "cartonne": "^3.0.1", "codeco": "^1.1.0", @@ -217,9 +218,9 @@ } }, "node_modules/@ceramicnetwork/common": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-5.2.0.tgz", - "integrity": "sha512-JTuaegNKFRCQiQcZ1nxtUwOoQjuk0zp3d22X24pKxXBWuKyUmqYg7BXfqeGc4gwK9uF1ll+y9ERgCh3li2/1qA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-5.3.0.tgz", + "integrity": "sha512-di+A+NaDg2lxgxNGv5yRTgCSK2zu9rU3HCjwpuS73FKikQSE01oZpXgdOIt1liDHxAzw8GWApaYAlSzc+7bLqg==", "dependencies": { "@ceramicnetwork/streamid": "^5.0.0", "@didtools/cacao": "^3.0.0", @@ -240,25 +241,110 @@ "uint8arrays": "^5.0.1" } }, - "node_modules/@ceramicnetwork/common/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", + "node_modules/@ceramicnetwork/common/node_modules/@didtools/codecs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", + "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" + "codeco": "^1.1.0", + "multiformats": "^11.0.1", + "uint8arrays": "^4.0.3" }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/codecs/node_modules/multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" } }, - "node_modules/@ceramicnetwork/common/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" + "node_modules/@ceramicnetwork/common/node_modules/@didtools/codecs/node_modules/uint8arrays": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "dependencies": { + "multiformats": "^12.0.1" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/codecs/node_modules/uint8arrays/node_modules/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/pkh-ethereum": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.2.1.tgz", + "integrity": "sha512-apQefbOqqy8HQMDNVG0ITxHLr9I5iZrjADX+mPB+ie1ue8MO8pOHMifLQ3j0R6RjS2einCd+hEZ4Ib4AKs3Xlw==", + "dependencies": { + "@didtools/cacao": "^2.0.0", + "@ethersproject/wallet": "^5.7.0", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/pkh-ethereum/node_modules/@didtools/cacao": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", + "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", + "dependencies": { + "@didtools/codecs": "^1.0.1", + "@didtools/siwx": "1.0.0", + "@ipld/dag-cbor": "^9.0.1", + "caip": "^1.1.0", + "multiformats": "^11.0.2", + "uint8arrays": "^4.0.3" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/pkh-ethereum/node_modules/multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/pkh-ethereum/node_modules/uint8arrays": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "dependencies": { + "multiformats": "^12.0.1" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/pkh-ethereum/node_modules/uint8arrays/node_modules/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/@didtools/siwx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", + "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "dependencies": { + "codeco": "^1.1.0" + }, + "engines": { + "node": ">=14.14" } }, "node_modules/@ceramicnetwork/common/node_modules/uint8arrays": { @@ -270,28 +356,28 @@ } }, "node_modules/@ceramicnetwork/core": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/core/-/core-5.3.0.tgz", - "integrity": "sha512-V6iIGyt6P53kOisX7wMCoHwXMRiEV6tHjxEcDQYipZh55sHP6ZwDLujsUTkEq9MlkuflzBrzIorHx0GLQoQJiA==", - "dependencies": { - "@ceramicnetwork/anchor-listener": "^4.2.0", - "@ceramicnetwork/anchor-utils": "^4.2.0", - "@ceramicnetwork/codecs": "^4.2.0", - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/indexing": "^4.3.0", - "@ceramicnetwork/ipfs-topology": "^5.2.0", - "@ceramicnetwork/job-queue": "^4.3.0", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/core/-/core-5.4.0.tgz", + "integrity": "sha512-P6SBwUnpYrZw2JCLwI/ywza21xQEIRGzMOoDZC+I3CP0bkI6F8nY6Sw1+J93ds54DjrliKdReCEiEdPNEfSmXQ==", + "dependencies": { + "@ceramicnetwork/anchor-listener": "^4.3.0", + "@ceramicnetwork/anchor-utils": "^4.3.0", + "@ceramicnetwork/codecs": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/indexing": "^4.4.0", + "@ceramicnetwork/ipfs-topology": "^5.3.0", + "@ceramicnetwork/job-queue": "^4.4.0", "@ceramicnetwork/observability": "^1.4.4", - "@ceramicnetwork/pinning-aggregation": "^5.2.0", - "@ceramicnetwork/pinning-ipfs-backend": "^5.2.0", - "@ceramicnetwork/stream-caip10-link": "^5.2.0", - "@ceramicnetwork/stream-caip10-link-handler": "^5.3.0", - "@ceramicnetwork/stream-model": "^4.2.0", - "@ceramicnetwork/stream-model-handler": "^4.3.0", - "@ceramicnetwork/stream-model-instance": "^4.3.0", - "@ceramicnetwork/stream-model-instance-handler": "^4.3.0", - "@ceramicnetwork/stream-tile": "^5.2.0", - "@ceramicnetwork/stream-tile-handler": "^5.3.0", + "@ceramicnetwork/pinning-aggregation": "^5.3.0", + "@ceramicnetwork/pinning-ipfs-backend": "^5.3.0", + "@ceramicnetwork/stream-caip10-link": "^5.3.0", + "@ceramicnetwork/stream-caip10-link-handler": "^5.4.0", + "@ceramicnetwork/stream-model": "^4.3.0", + "@ceramicnetwork/stream-model-handler": "^4.4.0", + "@ceramicnetwork/stream-model-instance": "^4.4.0", + "@ceramicnetwork/stream-model-instance-handler": "^4.4.0", + "@ceramicnetwork/stream-tile": "^5.3.0", + "@ceramicnetwork/stream-tile-handler": "^5.4.0", "@ceramicnetwork/streamid": "^5.0.0", "@ceramicnetwork/wasm-bloom-filter": "^0.1.0", "@datastructures-js/priority-queue": "^6.1.0", @@ -327,70 +413,26 @@ "node": ">=20.8" } }, - "node_modules/@ceramicnetwork/core/node_modules/@didtools/pkh-ethereum": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", - "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", + "node_modules/@ceramicnetwork/core/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", "dependencies": { - "@didtools/cacao": "^3.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - }, - "engines": { - "node": ">=14.14" + "cborg": "^1.6.0", + "multiformats": "^9.5.4" } }, + "node_modules/@ceramicnetwork/core/node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node_modules/@ceramicnetwork/core/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", "bin": { - "cborg": "lib/bin.js" - } - }, - "node_modules/@ceramicnetwork/core/node_modules/dag-jose-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", - "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", - "dependencies": { - "@ipld/dag-cbor": "^9.0.7", - "multiformats": "^13.0.0" - } - }, - "node_modules/@ceramicnetwork/core/node_modules/dag-jose-utils/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@ceramicnetwork/core/node_modules/dids": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", - "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", - "dependencies": { - "@didtools/cacao": "^3.0.1", - "@didtools/codecs": "^3.0.0", - "@didtools/pkh-ethereum": "^0.5.0", - "@stablelib/random": "^1.0.2", - "codeco": "^1.2.0", - "dag-jose-utils": "^4.0.0", - "did-jwt": "^7.4.7", - "did-resolver": "^4.1.0", - "multiformats": "^13.0.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=14.14" + "cborg": "cli.js" } }, "node_modules/@ceramicnetwork/core/node_modules/uint8arrays": { @@ -402,15 +444,15 @@ } }, "node_modules/@ceramicnetwork/http-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-5.3.0.tgz", - "integrity": "sha512-tex/zsJT47fIYJJvZekVjM1xAeUqBkRsdWBzjL6ZWrq/Prk+z+/J+q7M03p0NNelG3FGStP8dteZ1wVG8mIZDA==", - "dependencies": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-caip10-link": "^5.2.0", - "@ceramicnetwork/stream-model": "^4.2.0", - "@ceramicnetwork/stream-model-instance": "^4.3.0", - "@ceramicnetwork/stream-tile": "^5.2.0", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-5.4.0.tgz", + "integrity": "sha512-ABG0OA3p/cOpV472gegFE7Xcuv4g7foWh/nLEuYnB+O9iPFym3/SkFDMJ4+F84T6eL2TkdjassYgY7saV8HlKA==", + "dependencies": { + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-caip10-link": "^5.3.0", + "@ceramicnetwork/stream-model": "^4.3.0", + "@ceramicnetwork/stream-model-instance": "^4.4.0", + "@ceramicnetwork/stream-tile": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@scarf/scarf": "^1.1.1", "query-string": "^7.1.0", @@ -418,15 +460,15 @@ } }, "node_modules/@ceramicnetwork/indexing": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/indexing/-/indexing-4.3.0.tgz", - "integrity": "sha512-NdjDNKK3GT5GqPvr/ZqBsoJMPHpOWjJZao0Zrl9dXP2alzMlWacXKRAyApMSVRg9XwMNHwkrx9EgJBQ/234ODQ==", - "dependencies": { - "@ceramicnetwork/anchor-listener": "^4.2.0", - "@ceramicnetwork/anchor-utils": "^4.2.0", - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/job-queue": "^4.3.0", - "@ceramicnetwork/stream-model": "^4.2.0", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/indexing/-/indexing-4.4.0.tgz", + "integrity": "sha512-Nfaye7h9ZTPsA7AA3dRGiuqMMLJJy70DlsPmguwLaeZKCuLVFygP2n8Ylx7IpBwLdSyoBYM6ZQhoCEovmApXyg==", + "dependencies": { + "@ceramicnetwork/anchor-listener": "^4.3.0", + "@ceramicnetwork/anchor-utils": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/job-queue": "^4.4.0", + "@ceramicnetwork/stream-model": "^4.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ethersproject/providers": "^5.5.1", "knex": "^2.5.1", @@ -447,19 +489,19 @@ } }, "node_modules/@ceramicnetwork/ipfs-topology": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-topology/-/ipfs-topology-5.2.0.tgz", - "integrity": "sha512-FGc+x/sYihKITe6IImxPkIBu3Y8ldU9m4LmZxfcDzG0YbLMG9fmL88jh80XEcxSEw2nmQg3GnuMASGnbYAU8WQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-topology/-/ipfs-topology-5.3.0.tgz", + "integrity": "sha512-augxF+jbd1uXKiOb9r1BzqaQ7783X9BWcneLLZRSWgfRrMK7NxVdZJXlH8xfyZPQi3BY7A0LGGvYzeBKOuYIbw==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0" + "@ceramicnetwork/common": "^5.3.0" } }, "node_modules/@ceramicnetwork/job-queue": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/job-queue/-/job-queue-4.3.0.tgz", - "integrity": "sha512-QExfKU2/HR368hw77maFG76h996MewTKrOlOhveBzT0G8bE+hwH0E5iP4+HiII8BPZSjY5K9+MQNP0gxKQH23w==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/job-queue/-/job-queue-4.4.0.tgz", + "integrity": "sha512-k0jn7qD+0t6uV8ogL1OPYHIb0hR0MG8HteVu2uqXgHdwJFBngnZrRaFTcLF6uSS5fKc7r1/+ugx1n8oqADSwOw==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "pg": "^8.11.3", "pg-boss": "^8.2.0", "rxjs": "^7.8.1" @@ -490,9 +532,9 @@ } }, "node_modules/@ceramicnetwork/pinning-aggregation": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-aggregation/-/pinning-aggregation-5.2.0.tgz", - "integrity": "sha512-5q/5Q3pJmGmT5hNIuda2ckHFGUAnnXAfwGGvHbtLKDLC0Ct1qWymME3eFtuH1768xf0wAAz65Kb8Xy3EZY6YVg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-aggregation/-/pinning-aggregation-5.3.0.tgz", + "integrity": "sha512-zFzB08ds0VrKeIwtzuq19I3XDx8Z3FsoVQDUTP0dcNaTJHrYk31yd9kv2+YNtli/UKjZhWhSRyMDhsRnoEUv6A==", "dependencies": { "@stablelib/sha256": "^1.0.1", "uint8arrays": "^5.0.1" @@ -507,9 +549,9 @@ } }, "node_modules/@ceramicnetwork/pinning-ipfs-backend": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-ipfs-backend/-/pinning-ipfs-backend-5.2.0.tgz", - "integrity": "sha512-1JLeewTHaB8Ii2dCAN/w/sSptnLXLYtc2LdtNs/fp9c4PHNaAc2MNkjr5a2zxoQ7k4DouCPC/0W19kb1vO2J6g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-ipfs-backend/-/pinning-ipfs-backend-5.3.0.tgz", + "integrity": "sha512-7DO6i2kac1jFKeGOaJ6KbgF9Tp8LS7NvtLZilnvr5bH/UFnNFMLJZ9ycHj5ErRPREY7yXAB9RhVxK/xO4775nQ==", "dependencies": { "@stablelib/sha256": "^1.0.1", "ipfs-http-client": "^60.0.0", @@ -525,11 +567,11 @@ } }, "node_modules/@ceramicnetwork/stream-caip10-link": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-5.2.0.tgz", - "integrity": "sha512-CV6/8EhidIvUNr9R/TqcljlD2MxGR+uOR5rWEePaIfHWqrGXX7XIm7kZ+qtkNKo9q38FaenAG35JB6kmP+z49Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-5.3.0.tgz", + "integrity": "sha512-/0WGIS3BtRO9VBRxdc2+aCpcGbRXiiWGb+dUk6iF18awfiFv8xzhBJahg8wAHtJiOHLUEdKMCh2vAT2muuRczA==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "caip": "~1.1.0", "did-resolver": "^4.0.1", @@ -537,33 +579,33 @@ } }, "node_modules/@ceramicnetwork/stream-caip10-link-handler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link-handler/-/stream-caip10-link-handler-5.3.0.tgz", - "integrity": "sha512-n0snvr5qYgj6xSqlD8OWQR6jfr1/a0Bdd9KILUxxp4yK6k46lO9edGkT26coOTxzASJMu9ZDu2H3uQQXkQFHJw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link-handler/-/stream-caip10-link-handler-5.4.0.tgz", + "integrity": "sha512-qCu4dlr0byfDIHhRDsW7rXQlQYUMkuxkzvVqYBVBk0OZ3a4RwzTicQ8unqbM4ZBN9HTKcwYtUJmOcb7+ncySrw==", "dependencies": { - "@ceramicnetwork/blockchain-utils-validation": "^5.2.0", - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-caip10-link": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0" + "@ceramicnetwork/blockchain-utils-validation": "^5.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-caip10-link": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0" } }, "node_modules/@ceramicnetwork/stream-handler-common": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-handler-common/-/stream-handler-common-4.2.0.tgz", - "integrity": "sha512-ReKWLczmeYuH7heAa4AvBDTpfp2w6vtxsOq9u5+XJES9Zbeu3owNa5rGsDJuSqFvrinxOA8/g96vZOQS7zINBg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-handler-common/-/stream-handler-common-4.3.0.tgz", + "integrity": "sha512-7Hci2u+tEjeHxzTuHyiXpS4LpaIsMf5moI4yV2RrAlD4qzTyubtJM4V7e5UeTbz9AGRYk5zBwkantiI2WGgwhQ==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "lodash.clonedeep": "^4.5.0" } }, "node_modules/@ceramicnetwork/stream-model": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-4.2.0.tgz", - "integrity": "sha512-i+AvhHqyDVT6iZtTXkJZCctHxjsSNn5o9KwmiaFB/ZTT6QeOLUJ5EOXCQ4tmLDjb4qy6xgxUb9JLehilgC6QCw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-4.3.0.tgz", + "integrity": "sha512-geuPxSWiA4U8TgoL1FhV1bFcojRudDITwBRUlBm0/7azBZVfbF1BpEINUAXeEGWYNfzI1Rgz3gLnAzDCnOyTmA==", "dependencies": { - "@ceramicnetwork/codecs": "^4.2.0", - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/codecs": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -577,13 +619,13 @@ } }, "node_modules/@ceramicnetwork/stream-model-handler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-handler/-/stream-model-handler-4.3.0.tgz", - "integrity": "sha512-ZWc6vtE4kPriHH2ie8aN8tbyWHilP0S3gcnyEeAwnO02S/kbphhXjUQ0Jg3oiIaYle83awyebt6oRlk08HwF6w==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-handler/-/stream-model-handler-4.4.0.tgz", + "integrity": "sha512-DUHee9CyVf+RVWLB40cnTtLZQt8Cn/CrBW/vrexr773B8y7wQcClZ2EsD3umgbJF2qBO/LM6DKOJLoWGYyoGAg==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0", - "@ceramicnetwork/stream-model": "^4.2.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0", + "@ceramicnetwork/stream-model": "^4.3.0", "@ceramicnetwork/streamid": "^5.0.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -603,11 +645,11 @@ } }, "node_modules/@ceramicnetwork/stream-model-instance": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-4.3.0.tgz", - "integrity": "sha512-BTaRGdfypAra4qKx1QrHjBNuRDBQEPql1GPwiRz0lZW2yclyNo9jOuN+oYs4jjYMne1Gv1ueF6U0qDgbBge7Hg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-4.4.0.tgz", + "integrity": "sha512-GWk6Nb8JMUXuVTDxmfq3zvIbHuYVtCe/vqFXcEIMyzwwcqC+qaEfreIT3QdtLv38Pnc9TRxlG/H9uKmjZ1HRww==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -617,14 +659,14 @@ } }, "node_modules/@ceramicnetwork/stream-model-instance-handler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance-handler/-/stream-model-instance-handler-4.3.0.tgz", - "integrity": "sha512-+ndJnSP7eE/km0veYlyJqhvomE9AkiGsisQw2Vkafu1cpihMcjv3dRuu2imv7rbFYSEWMJhhoyA/0anibimnRw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance-handler/-/stream-model-instance-handler-4.4.0.tgz", + "integrity": "sha512-auvPWJrW4Z7ITTalLqsVc98/+Ah7/P9Ys3Mt8KmVWlcYF1Tkb1ZHEVR3yaA0negn3mA5ZN+jYDvudppZGBctAA==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0", - "@ceramicnetwork/stream-model": "^4.2.0", - "@ceramicnetwork/stream-model-instance": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0", + "@ceramicnetwork/stream-model": "^4.3.0", + "@ceramicnetwork/stream-model-instance": "^4.4.0", "@ceramicnetwork/streamid": "^5.0.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -642,6 +684,28 @@ "multiformats": "^13.0.0" } }, + "node_modules/@ceramicnetwork/stream-model-instance/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "dependencies": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, + "node_modules/@ceramicnetwork/stream-model-instance/node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, + "node_modules/@ceramicnetwork/stream-model-instance/node_modules/cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", + "bin": { + "cborg": "cli.js" + } + }, "node_modules/@ceramicnetwork/stream-model-instance/node_modules/uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -650,6 +714,28 @@ "multiformats": "^13.0.0" } }, + "node_modules/@ceramicnetwork/stream-model/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "dependencies": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, + "node_modules/@ceramicnetwork/stream-model/node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, + "node_modules/@ceramicnetwork/stream-model/node_modules/cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", + "bin": { + "cborg": "cli.js" + } + }, "node_modules/@ceramicnetwork/stream-model/node_modules/uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -659,11 +745,11 @@ } }, "node_modules/@ceramicnetwork/stream-tile": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-5.2.0.tgz", - "integrity": "sha512-c4lNpwlCl7cpBdBwpYm8lqMKfV7yZAPOYnD14w+SAHNmsz6W6UOOMfN0xkgR7YSu6K80zNoIyZefCJKsn0apaA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-5.3.0.tgz", + "integrity": "sha512-vM7EpvUZLfz8p73fZBHVYGQ9rN+UbCX8z9PPX1aj7zSGoiwzqVGoskbzgpAqyKuaTAiFrX7rI/Z5eZaQ8NXi7g==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -674,13 +760,13 @@ } }, "node_modules/@ceramicnetwork/stream-tile-handler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile-handler/-/stream-tile-handler-5.3.0.tgz", - "integrity": "sha512-gsFxLUovTo7vaLwgBy14OzXAT3ZQyjQ/vZxaFJKF0n6cg+hdbO1hJJt9gEOuzwmoR+haXt1Lwu3JSCigxIK2jg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile-handler/-/stream-tile-handler-5.4.0.tgz", + "integrity": "sha512-JAReOVJjWV1btNkZ4/jybeFB5Y0aIM9R4hHQ19uArAEiTPVYp/bFREBZYnGvQquVSo0fuiPDqWY+zxQxuCXFiA==", "dependencies": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0", - "@ceramicnetwork/stream-tile": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0", + "@ceramicnetwork/stream-tile": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -698,70 +784,26 @@ "multiformats": "^13.0.0" } }, - "node_modules/@ceramicnetwork/stream-tile/node_modules/@didtools/pkh-ethereum": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", - "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", + "node_modules/@ceramicnetwork/stream-tile/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", "dependencies": { - "@didtools/cacao": "^3.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - }, - "engines": { - "node": ">=14.14" + "cborg": "^1.6.0", + "multiformats": "^9.5.4" } }, + "node_modules/@ceramicnetwork/stream-tile/node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node_modules/@ceramicnetwork/stream-tile/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", "bin": { - "cborg": "lib/bin.js" - } - }, - "node_modules/@ceramicnetwork/stream-tile/node_modules/dag-jose-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", - "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", - "dependencies": { - "@ipld/dag-cbor": "^9.0.7", - "multiformats": "^13.0.0" - } - }, - "node_modules/@ceramicnetwork/stream-tile/node_modules/dag-jose-utils/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@ceramicnetwork/stream-tile/node_modules/dids": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", - "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", - "dependencies": { - "@didtools/cacao": "^3.0.1", - "@didtools/codecs": "^3.0.0", - "@didtools/pkh-ethereum": "^0.5.0", - "@stablelib/random": "^1.0.2", - "codeco": "^1.2.0", - "dag-jose-utils": "^4.0.0", - "did-jwt": "^7.4.7", - "did-resolver": "^4.1.0", - "multiformats": "^13.0.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=14.14" + "cborg": "cli.js" } }, "node_modules/@ceramicnetwork/stream-tile/node_modules/uint8arrays": { @@ -786,14 +828,28 @@ "varint": "^6.0.0" } }, - "node_modules/@ceramicnetwork/streamid/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", + "node_modules/@ceramicnetwork/streamid/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "dependencies": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, + "node_modules/@ceramicnetwork/streamid/node_modules/@ipld/dag-cbor/node_modules/cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", "bin": { - "cborg": "lib/bin.js" + "cborg": "cli.js" } }, + "node_modules/@ceramicnetwork/streamid/node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node_modules/@ceramicnetwork/streamid/node_modules/uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -907,85 +963,11 @@ "@ceramicnetwork/http-client": "^5.2.0", "@ceramicnetwork/stream-model": "^4.1.0", "@ceramicnetwork/stream-model-instance": "^4.2.0", - "dids": "^5.0.2", - "json-schema-typed": "^8.0.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@composedb/types/node_modules/@didtools/pkh-ethereum": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", - "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", - "dependencies": { - "@didtools/cacao": "^3.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@composedb/types/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@composedb/types/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" - } - }, - "node_modules/@composedb/types/node_modules/dag-jose-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", - "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", - "dependencies": { - "@ipld/dag-cbor": "^9.0.7", - "multiformats": "^13.0.0" - } - }, - "node_modules/@composedb/types/node_modules/dids": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", - "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", - "dependencies": { - "@didtools/cacao": "^3.0.1", - "@didtools/codecs": "^3.0.0", - "@didtools/pkh-ethereum": "^0.5.0", - "@stablelib/random": "^1.0.2", - "codeco": "^1.2.0", - "dag-jose-utils": "^4.0.0", - "did-jwt": "^7.4.7", - "did-resolver": "^4.1.0", - "multiformats": "^13.0.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@composedb/types/node_modules/uint8arrays": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", - "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", - "dependencies": { - "multiformats": "^13.0.0" + "dids": "^5.0.2", + "json-schema-typed": "^8.0.1" + }, + "engines": { + "node": ">=20" } }, "node_modules/@datastructures-js/heap": { @@ -1010,13 +992,13 @@ } }, "node_modules/@desci-labs/desci-codex-lib": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.6.tgz", - "integrity": "sha512-W4u5Gm1UH2ife09OdpVgxPnZtZu4LFnCbUQdOpmYUIxXCW5KRIIKFsvXoSNXpxKYPptXZzwip0Zq6CP5iNiehg==", + "version": "1.1.7-rc0", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.7-rc0.tgz", + "integrity": "sha512-IFz3ApgI3Ya8RtRtaUknT3Gh8UPF1fkGvnkzXktTUo/T32UxUR2x+e00NheBfeXuaek6LQzogBOMooVDBKmscA==", "dependencies": { "@composedb/client": "^0.7.1", "@desci-labs/desci-codex-composedb": "^2.0.0", - "dids": "^4.0.4", + "dids": "^5.0.2", "gql-query-builder": "^3.8.0", "graphql": "^16.8.0", "key-did-provider-ed25519": "^3.0.2", @@ -1025,9 +1007,9 @@ } }, "node_modules/@desci-labs/desci-contracts": { - "version": "0.2.0-rc1", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.0-rc1.tgz", - "integrity": "sha512-tYUjJOcq2w6Ff3jmXJ+X0DI0Tu+W/LJrrJL9lXQ1BjHQClbX3xpTy7UCK4PuNSSpnjT/psIaoc8ck+n0Nfo1hw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.1.tgz", + "integrity": "sha512-1O5JkLlFaiuyTvR8tACgWdv9NpqILGf9NyyvGSuseai/wYgbCTK2qhC38R2LvGUFGWQqlXi127dFO5xD2R15fw==", "dev": true, "dependencies": { "@openzeppelin/contracts": "^4.8.1", @@ -1071,27 +1053,6 @@ "node": ">=14.14" } }, - "node_modules/@didtools/cacao/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@didtools/cacao/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" - } - }, "node_modules/@didtools/cacao/node_modules/uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -1121,95 +1082,43 @@ "multiformats": "^13.0.0" } }, - "node_modules/@didtools/pkh-ethereum": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.2.1.tgz", - "integrity": "sha512-apQefbOqqy8HQMDNVG0ITxHLr9I5iZrjADX+mPB+ie1ue8MO8pOHMifLQ3j0R6RjS2einCd+hEZ4Ib4AKs3Xlw==", - "dependencies": { - "@didtools/cacao": "^2.0.0", - "@ethersproject/wallet": "^5.7.0", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@didtools/pkh-ethereum/node_modules/@didtools/cacao": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", - "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", + "node_modules/@didtools/key-webcrypto": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@didtools/key-webcrypto/-/key-webcrypto-0.2.0.tgz", + "integrity": "sha512-5WK2Np0Tb6ApDoK71vYmEGiIdwLKzaEjr5KTK6RXFdl5xJnOYOHGkn4Ohco9D0UsoUGyDZE/ztlXmPQIbzHXQA==", "dependencies": { - "@didtools/codecs": "^1.0.1", - "@didtools/siwx": "1.0.0", - "@ipld/dag-cbor": "^9.0.1", - "caip": "^1.1.0", - "multiformats": "^11.0.2", - "uint8arrays": "^4.0.3" + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^5.0.1", + "varint": "^6.0.0" }, "engines": { "node": ">=14.14" } }, - "node_modules/@didtools/pkh-ethereum/node_modules/@didtools/codecs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", - "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", + "node_modules/@didtools/key-webcrypto/node_modules/uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "dependencies": { - "codeco": "^1.1.0", - "multiformats": "^11.0.1", - "uint8arrays": "^4.0.3" - }, - "engines": { - "node": ">=14.14" + "multiformats": "^13.0.0" } }, - "node_modules/@didtools/pkh-ethereum/node_modules/@didtools/siwx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", - "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "node_modules/@didtools/pkh-ethereum": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", + "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", "dependencies": { - "codeco": "^1.1.0" + "@didtools/cacao": "^3.0.0", + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0" }, "engines": { "node": ">=14.14" } }, - "node_modules/@didtools/pkh-ethereum/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@didtools/pkh-ethereum/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", - "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" - }, - "node_modules/@didtools/pkh-ethereum/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" - } - }, - "node_modules/@didtools/pkh-ethereum/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, "node_modules/@didtools/pkh-solana": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@didtools/pkh-solana/-/pkh-solana-0.2.0.tgz", @@ -2406,9 +2315,9 @@ } }, "node_modules/@graphql-tools/executor": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.2.tgz", - "integrity": "sha512-wZkyjndwlzi01HTU3PDveoucKA8qVO0hdKmJhjIGK/vRN/A4w5rDdeqRGcyXVss0clCAy3R6jpixCVu5pWs2Qg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.4.tgz", + "integrity": "sha512-aCO/5LEAwyTWObAAfpLlwAjaOjTxRX6YNXcGW62mglQhPBy+j0fTc4desci/4nJ49l8FWETaTG0MZ1G/PqQslg==", "dependencies": { "@graphql-tools/utils": "^10.1.1", "@graphql-typed-document-node/core": "3.2.0", @@ -2521,19 +2430,18 @@ } }, "node_modules/@ipld/dag-cbor": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", - "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", + "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", "dependencies": { - "cborg": "^1.6.0", - "multiformats": "^9.5.4" + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, - "node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - }, "node_modules/@ipld/dag-json": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.0.tgz", @@ -2547,14 +2455,6 @@ "npm": ">=7.0.0" } }, - "node_modules/@ipld/dag-json/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" - } - }, "node_modules/@ipld/dag-pb": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.0.tgz", @@ -3797,9 +3697,9 @@ "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" }, "node_modules/@stacks/common": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.10.0.tgz", - "integrity": "sha512-6x5Z7AKd9/kj3+DYE9xIDIkFLHihBH614i2wqrZIjN02WxVo063hWSjIlUxlx8P4gl6olVzlOy5LzhLJD9OP0A==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.13.0.tgz", + "integrity": "sha512-wwzyihjaSdmL6NxKvDeayy3dqM0L0Q2sawmdNtzJDi0FnXuJGm5PeapJj7bEfcI9XwI7Bw5jZoC6mCn9nc5YIw==", "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" @@ -3822,14 +3722,14 @@ } }, "node_modules/@stacks/encryption": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.12.1.tgz", - "integrity": "sha512-A8wCLQbL7g/vY5d4kfN3JRRg9qaSZSfafZqQNNo53U7uaLlAhxbQNhIOWdbLeo92r4jPwhJqiyF/1C9ua0XNIQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.13.0.tgz", + "integrity": "sha512-CsacBxY1XBVXBuJ5erJPjB5FmQ8KGJ/ft02/pIM6WrJ31ZcBdkn2BPV1AsPSD5qsIkiMdHAe14WKIwm8M2SWtQ==", "dependencies": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", "@scure/bip39": "1.1.0", - "@stacks/common": "^6.10.0", + "@stacks/common": "^6.13.0", "@types/node": "^18.0.4", "base64-js": "^1.5.1", "bs58": "^5.0.0", @@ -3857,23 +3757,23 @@ } }, "node_modules/@stacks/network": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.11.3.tgz", - "integrity": "sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.13.0.tgz", + "integrity": "sha512-Ss/Da4BNyPBBj1OieM981fJ7SkevKqLPkzoI1+Yo7cYR2df+0FipIN++Z4RfpJpc8ne60vgcx7nJZXQsiGhKBQ==", "dependencies": { - "@stacks/common": "^6.10.0", + "@stacks/common": "^6.13.0", "cross-fetch": "^3.1.5" } }, "node_modules/@stacks/transactions": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.12.1.tgz", - "integrity": "sha512-f2pM/6IkWN/PX2FG1PLRPOYLeSUYiu2l3FetB7m114bIALf/1E2+/qbECZrG3Y1f859rHY1EEjk39jbr/z2V3g==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.13.0.tgz", + "integrity": "sha512-xrx09qsXL/tWCkvAArzsFQqtZKDXyedjdVB9uX8xw+cQCi3xZ7r5MHMKzvEsTgJz3EO+MkQBXcvI1uzfuoqhcA==", "dependencies": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", - "@stacks/common": "^6.10.0", - "@stacks/network": "^6.11.3", + "@stacks/common": "^6.13.0", + "@stacks/network": "^6.13.0", "c32check": "^2.0.0", "lodash.clonedeep": "^4.5.0" } @@ -4087,6 +3987,15 @@ "secp256k1": "^4.0.3" } }, + "node_modules/@zondax/filecoin-signing-tools/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "dependencies": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, "node_modules/@zondax/filecoin-signing-tools/node_modules/@types/node": { "version": "10.12.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", @@ -4125,6 +4034,19 @@ "@noble/hashes": "^1.2.0" } }, + "node_modules/@zondax/filecoin-signing-tools/node_modules/cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", + "bin": { + "cborg": "cli.js" + } + }, + "node_modules/@zondax/filecoin-signing-tools/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node_modules/@zondax/filecoin-signing-tools/node_modules/node-gyp-build": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", @@ -4800,20 +4722,7 @@ "varintes": "^2.0.5" } }, - "node_modules/cartonne/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/cartonne/node_modules/cborg": { + "node_modules/cborg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", @@ -4821,14 +4730,6 @@ "cborg": "lib/bin.js" } }, - "node_modules/cborg": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", - "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", - "bin": { - "cborg": "cli.js" - } - }, "node_modules/chai": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", @@ -5081,47 +4982,12 @@ } }, "node_modules/dag-jose-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-3.0.0.tgz", - "integrity": "sha512-gu+XutOTy3kD8fDcA1SMjZ2U0mUOb/hxoRVZaMCizXN7Ssbc5dKOzeXQ4GquV4BdQzs3w5Y7irOpn2plFPIJfg==", - "dependencies": { - "@ipld/dag-cbor": "^7.0.1", - "multiformats": "^11.0.1" - } - }, - "node_modules/dag-jose-utils/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/dag-jose/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", + "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/dag-jose/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", - "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" - }, - "node_modules/dag-jose/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" + "@ipld/dag-cbor": "^9.0.7", + "multiformats": "^13.0.0" } }, "node_modules/dag-jose/node_modules/multiformats": { @@ -5334,115 +5200,88 @@ "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" }, - "node_modules/dids": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/dids/-/dids-4.0.4.tgz", - "integrity": "sha512-PKxQP0QFqgeMe0dbL7LCRdPJVhZU2ejj8RWCfJ6vro3a+o5o32cWNM1X6YXpdIWq6G5fTJw9KO2dHj2ZzYDc7w==", - "dependencies": { - "@didtools/cacao": "^2.1.0", - "@didtools/codecs": "^1.0.1", - "@didtools/pkh-ethereum": "^0.4.1", - "@stablelib/random": "^1.0.1", - "codeco": "^1.1.0", - "dag-jose-utils": "^3.0.0", - "did-jwt": "^7.2.0", - "did-resolver": "^4.1.0", - "multiformats": "^11.0.2", - "rpc-utils": "^0.6.1", - "uint8arrays": "^4.0.3" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/dids/node_modules/@didtools/cacao": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", - "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", + "node_modules/did-session": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/did-session/-/did-session-3.1.0.tgz", + "integrity": "sha512-EZAQHFqW08m8OuCU66i6qD2X7Xfqn18LwPLsH8qbV2LsyFCx5cyqgzg5UQFxziAQvMbvtXJ3YRNWk/b3bOJiaA==", "dependencies": { - "@didtools/codecs": "^1.0.1", - "@didtools/siwx": "1.0.0", - "@ipld/dag-cbor": "^9.0.1", + "@didtools/key-webcrypto": "^0.2.0", + "@stablelib/random": "^1.0.2", "caip": "^1.1.0", - "multiformats": "^11.0.2", - "uint8arrays": "^4.0.3" + "dids": "^5.0.2", + "key-did-provider-ed25519": "^4.0.2", + "key-did-resolver": "^4.0.0", + "uint8arrays": "^5.0.1" }, "engines": { "node": ">=14.14" } }, - "node_modules/dids/node_modules/@didtools/codecs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", - "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", + "node_modules/did-session/node_modules/key-did-provider-ed25519": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-4.0.2.tgz", + "integrity": "sha512-bnnRGuuUtylKGMVmgXVSoGccBg87roFi6xy5dQmTgNqnCmrxBBUatYoVimcnA+SGCFqi2qk6B9dD10Ed4rTZPg==", "dependencies": { - "codeco": "^1.1.0", - "multiformats": "^11.0.1", - "uint8arrays": "^4.0.3" + "@noble/curves": "^1.3.0", + "did-jwt": "^7.4.7", + "dids": "^5.0.2", + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^5.0.1" }, "engines": { "node": ">=14.14" } }, - "node_modules/dids/node_modules/@didtools/pkh-ethereum": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", - "integrity": "sha512-oE5bbyTauJ/WddaWnDK7bWns2E2LG4Ut33ICEcEQdlMoXM0902/vnGm8+6QE/yuLOyAllgf7DnDKvERF5IY6uQ==", + "node_modules/did-session/node_modules/key-did-resolver": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-4.0.0.tgz", + "integrity": "sha512-+U2nd/0rjO4Yqe2hnHBD7ygcLRfT43Oje9IIjv1BlBi0lopwxZpIFQ7GekguOHK02r+JGdl8mpJVNHs5lvXVOA==", "dependencies": { - "@didtools/cacao": "^2.1.0", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" + "@noble/curves": "^1.2.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", + "varint": "^6.0.0" }, "engines": { "node": ">=14.14" } }, - "node_modules/dids/node_modules/@didtools/siwx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", - "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "node_modules/did-session/node_modules/uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "dependencies": { - "codeco": "^1.1.0" - }, - "engines": { - "node": ">=14.14" + "multiformats": "^13.0.0" } }, - "node_modules/dids/node_modules/@ipld/dag-cbor": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz", - "integrity": "sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ==", + "node_modules/dids": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", + "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.0.0" + "@didtools/cacao": "^3.0.1", + "@didtools/codecs": "^3.0.0", + "@didtools/pkh-ethereum": "^0.5.0", + "@stablelib/random": "^1.0.2", + "codeco": "^1.2.0", + "dag-jose-utils": "^4.0.0", + "did-jwt": "^7.4.7", + "did-resolver": "^4.1.0", + "multiformats": "^13.0.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^5.0.1" }, "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/dids/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" - }, - "node_modules/dids/node_modules/cborg": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", - "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==", - "bin": { - "cborg": "lib/bin.js" + "node": ">=14.14" } }, - "node_modules/dids/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node_modules/dids/node_modules/uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", + "dependencies": { + "multiformats": "^13.0.0" } }, "node_modules/diff-sequences": { @@ -5476,17 +5315,6 @@ "node": ">=6" } }, - "node_modules/dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/dset": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", @@ -6666,32 +6494,6 @@ "npm": ">=7.0.0" } }, - "node_modules/ipfs-http-client/node_modules/@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "dependencies": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/ipfs-http-client/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", - "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" - }, - "node_modules/ipfs-http-client/node_modules/cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==", - "bin": { - "cborg": "lib/bin.js" - } - }, "node_modules/ipfs-http-client/node_modules/it-first": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/it-first/-/it-first-2.0.1.tgz", @@ -7070,6 +6872,122 @@ "node": ">=14.14" } }, + "node_modules/key-did-provider-ed25519/node_modules/@didtools/cacao": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", + "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", + "dependencies": { + "@didtools/codecs": "^1.0.1", + "@didtools/siwx": "1.0.0", + "@ipld/dag-cbor": "^9.0.1", + "caip": "^1.1.0", + "multiformats": "^11.0.2", + "uint8arrays": "^4.0.3" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/@didtools/codecs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", + "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", + "dependencies": { + "codeco": "^1.1.0", + "multiformats": "^11.0.1", + "uint8arrays": "^4.0.3" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/@didtools/pkh-ethereum": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", + "integrity": "sha512-oE5bbyTauJ/WddaWnDK7bWns2E2LG4Ut33ICEcEQdlMoXM0902/vnGm8+6QE/yuLOyAllgf7DnDKvERF5IY6uQ==", + "dependencies": { + "@didtools/cacao": "^2.1.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/@didtools/siwx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", + "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "dependencies": { + "codeco": "^1.1.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", + "bin": { + "cborg": "cli.js" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/dag-jose-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-3.0.0.tgz", + "integrity": "sha512-gu+XutOTy3kD8fDcA1SMjZ2U0mUOb/hxoRVZaMCizXN7Ssbc5dKOzeXQ4GquV4BdQzs3w5Y7irOpn2plFPIJfg==", + "dependencies": { + "@ipld/dag-cbor": "^7.0.1", + "multiformats": "^11.0.1" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/dag-jose-utils/node_modules/@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "dependencies": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/dag-jose-utils/node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, + "node_modules/key-did-provider-ed25519/node_modules/dids": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/dids/-/dids-4.0.4.tgz", + "integrity": "sha512-PKxQP0QFqgeMe0dbL7LCRdPJVhZU2ejj8RWCfJ6vro3a+o5o32cWNM1X6YXpdIWq6G5fTJw9KO2dHj2ZzYDc7w==", + "dependencies": { + "@didtools/cacao": "^2.1.0", + "@didtools/codecs": "^1.0.1", + "@didtools/pkh-ethereum": "^0.4.1", + "@stablelib/random": "^1.0.1", + "codeco": "^1.1.0", + "dag-jose-utils": "^3.0.0", + "did-jwt": "^7.2.0", + "did-resolver": "^4.1.0", + "multiformats": "^11.0.2", + "rpc-utils": "^0.6.1", + "uint8arrays": "^4.0.3" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/key-did-provider-ed25519/node_modules/multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/key-did-resolver": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-3.0.0.tgz", @@ -9486,9 +9404,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -10329,21 +10247,21 @@ } }, "@ceramicnetwork/anchor-listener": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-listener/-/anchor-listener-4.2.0.tgz", - "integrity": "sha512-Gxe4KzuV2sOpEoqp7SSWaPdXPJnOg+Pal8QBQrM1e/ctQTLqPA86GXLzfzN7fW3OIU5r05EikdX+B4tlwVRQsA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-listener/-/anchor-listener-4.3.0.tgz", + "integrity": "sha512-9kLg7YjHT6jn4DtlwkDMniZm0Ze98WDr7Md6xI4eEY5HCDk5yfL62oiIvt7+Al5gf4mIFT9lsP+IShCGgNEW0Q==", "requires": { - "@ceramicnetwork/anchor-utils": "^4.2.0", + "@ceramicnetwork/anchor-utils": "^4.3.0", "@ethersproject/providers": "^5.5.1", "rxjs": "^7.8.1" } }, "@ceramicnetwork/anchor-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-utils/-/anchor-utils-4.2.0.tgz", - "integrity": "sha512-R4gqTcPZTEyNI31TQIX9plkMazObJ2dzyYk/2gJEkQrktohP9gtpm9eYIDicHj41bWeoubgDwJ7S4mKQ4Xokeg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/anchor-utils/-/anchor-utils-4.3.0.tgz", + "integrity": "sha512-dIuazx0WSnqxSMpaP6In2OjfdWpSsFbGCFRip9FO68kmm+GPh/EPpLzQsCNPBDGrO5XGmSTmkMoQUcu9UhFvOQ==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ethersproject/abi": "^5.7.0", "multiformats": "^13.0.0", "uint8arrays": "^5.0.1" @@ -10384,12 +10302,12 @@ } }, "@ceramicnetwork/blockchain-utils-validation": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-validation/-/blockchain-utils-validation-5.2.0.tgz", - "integrity": "sha512-GmmAYXOTOSxaR5Cv8JWx4j4/Y11MOkjDAI3l0pXlPapxE3/nluDLbYQURkaSaHxdVylVh6Re7GI9EnQfmepNuw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/blockchain-utils-validation/-/blockchain-utils-validation-5.3.0.tgz", + "integrity": "sha512-7dUZVR9wezc4Fjml76FwicWrF2+ogBJ72XKNBjR4lHv5VXlEZRmeqntiw0ZpNQJInut4tvqJIex6Fu2AAHdjWw==", "requires": { "@ceramicnetwork/blockchain-utils-linking": "^5.0.0", - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ethersproject/contracts": "^5.5.0", "@ethersproject/providers": "^5.5.1", "@ethersproject/wallet": "^5.5.0", @@ -10415,11 +10333,11 @@ } }, "@ceramicnetwork/codecs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-4.2.0.tgz", - "integrity": "sha512-II/KXww5nWJnK86nt2+9edJ6f/opC4sNwdAumZr0fHRnjzrLm0s5hjfM/9N0s0P5k5x9VHxJ1bmlUTpMQdlMyg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-4.3.0.tgz", + "integrity": "sha512-FT+EoPis+F/E+nUGFi2osP5b1JpPaUKYWhkVX6J/s5A7PPpPxyNnfM0h3B+LIsaDef5jSTtNWI9L3AhrNAjPXg==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "cartonne": "^3.0.1", "codeco": "^1.1.0", @@ -10439,9 +10357,9 @@ } }, "@ceramicnetwork/common": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-5.2.0.tgz", - "integrity": "sha512-JTuaegNKFRCQiQcZ1nxtUwOoQjuk0zp3d22X24pKxXBWuKyUmqYg7BXfqeGc4gwK9uF1ll+y9ERgCh3li2/1qA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-5.3.0.tgz", + "integrity": "sha512-di+A+NaDg2lxgxNGv5yRTgCSK2zu9rU3HCjwpuS73FKikQSE01oZpXgdOIt1liDHxAzw8GWApaYAlSzc+7bLqg==", "requires": { "@ceramicnetwork/streamid": "^5.0.0", "@didtools/cacao": "^3.0.0", @@ -10462,19 +10380,91 @@ "uint8arrays": "^5.0.1" }, "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", + "@didtools/codecs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", + "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" + "codeco": "^1.1.0", + "multiformats": "^11.0.1", + "uint8arrays": "^4.0.3" + }, + "dependencies": { + "multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" + }, + "uint8arrays": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "requires": { + "multiformats": "^12.0.1" + }, + "dependencies": { + "multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==" + } + } + } } }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" + "@didtools/pkh-ethereum": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.2.1.tgz", + "integrity": "sha512-apQefbOqqy8HQMDNVG0ITxHLr9I5iZrjADX+mPB+ie1ue8MO8pOHMifLQ3j0R6RjS2einCd+hEZ4Ib4AKs3Xlw==", + "requires": { + "@didtools/cacao": "^2.0.0", + "@ethersproject/wallet": "^5.7.0", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0" + }, + "dependencies": { + "@didtools/cacao": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", + "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", + "requires": { + "@didtools/codecs": "^1.0.1", + "@didtools/siwx": "1.0.0", + "@ipld/dag-cbor": "^9.0.1", + "caip": "^1.1.0", + "multiformats": "^11.0.2", + "uint8arrays": "^4.0.3" + } + }, + "multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" + }, + "uint8arrays": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "requires": { + "multiformats": "^12.0.1" + }, + "dependencies": { + "multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==" + } + } + } + } + }, + "@didtools/siwx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", + "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "requires": { + "codeco": "^1.1.0" + } }, "uint8arrays": { "version": "5.0.3", @@ -10487,28 +10477,28 @@ } }, "@ceramicnetwork/core": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/core/-/core-5.3.0.tgz", - "integrity": "sha512-V6iIGyt6P53kOisX7wMCoHwXMRiEV6tHjxEcDQYipZh55sHP6ZwDLujsUTkEq9MlkuflzBrzIorHx0GLQoQJiA==", - "requires": { - "@ceramicnetwork/anchor-listener": "^4.2.0", - "@ceramicnetwork/anchor-utils": "^4.2.0", - "@ceramicnetwork/codecs": "^4.2.0", - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/indexing": "^4.3.0", - "@ceramicnetwork/ipfs-topology": "^5.2.0", - "@ceramicnetwork/job-queue": "^4.3.0", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/core/-/core-5.4.0.tgz", + "integrity": "sha512-P6SBwUnpYrZw2JCLwI/ywza21xQEIRGzMOoDZC+I3CP0bkI6F8nY6Sw1+J93ds54DjrliKdReCEiEdPNEfSmXQ==", + "requires": { + "@ceramicnetwork/anchor-listener": "^4.3.0", + "@ceramicnetwork/anchor-utils": "^4.3.0", + "@ceramicnetwork/codecs": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/indexing": "^4.4.0", + "@ceramicnetwork/ipfs-topology": "^5.3.0", + "@ceramicnetwork/job-queue": "^4.4.0", "@ceramicnetwork/observability": "^1.4.4", - "@ceramicnetwork/pinning-aggregation": "^5.2.0", - "@ceramicnetwork/pinning-ipfs-backend": "^5.2.0", - "@ceramicnetwork/stream-caip10-link": "^5.2.0", - "@ceramicnetwork/stream-caip10-link-handler": "^5.3.0", - "@ceramicnetwork/stream-model": "^4.2.0", - "@ceramicnetwork/stream-model-handler": "^4.3.0", - "@ceramicnetwork/stream-model-instance": "^4.3.0", - "@ceramicnetwork/stream-model-instance-handler": "^4.3.0", - "@ceramicnetwork/stream-tile": "^5.2.0", - "@ceramicnetwork/stream-tile-handler": "^5.3.0", + "@ceramicnetwork/pinning-aggregation": "^5.3.0", + "@ceramicnetwork/pinning-ipfs-backend": "^5.3.0", + "@ceramicnetwork/stream-caip10-link": "^5.3.0", + "@ceramicnetwork/stream-caip10-link-handler": "^5.4.0", + "@ceramicnetwork/stream-model": "^4.3.0", + "@ceramicnetwork/stream-model-handler": "^4.4.0", + "@ceramicnetwork/stream-model-instance": "^4.4.0", + "@ceramicnetwork/stream-model-instance-handler": "^4.4.0", + "@ceramicnetwork/stream-tile": "^5.3.0", + "@ceramicnetwork/stream-tile-handler": "^5.4.0", "@ceramicnetwork/streamid": "^5.0.0", "@ceramicnetwork/wasm-bloom-filter": "^0.1.0", "@datastructures-js/priority-queue": "^6.1.0", @@ -10541,60 +10531,26 @@ "uint8arrays": "^5.0.1" }, "dependencies": { - "@didtools/pkh-ethereum": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", - "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", - "requires": { - "@didtools/cacao": "^3.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, - "dag-jose-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", - "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", "requires": { - "@ipld/dag-cbor": "^9.0.7", - "multiformats": "^13.0.0" + "cborg": "^1.6.0", + "multiformats": "^9.5.4" }, "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - } + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" } } }, - "dids": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", - "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", - "requires": { - "@didtools/cacao": "^3.0.1", - "@didtools/codecs": "^3.0.0", - "@didtools/pkh-ethereum": "^0.5.0", - "@stablelib/random": "^1.0.2", - "codeco": "^1.2.0", - "dag-jose-utils": "^4.0.0", - "did-jwt": "^7.4.7", - "did-resolver": "^4.1.0", - "multiformats": "^13.0.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - } + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" }, "uint8arrays": { "version": "5.0.3", @@ -10607,15 +10563,15 @@ } }, "@ceramicnetwork/http-client": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-5.3.0.tgz", - "integrity": "sha512-tex/zsJT47fIYJJvZekVjM1xAeUqBkRsdWBzjL6ZWrq/Prk+z+/J+q7M03p0NNelG3FGStP8dteZ1wVG8mIZDA==", - "requires": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-caip10-link": "^5.2.0", - "@ceramicnetwork/stream-model": "^4.2.0", - "@ceramicnetwork/stream-model-instance": "^4.3.0", - "@ceramicnetwork/stream-tile": "^5.2.0", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-5.4.0.tgz", + "integrity": "sha512-ABG0OA3p/cOpV472gegFE7Xcuv4g7foWh/nLEuYnB+O9iPFym3/SkFDMJ4+F84T6eL2TkdjassYgY7saV8HlKA==", + "requires": { + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-caip10-link": "^5.3.0", + "@ceramicnetwork/stream-model": "^4.3.0", + "@ceramicnetwork/stream-model-instance": "^4.4.0", + "@ceramicnetwork/stream-tile": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@scarf/scarf": "^1.1.1", "query-string": "^7.1.0", @@ -10623,15 +10579,15 @@ } }, "@ceramicnetwork/indexing": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/indexing/-/indexing-4.3.0.tgz", - "integrity": "sha512-NdjDNKK3GT5GqPvr/ZqBsoJMPHpOWjJZao0Zrl9dXP2alzMlWacXKRAyApMSVRg9XwMNHwkrx9EgJBQ/234ODQ==", - "requires": { - "@ceramicnetwork/anchor-listener": "^4.2.0", - "@ceramicnetwork/anchor-utils": "^4.2.0", - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/job-queue": "^4.3.0", - "@ceramicnetwork/stream-model": "^4.2.0", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/indexing/-/indexing-4.4.0.tgz", + "integrity": "sha512-Nfaye7h9ZTPsA7AA3dRGiuqMMLJJy70DlsPmguwLaeZKCuLVFygP2n8Ylx7IpBwLdSyoBYM6ZQhoCEovmApXyg==", + "requires": { + "@ceramicnetwork/anchor-listener": "^4.3.0", + "@ceramicnetwork/anchor-utils": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/job-queue": "^4.4.0", + "@ceramicnetwork/stream-model": "^4.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ethersproject/providers": "^5.5.1", "knex": "^2.5.1", @@ -10654,19 +10610,19 @@ } }, "@ceramicnetwork/ipfs-topology": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-topology/-/ipfs-topology-5.2.0.tgz", - "integrity": "sha512-FGc+x/sYihKITe6IImxPkIBu3Y8ldU9m4LmZxfcDzG0YbLMG9fmL88jh80XEcxSEw2nmQg3GnuMASGnbYAU8WQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/ipfs-topology/-/ipfs-topology-5.3.0.tgz", + "integrity": "sha512-augxF+jbd1uXKiOb9r1BzqaQ7783X9BWcneLLZRSWgfRrMK7NxVdZJXlH8xfyZPQi3BY7A0LGGvYzeBKOuYIbw==", "requires": { - "@ceramicnetwork/common": "^5.2.0" + "@ceramicnetwork/common": "^5.3.0" } }, "@ceramicnetwork/job-queue": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/job-queue/-/job-queue-4.3.0.tgz", - "integrity": "sha512-QExfKU2/HR368hw77maFG76h996MewTKrOlOhveBzT0G8bE+hwH0E5iP4+HiII8BPZSjY5K9+MQNP0gxKQH23w==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/job-queue/-/job-queue-4.4.0.tgz", + "integrity": "sha512-k0jn7qD+0t6uV8ogL1OPYHIb0hR0MG8HteVu2uqXgHdwJFBngnZrRaFTcLF6uSS5fKc7r1/+ugx1n8oqADSwOw==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "pg": "^8.11.3", "pg-boss": "^8.2.0", "rxjs": "^7.8.1" @@ -10696,9 +10652,9 @@ } }, "@ceramicnetwork/pinning-aggregation": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-aggregation/-/pinning-aggregation-5.2.0.tgz", - "integrity": "sha512-5q/5Q3pJmGmT5hNIuda2ckHFGUAnnXAfwGGvHbtLKDLC0Ct1qWymME3eFtuH1768xf0wAAz65Kb8Xy3EZY6YVg==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-aggregation/-/pinning-aggregation-5.3.0.tgz", + "integrity": "sha512-zFzB08ds0VrKeIwtzuq19I3XDx8Z3FsoVQDUTP0dcNaTJHrYk31yd9kv2+YNtli/UKjZhWhSRyMDhsRnoEUv6A==", "requires": { "@stablelib/sha256": "^1.0.1", "uint8arrays": "^5.0.1" @@ -10715,9 +10671,9 @@ } }, "@ceramicnetwork/pinning-ipfs-backend": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-ipfs-backend/-/pinning-ipfs-backend-5.2.0.tgz", - "integrity": "sha512-1JLeewTHaB8Ii2dCAN/w/sSptnLXLYtc2LdtNs/fp9c4PHNaAc2MNkjr5a2zxoQ7k4DouCPC/0W19kb1vO2J6g==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/pinning-ipfs-backend/-/pinning-ipfs-backend-5.3.0.tgz", + "integrity": "sha512-7DO6i2kac1jFKeGOaJ6KbgF9Tp8LS7NvtLZilnvr5bH/UFnNFMLJZ9ycHj5ErRPREY7yXAB9RhVxK/xO4775nQ==", "requires": { "@stablelib/sha256": "^1.0.1", "ipfs-http-client": "^60.0.0", @@ -10735,11 +10691,11 @@ } }, "@ceramicnetwork/stream-caip10-link": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-5.2.0.tgz", - "integrity": "sha512-CV6/8EhidIvUNr9R/TqcljlD2MxGR+uOR5rWEePaIfHWqrGXX7XIm7kZ+qtkNKo9q38FaenAG35JB6kmP+z49Q==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-5.3.0.tgz", + "integrity": "sha512-/0WGIS3BtRO9VBRxdc2+aCpcGbRXiiWGb+dUk6iF18awfiFv8xzhBJahg8wAHtJiOHLUEdKMCh2vAT2muuRczA==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "caip": "~1.1.0", "did-resolver": "^4.0.1", @@ -10747,33 +10703,33 @@ } }, "@ceramicnetwork/stream-caip10-link-handler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link-handler/-/stream-caip10-link-handler-5.3.0.tgz", - "integrity": "sha512-n0snvr5qYgj6xSqlD8OWQR6jfr1/a0Bdd9KILUxxp4yK6k46lO9edGkT26coOTxzASJMu9ZDu2H3uQQXkQFHJw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link-handler/-/stream-caip10-link-handler-5.4.0.tgz", + "integrity": "sha512-qCu4dlr0byfDIHhRDsW7rXQlQYUMkuxkzvVqYBVBk0OZ3a4RwzTicQ8unqbM4ZBN9HTKcwYtUJmOcb7+ncySrw==", "requires": { - "@ceramicnetwork/blockchain-utils-validation": "^5.2.0", - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-caip10-link": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0" + "@ceramicnetwork/blockchain-utils-validation": "^5.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-caip10-link": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0" } }, "@ceramicnetwork/stream-handler-common": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-handler-common/-/stream-handler-common-4.2.0.tgz", - "integrity": "sha512-ReKWLczmeYuH7heAa4AvBDTpfp2w6vtxsOq9u5+XJES9Zbeu3owNa5rGsDJuSqFvrinxOA8/g96vZOQS7zINBg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-handler-common/-/stream-handler-common-4.3.0.tgz", + "integrity": "sha512-7Hci2u+tEjeHxzTuHyiXpS4LpaIsMf5moI4yV2RrAlD4qzTyubtJM4V7e5UeTbz9AGRYk5zBwkantiI2WGgwhQ==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "lodash.clonedeep": "^4.5.0" } }, "@ceramicnetwork/stream-model": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-4.2.0.tgz", - "integrity": "sha512-i+AvhHqyDVT6iZtTXkJZCctHxjsSNn5o9KwmiaFB/ZTT6QeOLUJ5EOXCQ4tmLDjb4qy6xgxUb9JLehilgC6QCw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-4.3.0.tgz", + "integrity": "sha512-geuPxSWiA4U8TgoL1FhV1bFcojRudDITwBRUlBm0/7azBZVfbF1BpEINUAXeEGWYNfzI1Rgz3gLnAzDCnOyTmA==", "requires": { - "@ceramicnetwork/codecs": "^4.2.0", - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/codecs": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -10786,6 +10742,27 @@ "uint8arrays": "^5.0.1" }, "dependencies": { + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "requires": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + }, + "dependencies": { + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + } + } + }, + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + }, "uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -10797,13 +10774,13 @@ } }, "@ceramicnetwork/stream-model-handler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-handler/-/stream-model-handler-4.3.0.tgz", - "integrity": "sha512-ZWc6vtE4kPriHH2ie8aN8tbyWHilP0S3gcnyEeAwnO02S/kbphhXjUQ0Jg3oiIaYle83awyebt6oRlk08HwF6w==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-handler/-/stream-model-handler-4.4.0.tgz", + "integrity": "sha512-DUHee9CyVf+RVWLB40cnTtLZQt8Cn/CrBW/vrexr773B8y7wQcClZ2EsD3umgbJF2qBO/LM6DKOJLoWGYyoGAg==", "requires": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0", - "@ceramicnetwork/stream-model": "^4.2.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0", + "@ceramicnetwork/stream-model": "^4.3.0", "@ceramicnetwork/streamid": "^5.0.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -10825,11 +10802,11 @@ } }, "@ceramicnetwork/stream-model-instance": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-4.3.0.tgz", - "integrity": "sha512-BTaRGdfypAra4qKx1QrHjBNuRDBQEPql1GPwiRz0lZW2yclyNo9jOuN+oYs4jjYMne1Gv1ueF6U0qDgbBge7Hg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-4.4.0.tgz", + "integrity": "sha512-GWk6Nb8JMUXuVTDxmfq3zvIbHuYVtCe/vqFXcEIMyzwwcqC+qaEfreIT3QdtLv38Pnc9TRxlG/H9uKmjZ1HRww==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -10838,6 +10815,27 @@ "uint8arrays": "^5.0.1" }, "dependencies": { + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "requires": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + }, + "dependencies": { + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + } + } + }, + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + }, "uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -10849,14 +10847,14 @@ } }, "@ceramicnetwork/stream-model-instance-handler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance-handler/-/stream-model-instance-handler-4.3.0.tgz", - "integrity": "sha512-+ndJnSP7eE/km0veYlyJqhvomE9AkiGsisQw2Vkafu1cpihMcjv3dRuu2imv7rbFYSEWMJhhoyA/0anibimnRw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance-handler/-/stream-model-instance-handler-4.4.0.tgz", + "integrity": "sha512-auvPWJrW4Z7ITTalLqsVc98/+Ah7/P9Ys3Mt8KmVWlcYF1Tkb1ZHEVR3yaA0negn3mA5ZN+jYDvudppZGBctAA==", "requires": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0", - "@ceramicnetwork/stream-model": "^4.2.0", - "@ceramicnetwork/stream-model-instance": "^4.3.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0", + "@ceramicnetwork/stream-model": "^4.3.0", + "@ceramicnetwork/stream-model-instance": "^4.4.0", "@ceramicnetwork/streamid": "^5.0.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -10877,11 +10875,11 @@ } }, "@ceramicnetwork/stream-tile": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-5.2.0.tgz", - "integrity": "sha512-c4lNpwlCl7cpBdBwpYm8lqMKfV7yZAPOYnD14w+SAHNmsz6W6UOOMfN0xkgR7YSu6K80zNoIyZefCJKsn0apaA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-5.3.0.tgz", + "integrity": "sha512-vM7EpvUZLfz8p73fZBHVYGQ9rN+UbCX8z9PPX1aj7zSGoiwzqVGoskbzgpAqyKuaTAiFrX7rI/Z5eZaQ8NXi7g==", "requires": { - "@ceramicnetwork/common": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "@ipld/dag-cbor": "^7.0.0", "@stablelib/random": "^1.0.1", @@ -10891,60 +10889,26 @@ "uint8arrays": "^5.0.1" }, "dependencies": { - "@didtools/pkh-ethereum": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", - "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", - "requires": { - "@didtools/cacao": "^3.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, - "dag-jose-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", - "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", "requires": { - "@ipld/dag-cbor": "^9.0.7", - "multiformats": "^13.0.0" + "cborg": "^1.6.0", + "multiformats": "^9.5.4" }, "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - } + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" } } }, - "dids": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", - "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", - "requires": { - "@didtools/cacao": "^3.0.1", - "@didtools/codecs": "^3.0.0", - "@didtools/pkh-ethereum": "^0.5.0", - "@stablelib/random": "^1.0.2", - "codeco": "^1.2.0", - "dag-jose-utils": "^4.0.0", - "did-jwt": "^7.4.7", - "did-resolver": "^4.1.0", - "multiformats": "^13.0.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - } + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" }, "uint8arrays": { "version": "5.0.3", @@ -10957,13 +10921,13 @@ } }, "@ceramicnetwork/stream-tile-handler": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile-handler/-/stream-tile-handler-5.3.0.tgz", - "integrity": "sha512-gsFxLUovTo7vaLwgBy14OzXAT3ZQyjQ/vZxaFJKF0n6cg+hdbO1hJJt9gEOuzwmoR+haXt1Lwu3JSCigxIK2jg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile-handler/-/stream-tile-handler-5.4.0.tgz", + "integrity": "sha512-JAReOVJjWV1btNkZ4/jybeFB5Y0aIM9R4hHQ19uArAEiTPVYp/bFREBZYnGvQquVSo0fuiPDqWY+zxQxuCXFiA==", "requires": { - "@ceramicnetwork/common": "^5.2.0", - "@ceramicnetwork/stream-handler-common": "^4.2.0", - "@ceramicnetwork/stream-tile": "^5.2.0", + "@ceramicnetwork/common": "^5.3.0", + "@ceramicnetwork/stream-handler-common": "^4.3.0", + "@ceramicnetwork/stream-tile": "^5.3.0", "@ceramicnetwork/streamid": "^5.0.0", "ajv": "^8.8.2", "ajv-formats": "^2.1.1", @@ -10997,10 +10961,26 @@ "varint": "^6.0.0" }, "dependencies": { - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "requires": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + }, + "dependencies": { + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + }, + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + } + } }, "uint8arrays": { "version": "5.0.3", @@ -11104,69 +11084,6 @@ "@ceramicnetwork/stream-model-instance": "^4.2.0", "dids": "^5.0.2", "json-schema-typed": "^8.0.1" - }, - "dependencies": { - "@didtools/pkh-ethereum": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", - "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", - "requires": { - "@didtools/cacao": "^3.0.0", - "@noble/curves": "^1.2.0", - "@noble/hashes": "^1.3.2", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - } - }, - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, - "dag-jose-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", - "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", - "requires": { - "@ipld/dag-cbor": "^9.0.7", - "multiformats": "^13.0.0" - } - }, - "dids": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", - "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", - "requires": { - "@didtools/cacao": "^3.0.1", - "@didtools/codecs": "^3.0.0", - "@didtools/pkh-ethereum": "^0.5.0", - "@stablelib/random": "^1.0.2", - "codeco": "^1.2.0", - "dag-jose-utils": "^4.0.0", - "did-jwt": "^7.4.7", - "did-resolver": "^4.1.0", - "multiformats": "^13.0.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - } - }, - "uint8arrays": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", - "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", - "requires": { - "multiformats": "^13.0.0" - } - } } }, "@datastructures-js/heap": { @@ -11191,13 +11108,13 @@ } }, "@desci-labs/desci-codex-lib": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.6.tgz", - "integrity": "sha512-W4u5Gm1UH2ife09OdpVgxPnZtZu4LFnCbUQdOpmYUIxXCW5KRIIKFsvXoSNXpxKYPptXZzwip0Zq6CP5iNiehg==", + "version": "1.1.7-rc0", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.7-rc0.tgz", + "integrity": "sha512-IFz3ApgI3Ya8RtRtaUknT3Gh8UPF1fkGvnkzXktTUo/T32UxUR2x+e00NheBfeXuaek6LQzogBOMooVDBKmscA==", "requires": { "@composedb/client": "^0.7.1", "@desci-labs/desci-codex-composedb": "^2.0.0", - "dids": "^4.0.4", + "dids": "^5.0.2", "gql-query-builder": "^3.8.0", "graphql": "^16.8.0", "key-did-provider-ed25519": "^3.0.2", @@ -11206,9 +11123,9 @@ } }, "@desci-labs/desci-contracts": { - "version": "0.2.0-rc1", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.0-rc1.tgz", - "integrity": "sha512-tYUjJOcq2w6Ff3jmXJ+X0DI0Tu+W/LJrrJL9lXQ1BjHQClbX3xpTy7UCK4PuNSSpnjT/psIaoc8ck+n0Nfo1hw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.1.tgz", + "integrity": "sha512-1O5JkLlFaiuyTvR8tACgWdv9NpqILGf9NyyvGSuseai/wYgbCTK2qhC38R2LvGUFGWQqlXi127dFO5xD2R15fw==", "dev": true, "requires": { "@openzeppelin/contracts": "^4.8.1", @@ -11248,20 +11165,6 @@ "viem": "^1.21.4" }, "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, "uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -11292,76 +11195,39 @@ } } }, - "@didtools/pkh-ethereum": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.2.1.tgz", - "integrity": "sha512-apQefbOqqy8HQMDNVG0ITxHLr9I5iZrjADX+mPB+ie1ue8MO8pOHMifLQ3j0R6RjS2einCd+hEZ4Ib4AKs3Xlw==", + "@didtools/key-webcrypto": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@didtools/key-webcrypto/-/key-webcrypto-0.2.0.tgz", + "integrity": "sha512-5WK2Np0Tb6ApDoK71vYmEGiIdwLKzaEjr5KTK6RXFdl5xJnOYOHGkn4Ohco9D0UsoUGyDZE/ztlXmPQIbzHXQA==", "requires": { - "@didtools/cacao": "^2.0.0", - "@ethersproject/wallet": "^5.7.0", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^5.0.1", + "varint": "^6.0.0" }, "dependencies": { - "@didtools/cacao": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", - "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", - "requires": { - "@didtools/codecs": "^1.0.1", - "@didtools/siwx": "1.0.0", - "@ipld/dag-cbor": "^9.0.1", - "caip": "^1.1.0", - "multiformats": "^11.0.2", - "uint8arrays": "^4.0.3" - } - }, - "@didtools/codecs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", - "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", - "requires": { - "codeco": "^1.1.0", - "multiformats": "^11.0.1", - "uint8arrays": "^4.0.3" - } - }, - "@didtools/siwx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", - "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", - "requires": { - "codeco": "^1.1.0" - } - }, - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", + "uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "dependencies": { - "multiformats": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", - "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" - } + "multiformats": "^13.0.0" } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, - "multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" } } }, + "@didtools/pkh-ethereum": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.5.0.tgz", + "integrity": "sha512-2S+TS/I2jVTNnkgyslxQvSjCzzLsCabjXD2UWjJnVkAoxeJgPE9GvY1JhTDgvVLfxLPnYwTIP/O1WR9wJcDkFg==", + "requires": { + "@didtools/cacao": "^3.0.0", + "@noble/curves": "^1.2.0", + "@noble/hashes": "^1.3.2", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0" + } + }, "@didtools/pkh-solana": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@didtools/pkh-solana/-/pkh-solana-0.2.0.tgz", @@ -12019,9 +11885,9 @@ } }, "@graphql-tools/executor": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.2.tgz", - "integrity": "sha512-wZkyjndwlzi01HTU3PDveoucKA8qVO0hdKmJhjIGK/vRN/A4w5rDdeqRGcyXVss0clCAy3R6jpixCVu5pWs2Qg==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.4.tgz", + "integrity": "sha512-aCO/5LEAwyTWObAAfpLlwAjaOjTxRX6YNXcGW62mglQhPBy+j0fTc4desci/4nJ49l8FWETaTG0MZ1G/PqQslg==", "requires": { "@graphql-tools/utils": "^10.1.1", "@graphql-typed-document-node/core": "3.2.0", @@ -12096,19 +11962,12 @@ "requires": {} }, "@ipld/dag-cbor": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", - "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", - "requires": { - "cborg": "^1.6.0", - "multiformats": "^9.5.4" - }, - "dependencies": { - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - } + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", + "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", + "requires": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" } }, "@ipld/dag-json": { @@ -12118,13 +11977,6 @@ "requires": { "cborg": "^4.0.0", "multiformats": "^13.1.0" - }, - "dependencies": { - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - } } }, "@ipld/dag-pb": { @@ -13084,9 +12936,9 @@ "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" }, "@stacks/common": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.10.0.tgz", - "integrity": "sha512-6x5Z7AKd9/kj3+DYE9xIDIkFLHihBH614i2wqrZIjN02WxVo063hWSjIlUxlx8P4gl6olVzlOy5LzhLJD9OP0A==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.13.0.tgz", + "integrity": "sha512-wwzyihjaSdmL6NxKvDeayy3dqM0L0Q2sawmdNtzJDi0FnXuJGm5PeapJj7bEfcI9XwI7Bw5jZoC6mCn9nc5YIw==", "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" @@ -13111,14 +12963,14 @@ } }, "@stacks/encryption": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.12.1.tgz", - "integrity": "sha512-A8wCLQbL7g/vY5d4kfN3JRRg9qaSZSfafZqQNNo53U7uaLlAhxbQNhIOWdbLeo92r4jPwhJqiyF/1C9ua0XNIQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.13.0.tgz", + "integrity": "sha512-CsacBxY1XBVXBuJ5erJPjB5FmQ8KGJ/ft02/pIM6WrJ31ZcBdkn2BPV1AsPSD5qsIkiMdHAe14WKIwm8M2SWtQ==", "requires": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", "@scure/bip39": "1.1.0", - "@stacks/common": "^6.10.0", + "@stacks/common": "^6.13.0", "@types/node": "^18.0.4", "base64-js": "^1.5.1", "bs58": "^5.0.0", @@ -13142,23 +12994,23 @@ } }, "@stacks/network": { - "version": "6.11.3", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.11.3.tgz", - "integrity": "sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.13.0.tgz", + "integrity": "sha512-Ss/Da4BNyPBBj1OieM981fJ7SkevKqLPkzoI1+Yo7cYR2df+0FipIN++Z4RfpJpc8ne60vgcx7nJZXQsiGhKBQ==", "requires": { - "@stacks/common": "^6.10.0", + "@stacks/common": "^6.13.0", "cross-fetch": "^3.1.5" } }, "@stacks/transactions": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.12.1.tgz", - "integrity": "sha512-f2pM/6IkWN/PX2FG1PLRPOYLeSUYiu2l3FetB7m114bIALf/1E2+/qbECZrG3Y1f859rHY1EEjk39jbr/z2V3g==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.13.0.tgz", + "integrity": "sha512-xrx09qsXL/tWCkvAArzsFQqtZKDXyedjdVB9uX8xw+cQCi3xZ7r5MHMKzvEsTgJz3EO+MkQBXcvI1uzfuoqhcA==", "requires": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", - "@stacks/common": "^6.10.0", - "@stacks/network": "^6.11.3", + "@stacks/common": "^6.13.0", + "@stacks/network": "^6.13.0", "c32check": "^2.0.0", "lodash.clonedeep": "^4.5.0" }, @@ -13338,6 +13190,15 @@ "secp256k1": "^4.0.3" }, "dependencies": { + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "requires": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + } + }, "@types/node": { "version": "10.12.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz", @@ -13373,6 +13234,16 @@ "@noble/hashes": "^1.2.0" } }, + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + }, + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, "node-gyp-build": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", @@ -13914,28 +13785,12 @@ "multiformats": "^13.0.0", "multihashes-sync": "^2.0.0", "varintes": "^2.0.5" - }, - "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - } } }, "cborg": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", - "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", + "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" }, "chai": { "version": "4.4.1", @@ -14143,27 +13998,6 @@ "multiformats": "^11.0.0" }, "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "dependencies": { - "multiformats": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", - "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" - } - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, "multiformats": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", @@ -14172,19 +14006,12 @@ } }, "dag-jose-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-3.0.0.tgz", - "integrity": "sha512-gu+XutOTy3kD8fDcA1SMjZ2U0mUOb/hxoRVZaMCizXN7Ssbc5dKOzeXQ4GquV4BdQzs3w5Y7irOpn2plFPIJfg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-4.0.0.tgz", + "integrity": "sha512-bmmXtVdEKp/zYH8El4GGkMREJioUztz8fzOErfy5dTbyKIVOF61C5sfsZLYCB/wiT/I9+SPNrQeo/Cx6Ik3wJQ==", "requires": { - "@ipld/dag-cbor": "^7.0.1", - "multiformats": "^11.0.1" - }, - "dependencies": { - "multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" - } + "@ipld/dag-cbor": "^9.0.7", + "multiformats": "^13.0.0" } }, "data-uri-to-buffer": { @@ -14331,92 +14158,79 @@ "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" }, - "dids": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/dids/-/dids-4.0.4.tgz", - "integrity": "sha512-PKxQP0QFqgeMe0dbL7LCRdPJVhZU2ejj8RWCfJ6vro3a+o5o32cWNM1X6YXpdIWq6G5fTJw9KO2dHj2ZzYDc7w==", + "did-session": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/did-session/-/did-session-3.1.0.tgz", + "integrity": "sha512-EZAQHFqW08m8OuCU66i6qD2X7Xfqn18LwPLsH8qbV2LsyFCx5cyqgzg5UQFxziAQvMbvtXJ3YRNWk/b3bOJiaA==", "requires": { - "@didtools/cacao": "^2.1.0", - "@didtools/codecs": "^1.0.1", - "@didtools/pkh-ethereum": "^0.4.1", - "@stablelib/random": "^1.0.1", - "codeco": "^1.1.0", - "dag-jose-utils": "^3.0.0", - "did-jwt": "^7.2.0", - "did-resolver": "^4.1.0", - "multiformats": "^11.0.2", - "rpc-utils": "^0.6.1", - "uint8arrays": "^4.0.3" + "@didtools/key-webcrypto": "^0.2.0", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0", + "dids": "^5.0.2", + "key-did-provider-ed25519": "^4.0.2", + "key-did-resolver": "^4.0.0", + "uint8arrays": "^5.0.1" }, "dependencies": { - "@didtools/cacao": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", - "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", - "requires": { - "@didtools/codecs": "^1.0.1", - "@didtools/siwx": "1.0.0", - "@ipld/dag-cbor": "^9.0.1", - "caip": "^1.1.0", - "multiformats": "^11.0.2", - "uint8arrays": "^4.0.3" - } - }, - "@didtools/codecs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", - "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", + "key-did-provider-ed25519": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-4.0.2.tgz", + "integrity": "sha512-bnnRGuuUtylKGMVmgXVSoGccBg87roFi6xy5dQmTgNqnCmrxBBUatYoVimcnA+SGCFqi2qk6B9dD10Ed4rTZPg==", "requires": { - "codeco": "^1.1.0", - "multiformats": "^11.0.1", - "uint8arrays": "^4.0.3" + "@noble/curves": "^1.3.0", + "did-jwt": "^7.4.7", + "dids": "^5.0.2", + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^5.0.1" } }, - "@didtools/pkh-ethereum": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", - "integrity": "sha512-oE5bbyTauJ/WddaWnDK7bWns2E2LG4Ut33ICEcEQdlMoXM0902/vnGm8+6QE/yuLOyAllgf7DnDKvERF5IY6uQ==", + "key-did-resolver": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-4.0.0.tgz", + "integrity": "sha512-+U2nd/0rjO4Yqe2hnHBD7ygcLRfT43Oje9IIjv1BlBi0lopwxZpIFQ7GekguOHK02r+JGdl8mpJVNHs5lvXVOA==", "requires": { - "@didtools/cacao": "^2.1.0", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" + "@noble/curves": "^1.2.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", + "varint": "^6.0.0" } }, - "@didtools/siwx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", - "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "requires": { - "codeco": "^1.1.0" + "multiformats": "^13.0.0" } - }, - "@ipld/dag-cbor": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz", - "integrity": "sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ==", + } + } + }, + "dids": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/dids/-/dids-5.0.2.tgz", + "integrity": "sha512-sxTgrvJtatqdm7dukGbquk23BVvbiaxf3nTKywWaY9AUqwC2IYEo6FG0En2cMl3J1fqMMQXrGg9luh2xDmYOmw==", + "requires": { + "@didtools/cacao": "^3.0.1", + "@didtools/codecs": "^3.0.0", + "@didtools/pkh-ethereum": "^0.5.0", + "@stablelib/random": "^1.0.2", + "codeco": "^1.2.0", + "dag-jose-utils": "^4.0.0", + "did-jwt": "^7.4.7", + "did-resolver": "^4.1.0", + "multiformats": "^13.0.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "requires": { - "cborg": "^4.0.0", "multiformats": "^13.0.0" - }, - "dependencies": { - "multiformats": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", - "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" - } } - }, - "cborg": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", - "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==" - }, - "multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" } } }, @@ -14445,11 +14259,6 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, - "dotenv": { - "version": "16.4.4", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.4.tgz", - "integrity": "sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==" - }, "dset": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.3.tgz", @@ -15375,27 +15184,6 @@ "uint8arrays": "^4.0.2" }, "dependencies": { - "@ipld/dag-cbor": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz", - "integrity": "sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==", - "requires": { - "cborg": "^4.0.0", - "multiformats": "^13.1.0" - }, - "dependencies": { - "multiformats": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", - "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" - } - } - }, - "cborg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.1.3.tgz", - "integrity": "sha512-I8sAcVtiarz0dZ4IYixNUaL2hIl9cMDjo1ytI57F5fUlekTEO5Im8aXbAvsuayeP76hHSPRMwos0AUuntHJjqQ==" - }, "it-first": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/it-first/-/it-first-2.0.1.tgz", @@ -15697,6 +15485,106 @@ "fast-json-stable-stringify": "^2.1.0", "rpc-utils": "^0.6.2", "uint8arrays": "^4.0.3" + }, + "dependencies": { + "@didtools/cacao": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", + "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", + "requires": { + "@didtools/codecs": "^1.0.1", + "@didtools/siwx": "1.0.0", + "@ipld/dag-cbor": "^9.0.1", + "caip": "^1.1.0", + "multiformats": "^11.0.2", + "uint8arrays": "^4.0.3" + } + }, + "@didtools/codecs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", + "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", + "requires": { + "codeco": "^1.1.0", + "multiformats": "^11.0.1", + "uint8arrays": "^4.0.3" + } + }, + "@didtools/pkh-ethereum": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", + "integrity": "sha512-oE5bbyTauJ/WddaWnDK7bWns2E2LG4Ut33ICEcEQdlMoXM0902/vnGm8+6QE/yuLOyAllgf7DnDKvERF5IY6uQ==", + "requires": { + "@didtools/cacao": "^2.1.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0" + } + }, + "@didtools/siwx": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", + "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", + "requires": { + "codeco": "^1.1.0" + } + }, + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + }, + "dag-jose-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-3.0.0.tgz", + "integrity": "sha512-gu+XutOTy3kD8fDcA1SMjZ2U0mUOb/hxoRVZaMCizXN7Ssbc5dKOzeXQ4GquV4BdQzs3w5Y7irOpn2plFPIJfg==", + "requires": { + "@ipld/dag-cbor": "^7.0.1", + "multiformats": "^11.0.1" + }, + "dependencies": { + "@ipld/dag-cbor": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", + "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", + "requires": { + "cborg": "^1.6.0", + "multiformats": "^9.5.4" + }, + "dependencies": { + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + } + } + } + } + }, + "dids": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/dids/-/dids-4.0.4.tgz", + "integrity": "sha512-PKxQP0QFqgeMe0dbL7LCRdPJVhZU2ejj8RWCfJ6vro3a+o5o32cWNM1X6YXpdIWq6G5fTJw9KO2dHj2ZzYDc7w==", + "requires": { + "@didtools/cacao": "^2.1.0", + "@didtools/codecs": "^1.0.1", + "@didtools/pkh-ethereum": "^0.4.1", + "@stablelib/random": "^1.0.1", + "codeco": "^1.1.0", + "dag-jose-utils": "^3.0.0", + "did-jwt": "^7.2.0", + "did-resolver": "^4.1.0", + "multiformats": "^11.0.2", + "rpc-utils": "^0.6.1", + "uint8arrays": "^4.0.3" + } + }, + "multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" + } } }, "key-did-resolver": { @@ -17499,9 +17387,9 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "requires": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", diff --git a/nodes-lib/package.json b/nodes-lib/package.json index a3c1fcb3c..ede00f606 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5", + "version": "0.0.5-rc0", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { @@ -27,10 +27,11 @@ "docs": "typedoc src/index.ts" }, "dependencies": { - "@desci-labs/desci-codex-lib": "^1.1.6", + "@desci-labs/desci-codex-lib": "^1.1.7-rc0", "@desci-labs/desci-models": "^0.2.3-rc1", + "@didtools/pkh-ethereum": "^0.5.0", "axios": "^1.6.5", - "dotenv": "^16.4.4", + "did-session": "^3.1.0", "ethers": "^5.7.2", "form-data": "^4.0.0", "mime-types": "^2.1.35", @@ -38,7 +39,7 @@ "url-safe-base64": "1.2.0" }, "devDependencies": { - "@desci-labs/desci-contracts": "^0.2.0-rc1", + "@desci-labs/desci-contracts": "^0.2.1", "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", "typedoc": "^0.25.8", diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts index 1b720be67..16e2536dc 100644 --- a/nodes-lib/src/api.ts +++ b/nodes-lib/src/api.ts @@ -25,8 +25,9 @@ import type { NodeIDs } from "@desci-labs/desci-codex-lib"; import { publish } from "./publish.js"; import type { ResearchObjectDocument } from "./automerge.js"; import { randomUUID } from "crypto"; -import { NODES_API_KEY } from "./config.js"; +import { getConfig } from "./config/index.js"; import { makeRequest } from "./routes.js"; +import { Signer, providers } from "ethers"; export const ENDPOINTS = { deleteData: { @@ -263,11 +264,11 @@ export const getDraftNode = async ( * dPID publish history entry for a node. */ type NodeVersion = { - id: number; - manifestUrl: string; - cid: string; - transactionId: string | null; - nodeId: number | null; + id: number; + manifestUrl: string; + cid: string; + transactionId: string | null; + nodeId: number | null; }; /** @@ -275,11 +276,15 @@ type NodeVersion = { * computed from draft state. */ export type PrepublishResponse = { - ok: boolean; - updatedManifestCid: string; - updatedManifest: ResearchObjectV1; - version?: NodeVersion; - ceramicStream?: string; + ok: boolean; + updatedManifestCid: string; + updatedManifest: ResearchObjectV1; + version?: NodeVersion; + ceramicStream?: string; +}; + +export type PublishConfiguration = { + signer: Signer }; /** @@ -310,21 +315,30 @@ type PublishParams = { /** Result of publishing a draft node */ export type PublishResponse = { + /** The updated manifest */ + updatedManifest: ResearchObjectV1, /** The new manifest CID, which could have changed from adding the dPID */ updatedManifestCid: string, /** Ceramic stream and commit IDs from publishing to Codex */ ceramicIDs?: NodeIDs, + /** dPID transaction ID */ + dpidTxId?: string }; /** * Publish a draft node, meaning to compile the state of the drive into an * actual IPLD DAG, make the IPFS CIDs public, and register the node on * the dPID registry and Codex. + * + * @param uuid - UUID of node to publish + * @param signer - Signer to use for publish, if not set with env */ export const publishDraftNode = async ( uuid: string, + signer: Signer | providers.JsonRpcSigner, + skipCodex = false, ): Promise => { - const publishResult = await publish(uuid); + const publishResult = await publish(uuid, signer, skipCodex); const pubParams: PublishParams = { uuid, @@ -344,6 +358,8 @@ export const publishDraftNode = async ( return { ceramicIDs: publishResult.ceramicIDs, + dpidTxId: publishResult.transactionId, + updatedManifest: publishResult.manifest, updatedManifestCid: publishResult.cid, }; }; @@ -948,7 +964,7 @@ export const updateCoverImage = async ( const getHeaders = (isFormData: boolean = false) => { const headers = { - "api-key": NODES_API_KEY, + "api-key": getConfig().apiKey, ...(isFormData ? { "content-type": "multipart/form-data" } : {}) }; return headers; diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts index 4c1f07466..6794d89de 100644 --- a/nodes-lib/src/chain.ts +++ b/nodes-lib/src/chain.ts @@ -1,49 +1,20 @@ -import { Wallet, getDefaultProvider, type ContractReceipt, BigNumber, Contract } from "ethers"; -import { SigningKey, formatBytes32String } from "ethers/lib/utils.js"; -import type { DpidRegistry, ResearchObject } from "@desci-labs/desci-contracts/typechain-types"; +import { BigNumber, ContractReceipt, Signer, providers } from "ethers"; import { convertUUIDToHex, convertCidTo0xHex} from "./util/converting.js"; import { changeManifest, prePublishDraftNode, type PrepublishResponse } from "./api.js" -import { - RO_CONTRACT_ADDRESS, - DPID_CONTRACT_ADDRESS, - ETHEREUM_RPC_URL, - PUBLISH_PKEY, -} from "./config.js"; - -const { default: { abi: researchObjectABI }} = await import( - "./abi/ResearchObject.json", - { assert: { type: "json" }} -); -const { default: { abi: dpidRegistryAbi }} = await import( - "./abi/DpidRegistry.json", - { assert: { type: "json" }} -); +import { getConfig } from "./config/index.js"; +import { formatBytes32String } from "ethers/lib/utils.js"; +import { SigMaker } from "./config/chain.js"; const LOG_CTX = "[nodes-lib::chain]" const DEFAULT_DPID_PREFIX_STRING = "beta"; const DEFAULT_DPID_PREFIX = formatBytes32String(DEFAULT_DPID_PREFIX_STRING); -const ethereumProvider = getDefaultProvider(ETHEREUM_RPC_URL); - -const walletFromPkey = (pkey: string): Wallet => { - pkey = pkey.startsWith("0x") ? pkey : `0x${pkey}`; - const key = new SigningKey(pkey); - return new Wallet(key, ethereumProvider); -}; - -const wallet = walletFromPkey(PUBLISH_PKEY); -const researchObjectContract = new Contract( - RO_CONTRACT_ADDRESS, - researchObjectABI, - wallet -) as unknown as ResearchObject; +const researchObjectContract = (signer: SigMaker) => + getConfig().chainConfig.researchObjectConnector(signer); -const dpidRegistryContract = new Contract( - DPID_CONTRACT_ADDRESS, - dpidRegistryAbi, - wallet -) as unknown as DpidRegistry; +const dpidRegistryContract = (signer: SigMaker) => + getConfig().chainConfig.dpidRegistryConnector(signer); export type DpidPublishResult = { prepubResult: PrepublishResponse, @@ -56,6 +27,7 @@ export type DpidPublishResult = { export const dpidPublish = async ( uuid: string, dpidExists: boolean, + signer: Signer | providers.JsonRpcSigner, ): Promise => { let reciept: ContractReceipt; let prepubResult: PrepublishResponse; @@ -63,7 +35,7 @@ export const dpidPublish = async ( console.log(`${LOG_CTX} dpid exists for ${uuid}, updating`); try { prepubResult = await prePublishDraftNode(uuid); - reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid); + reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid, signer); } catch(e) { const err = e as Error; console.log(`${LOG_CTX} Failed updating dpid for uuid ${uuid}: ${err.message}`); @@ -72,7 +44,7 @@ export const dpidPublish = async ( } else { console.log(`${LOG_CTX} no dpid found for ${uuid}, registering new`); try { - const registrationResult = await registerNewDpid(uuid); + const registrationResult = await registerNewDpid(uuid, signer); reciept = registrationResult.reciept; prepubResult = registrationResult.prepubResult; } catch (e) { @@ -89,13 +61,14 @@ export const dpidPublish = async ( */ const updateExistingDpid = async ( uuid: string, - prepubManifestCid: string + prepubManifestCid: string, + signer: Signer | providers.JsonRpcSigner, ): Promise => { const cidBytes = convertCidTo0xHex(prepubManifestCid); const hexUuid = convertUUIDToHex(uuid); - const tx = await researchObjectContract.updateMetadata(hexUuid, cidBytes); - return await tx.wait(); + const tx = await researchObjectContract(signer).updateMetadata(hexUuid, cidBytes); + return await tx.wait() }; /** @@ -105,9 +78,10 @@ const updateExistingDpid = async ( */ const registerNewDpid = async ( uuid: string, + signer: Signer | providers.JsonRpcSigner, ): Promise<{ reciept: ContractReceipt, prepubResult: PrepublishResponse}> => { - const optimisticDpid = await getPreliminaryDpid(); - const regFee = await dpidRegistryContract.getFee(); + const optimisticDpid = await getPreliminaryDpid(signer); + const regFee = await dpidRegistryContract(signer).getFee(); await changeManifest( uuid, @@ -125,7 +99,7 @@ const registerNewDpid = async ( const hexUuid = convertUUIDToHex(uuid); // Throws if the expected dPID isn't available - const tx = await researchObjectContract.mintWithDpid( + const tx = await researchObjectContract(signer).mintWithDpid( hexUuid, cidBytes, DEFAULT_DPID_PREFIX, @@ -148,12 +122,16 @@ const registerNewDpid = async ( * Get the next dPID up for minting, for creating an optimistic manifest. * @returns the next free dPID */ -const getPreliminaryDpid = async (): Promise => { - const [nextFreeDpid, _] = await dpidRegistryContract.getOrganization(DEFAULT_DPID_PREFIX); +const getPreliminaryDpid = async ( + signer: Signer | providers.JsonRpcSigner, +): Promise => { + const [nextFreeDpid, _] = await dpidRegistryContract(signer) + .getOrganization(DEFAULT_DPID_PREFIX); return nextFreeDpid; }; export const hasDpid = async ( uuid: string, + signer: Signer | providers.JsonRpcSigner ): Promise => - await researchObjectContract.exists(convertUUIDToHex(uuid)); + await researchObjectContract(signer).exists(convertUUIDToHex(uuid)); diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index ccc4078f6..350181c1d 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -1,5 +1,4 @@ import { - authenticatedCeramicClient, createResearchObject, newComposeClient, updateResearchObject, @@ -11,11 +10,12 @@ import { } from "@desci-labs/desci-codex-lib"; import type { IndexedNodeVersion, PrepublishResponse } from "./api.js"; import { convert0xHexToCid } from "./util/converting.js"; -import { - PUBLISH_PKEY, - CERAMIC_NODE_URL, -} from "./config.js"; +import { getConfig } from "./config/index.js"; +import { Signer } from "ethers"; +import { EthereumWebAuth, getAccountId } from "@didtools/pkh-ethereum"; +import { DIDSession } from "did-session"; +const LOG_CTX = "[nodes-lib::codex]"; /** * Publish an object modification to Codex. If it's the initial publish, it will be done * onto a new stream. If there is a known existing stream for the object, the update is @@ -30,24 +30,27 @@ import { export const codexPublish = async ( prepublishResult: PrepublishResponse, dpidHistory: IndexedNodeVersion[], + signer: Signer, ): Promise => { - console.log(`[DEBUG]::CODEX starting publish with node ${CERAMIC_NODE_URL}...`); - const ceramic = await authenticatedCeramicClient( - PUBLISH_PKEY.startsWith("0x") ? PUBLISH_PKEY.slice(2) : PUBLISH_PKEY, - CERAMIC_NODE_URL, - ); + const nodeUrl = getConfig().ceramicNodeUrl; + console.log(LOG_CTX, `starting publish with node ${nodeUrl}...`); + const ceramic = newCeramicClient(nodeUrl); const compose = newComposeClient({ ceramic }); + // Wrangle a DID out of the signer for Ceramic auth + const did = await sessionFromSigner(signer, compose.resources); + compose.setDID(did); + // If we know about a stream already, let's assume we backfilled it initially if (prepublishResult.ceramicStream) { - console.log(`[DEBUG]::CODEX publishing to known stream ${prepublishResult.ceramicStream}...`); + console.log(LOG_CTX, `publishing to known stream ${prepublishResult.ceramicStream}...`); const ro = await updateResearchObject(compose, { id: prepublishResult.ceramicStream, title: prepublishResult.updatedManifest.title, manifest: prepublishResult.updatedManifestCid, }); console.log( - `[DEBUG]::CODEX successfully updated ${ro.streamID} with commit ${ro.commitID}` + `[nodes-lib::codex] successfully updated ${ro.streamID} with commit ${ro.commitID}` ); return { streamID: ro.streamID, commitID: ro.commitID }; }; @@ -55,23 +58,26 @@ export const codexPublish = async ( // Otherwise, create a new stream, potentially backfilling it with // earlier updates. if (dpidHistory.length === 0) { - console.log("[DEBUG]::CODEX publishing to new stream..."); + console.log(LOG_CTX, "publishing to new stream..."); const ro = await createResearchObject(compose, { title: prepublishResult.updatedManifest.title || "", manifest: prepublishResult.updatedManifestCid, license: prepublishResult.updatedManifest.defaultLicense || "", }); console.log( - `[DEBUG]::CODEX published to new stream ${ro.streamID} with commit ${ro.commitID}` + LOG_CTX, + `published to new stream ${ro.streamID} with commit ${ro.commitID}` ); return { streamID: ro.streamID, commitID: ro.commitID }; } else { - console.log("[DEBUG]::CODEX backfilling new stream to mirror history..."); + console.log(LOG_CTX, "backfilling new stream to mirror history..."); const streamID = await backfillNewStream(compose, dpidHistory); - console.log("[DEBUG]::CODEX backfill done, recursing to append latest event..."); + + console.log(LOG_CTX, "backfill done, recursing to append latest event..."); return await codexPublish( { ...prepublishResult, ceramicStream: streamID }, dpidHistory, + signer, ); }; }; @@ -87,45 +93,47 @@ const backfillNewStream = async ( compose: ComposeClient, versions: IndexedNodeVersion[] ): Promise => { - console.log( - `[DEBUG]::CODEX starting backfill migration for versions:\n${JSON.stringify( - versions, - undefined, - 2 - )}` - ); - const backfillSequential = async ( - prevPromise: Promise, - nextVersion: IndexedNodeVersion, - ix: number - ): Promise => { - const { streamID, commitID } = await prevPromise; - streamID && - console.log( - `[DEBUG]::CODEX backfilled version ${ix} into ${streamID} with commit ${commitID}` - ); + console.log( + LOG_CTX, + `starting backfill migration for versions:\n${JSON.stringify( + versions, + undefined, + 2 + )}` + ); + const backfillSequential = async ( + prevPromise: Promise, + nextVersion: IndexedNodeVersion, + ix: number + ): Promise => { + const { streamID, commitID } = await prevPromise; + streamID && + console.log( + LOG_CTX, + `backfilled version ${ix} into ${streamID} with commit ${commitID}` + ); - const title = "[BACKFILLED]"; // version.title is the title of the event, e.g. "Published" - const license = "[BACKFILLED]"; - const manifest = convert0xHexToCid(nextVersion.cid); - const op = - streamID === "" - ? createResearchObject(compose, { title, manifest, license }) - : updateResearchObject(compose, { id: streamID, title, manifest }); - return op; - }; + const title = "[BACKFILLED]"; // version.title is the title of the event, e.g. "Published" + const license = "[BACKFILLED]"; + const manifest = convert0xHexToCid(nextVersion.cid); + const op = + streamID === "" + ? createResearchObject(compose, { title, manifest, license }) + : updateResearchObject(compose, { id: streamID, title, manifest }); + return op; + }; - const { streamID } = await versions.reduce( - backfillSequential, - Promise.resolve({ streamID: "", commitID: "" }) - ); - return streamID; + const { streamID } = await versions.reduce( + backfillSequential, + Promise.resolve({ streamID: "", commitID: "" }) + ); + return streamID; }; export const getPublishedFromCodex = async ( id: string ) => { - const ceramic = newCeramicClient(CERAMIC_NODE_URL); + const ceramic = newCeramicClient(getConfig().ceramicNodeUrl); const compose = newComposeClient({ ceramic }); return await queryResearchObject(compose, id); @@ -134,6 +142,16 @@ export const getPublishedFromCodex = async ( export const getCodexHistory = async ( streamID: string ) => { - const ceramic = newCeramicClient(CERAMIC_NODE_URL); + const ceramic = newCeramicClient(getConfig().ceramicNodeUrl); return await resolveHistory(ceramic, streamID); }; + +const sessionFromSigner = async ( + signer: Signer, + resources: string[], +) => { + const accountId = await getAccountId(signer, await signer.getAddress()); + const authMethod = await EthereumWebAuth.getAuthMethod(signer, accountId) + const session = await DIDSession.authorize(authMethod, { resources }); + return session.did; +}; diff --git a/nodes-lib/src/config.ts b/nodes-lib/src/config.ts deleted file mode 100644 index 910e5b329..000000000 --- a/nodes-lib/src/config.ts +++ /dev/null @@ -1,29 +0,0 @@ -import "dotenv/config"; - -const requiredConfigVars = [ - "RO_CONTRACT_ADDRESS", - "DPID_CONTRACT_ADDRESS", - "ETHEREUM_RPC_URL", - "NODES_API_KEY", - "PUBLISH_PKEY", - "NODES_API_URL", - "CERAMIC_NODE_URL", -]; - -const unsetVars = requiredConfigVars - .map(key => ({key, val: process.env[key]})) - .filter(({val}) => !val) - .map(({key}) => key); - -if (unsetVars.length > 0) { - console.log(`[nodes-lib] Required environment variables unset: ${unsetVars}`); - throw new Error("Incomplete configuration"); -}; - -export const RO_CONTRACT_ADDRESS = process.env.RO_CONTRACT_ADDRESS!; -export const DPID_CONTRACT_ADDRESS = process.env.DPID_CONTRACT_ADDRESS!; -export const ETHEREUM_RPC_URL = process.env.ETHEREUM_RPC_URL!; -export const NODES_API_KEY = process.env.NODES_API_KEY!; -export const PUBLISH_PKEY = process.env.PUBLISH_PKEY!; -export const NODES_API_URL = process.env.NODES_API_URL!; -export const CERAMIC_NODE_URL = process.env.CERAMIC_NODE_URL!; diff --git a/nodes-lib/src/config/chain.ts b/nodes-lib/src/config/chain.ts new file mode 100644 index 000000000..219fc9ea5 --- /dev/null +++ b/nodes-lib/src/config/chain.ts @@ -0,0 +1,67 @@ +import { + DpidRegistry, + DpidRegistry__factory, + ResearchObject, + ResearchObjectV2, + ResearchObjectV2__factory, + ResearchObject__factory +} from "@desci-labs/desci-contracts/typechain-types/index.js"; +import { Signer, providers } from "ethers"; +import { type NodesEnv } from "./index.js"; + +import localRoInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-research-object.json"; +import localDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-dpid.json"; +import devRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-research-object.json"; +import devDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-dpid.json"; +import prodRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-research-object.json"; +import prodDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-dpid.json"; + +export type SigMaker = Signer | providers.JsonRpcSigner; +export type NodesContract = + | ResearchObject + | ResearchObjectV2 + | DpidRegistry; +export type ContractConnector = + (signer: SigMaker) => T; + +export type ChainConfig = { + rpcUrl: string, + researchObjectConnector: ContractConnector, + dpidRegistryConnector: ContractConnector, +}; + +export const CHAIN_CONFIGS = { + local: { + rpcUrl: "http://localhost:8545", + researchObjectConnector: signer => ResearchObject__factory.connect( + localRoInfo.proxies.at(0)!.address, + signer + ), + dpidRegistryConnector: signer => DpidRegistry__factory.connect( + localDpidInfo.proxies.at(0)!.address, + signer + ), + }, + dev: { + rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", + researchObjectConnector: signer => ResearchObjectV2__factory.connect( + devRoInfo.proxies.at(0)!.address, + signer + ), + dpidRegistryConnector: signer => DpidRegistry__factory.connect( + devDpidInfo.proxies.at(0)!.address, + signer + ), + }, + prod: { + rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", + researchObjectConnector: signer => ResearchObjectV2__factory.connect( + prodRoInfo.proxies.at(0)!.address, + signer + ), + dpidRegistryConnector: signer => DpidRegistry__factory.connect( + prodDpidInfo.proxies.at(0)!.address, + signer + ), + }, +} as const satisfies { [Env in NodesEnv]: ChainConfig }; diff --git a/nodes-lib/src/config/index.ts b/nodes-lib/src/config/index.ts new file mode 100644 index 000000000..52a533001 --- /dev/null +++ b/nodes-lib/src/config/index.ts @@ -0,0 +1,52 @@ +import { CHAIN_CONFIGS, ChainConfig } from "./chain.js"; + +export type NodesEnv = + | "local" + | "dev" + | "prod"; + +export type Config = { + apiUrl: string, + apiKey?: string, + ceramicNodeUrl: string, + chainConfig: ChainConfig, +}; + +export const CONFIGS = { + local: { + apiUrl: "http://localhost:5420", + apiKey: undefined, + ceramicNodeUrl: "http://localhost:7007", + chainConfig: CHAIN_CONFIGS.local, + }, + dev: { + apiUrl: "https://nodes-api-dev.desci.com", + apiKey: undefined, + ceramicNodeUrl: "https://ceramic-dev.desci.com", + chainConfig: CHAIN_CONFIGS.dev, + }, + prod: { + apiUrl: "https://nodes-api.desci.com", + apiKey: undefined, + ceramicNodeUrl: "https://ceramic-prod.desci.com", + chainConfig: CHAIN_CONFIGS.prod, + }, +} as const satisfies { [Env in NodesEnv]: Config }; + +// Default config to dev environment +let config: Config = CONFIGS.dev; +console.log(`[nodes-lib::config] initialising with nodes-dev config. Use setConfig and setApiKey to change this: \n${JSON.stringify(CONFIGS.dev, undefined, 2)}`); + +export const setApiKey = (apiKey: string) => { + config.apiKey = apiKey; +}; +export const setConfig = (newConfig: Config): void => { + config = newConfig; +}; +export const getConfig = () => { + if (!config.apiKey) { + console.log("[nodes-lib::config] config.apiKey is unset; non-public API requests will fail!") + throw new Error("Configuration error; no apiKey set."); + }; + return config as Required; +}; diff --git a/nodes-lib/src/index.ts b/nodes-lib/src/index.ts index bcc98637a..45a19155a 100644 --- a/nodes-lib/src/index.ts +++ b/nodes-lib/src/index.ts @@ -1,2 +1,2 @@ export * from "./api.js" - +export * from "./config/index.js"; diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts index b2aeed1c9..ce7eda60b 100644 --- a/nodes-lib/src/publish.ts +++ b/nodes-lib/src/publish.ts @@ -3,18 +3,21 @@ import { getDpidHistory } from "./api.js"; import { dpidPublish, hasDpid, type DpidPublishResult } from "./chain.js"; import { codexPublish } from "./codex.js"; import { PublishError } from "./errors.js"; +import { Signer, providers } from "ethers"; /** * The complete publish flow, including both the dPID registry and Codex. */ export const publish = async ( uuid: string, + signer: Signer | providers.JsonRpcSigner, + skipCodex: boolean = false, ) => { let chainPubResponse: DpidPublishResult; let preexistingDpid: boolean; try { - preexistingDpid = await hasDpid(uuid); - chainPubResponse = await dpidPublish(uuid, preexistingDpid); + preexistingDpid = await hasDpid(uuid, signer); + chainPubResponse = await dpidPublish(uuid, preexistingDpid, signer); } catch (e) { /** * dPID registry operations failed. Since we can't know if the prepublish @@ -25,17 +28,28 @@ export const publish = async ( throw new PublishError({ name: "DPID_PUBLISH_ERROR", message: "dPID registration failed", - cause: err, + cause: JSON.stringify(err, undefined, 2), }); }; + const dpidResult = { + manifest: chainPubResponse.prepubResult.updatedManifest, + cid: chainPubResponse.prepubResult.updatedManifestCid, + transactionId: chainPubResponse.reciept.transactionHash, + ceramicIDs: undefined, + }; + + if (skipCodex) { + return dpidResult; + }; + let ceramicIDs: NodeIDs | undefined; try { // If the dPID is new, skip checking for history to potentially backfill const publishHistory = preexistingDpid ? (await getDpidHistory(uuid)).versions : []; - ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory); + ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory, signer); } catch (e) { const err = e as Error; console.log("Codex publish failed:", err); @@ -43,9 +57,7 @@ export const publish = async ( }; return { - manifest: chainPubResponse.prepubResult.updatedManifest, - cid: chainPubResponse.prepubResult.updatedManifestCid, - ceramicIDs: ceramicIDs, - transactionId: chainPubResponse.reciept.transactionHash, + ...dpidResult, + ceramicIDs, }; }; diff --git a/nodes-lib/src/routes.ts b/nodes-lib/src/routes.ts index f56628eb5..3bc8a7e8f 100644 --- a/nodes-lib/src/routes.ts +++ b/nodes-lib/src/routes.ts @@ -1,6 +1,6 @@ import axios, { AxiosError, AxiosResponse } from "axios"; import { ENDPOINTS } from "./api.js"; -import { NODES_API_URL as API } from "./config.js"; +import { getConfig } from "./config/index.js"; // Default error serialization is huuuge due to circular refs axios.interceptors.response.use( @@ -34,19 +34,19 @@ export async function makeRequest< payload: T["_payloadT"], routeTail?: string, ): Promise { - const url = API + endpoint.route + (routeTail ?? ""); + const url = getConfig().apiUrl + endpoint.route + (routeTail ?? ""); let res: AxiosResponse; // post is the only method that takes a data payload if ( endpoint.method === "post") { res = await axios[endpoint.method]( url, payload, - { headers }, + { headers, withCredentials: true }, ); } else { res = await axios[endpoint.method]( url, - { headers }, + { headers, withCredentials: true }, ); }; return res.data; diff --git a/nodes-lib/src/util/signing.ts b/nodes-lib/src/util/signing.ts new file mode 100644 index 000000000..9812e51a2 --- /dev/null +++ b/nodes-lib/src/util/signing.ts @@ -0,0 +1,16 @@ +import { Signer, Wallet, getDefaultProvider } from "ethers"; +import { SigningKey } from "ethers/lib/utils.js"; +import { getConfig } from "../config/index.js"; + +export const signerFromPkey = (pkey: string): Signer => + walletFromPkey(pkey); + +const walletFromPkey = (pkey: string): Wallet => { + const provider = getDefaultProvider(getConfig().chainConfig.rpcUrl); + const paddedPkey = ensurePkeyPadding(pkey); + const key = new SigningKey(paddedPkey); + return new Wallet(key, provider); +}; + +const ensurePkeyPadding = (pkey: string) => + pkey.startsWith("0x") ? pkey : `0x${pkey}`; diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts index c301d3100..f09b6bc77 100644 --- a/nodes-lib/test/root.spec.ts +++ b/nodes-lib/test/root.spec.ts @@ -30,16 +30,24 @@ import { ResearchObjectComponentType, ResearchObjectComponentDataSubtype } from "@desci-labs/desci-models"; +import { signerFromPkey } from "../src/util/signing.js"; +import { getConfig, setApiKey } from "../src/config/index.js"; -// Disregard env config, as one likely does not want to spam all of this -// onto a real chain. -const NODES_API_URL = "http://localhost:5420"; +const TEST_PKEY = "f1d695d35c0987579c9e43e2e068f9f95775e7fd3958797b52d780aa8914e167"; +const testSigner = signerFromPkey(TEST_PKEY); + +if (!process.env.NODESLIB_API_KEY) { + throw new Error("NODESLIB_API_KEY not set; cannot run tests.") +} else { + setApiKey(process.env.NODESLIB_API_KEY); +}; describe("nodes-lib", () => { beforeAll(async () => { + const apiUrl = getConfig().apiUrl; try { - console.log(`Checking server reachable at ${NODES_API_URL}...`); - await axios.get(NODES_API_URL); + console.log(`Checking server reachable at ${apiUrl}...`); + await axios.get(apiUrl); console.log("Server is reachable"); } catch (e) { console.error( @@ -265,7 +273,7 @@ describe("nodes-lib", () => { beforeAll(async () => { const { node } = await createBoilerplateNode(); uuid = node.uuid; - publishResult = await publishDraftNode(uuid); + publishResult = await publishDraftNode(uuid, testSigner); }); describe("new node", async () => { @@ -296,7 +304,7 @@ describe("nodes-lib", () => { beforeAll(async () => { // async publish errors on re-publish before it finishes await sleep(5_000); - await publishDraftNode(uuid); + await publishDraftNode(uuid, testSigner); // Allow graph node to index await sleep(1_500); }); @@ -323,13 +331,13 @@ describe("nodes-lib", () => { const { node: { uuid }} = await createBoilerplateNode(); // make a dpid-only publish - await dpidPublish(uuid, false); + await dpidPublish(uuid, false, testSigner); // Allow graph node to index await sleep(1_500); // make a regular publish - const pubResult = await publishDraftNode(uuid); + const pubResult = await publishDraftNode(uuid, testSigner); // Allow graph node to index await sleep(1_500); From 1f8e1b20e20e21cc660645a56e6e863b5cccb63b Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 27 Mar 2024 13:24:43 +0100 Subject: [PATCH 019/141] server: disable public ref mirroring flow in publish controller --- desci-server/src/controllers/nodes/publish.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/desci-server/src/controllers/nodes/publish.ts b/desci-server/src/controllers/nodes/publish.ts index 436fb2934..d6ee4d218 100644 --- a/desci-server/src/controllers/nodes/publish.ts +++ b/desci-server/src/controllers/nodes/publish.ts @@ -264,8 +264,10 @@ export const publishHandler = async ({ /** * Create a job per mirror in order to track the status of the upload * There can be multiple mirrors per node, right now there is just Estuary + * + * NOTE: uncomment when reactivating public ref mirroring + const dataMirrorJobs = await createDataMirrorJobs(cidsRequiredForPublish, owner.id); */ - const dataMirrorJobs = await createDataMirrorJobs(cidsRequiredForPublish, owner.id); // TODO: update public data refs to link versionId @@ -274,7 +276,7 @@ export const publishHandler = async ({ */ await saveInteractionWithoutReq(ActionType.PUBLISH_NODE_CID_SUCCESS, { cidsPayload, - result: { newPublicDataRefs, dataMirrorJobs }, + result: { newPublicDataRefs }, }); } catch (error) { logger.error({ error }, `[publish::publish] error=${error}`); @@ -290,8 +292,8 @@ export const publishHandler = async ({ * Initiate IPFS storage upload using Estuary */ const manifest = await getManifestByCid(cid); - const researchObjectToPublish = { uuid, cid, manifest, ownerId: owner.id }; - const sendDiscordNotification = (error) => { + // const researchObjectToPublish = { uuid, cid, manifest, ownerId: owner.id }; + const sendDiscordNotification = (error: boolean) => { const manifestSource = manifest as ResearchObjectV1; discordNotify( `https://${manifestSource.dpid?.prefix}.dpid.org/${manifestSource.dpid?.id}${ @@ -300,6 +302,8 @@ export const publishHandler = async ({ ); }; + /** + * NOTE: uncomment when reactivating public ref mirroring const handleMirrorSuccess = async (publishedResearchObjectResult) => { await saveInteractionWithoutReq(ActionType.PUBLISH_NODE_RESEARCH_OBJECT_SUCCESS, { researchObjectToPublish, @@ -329,6 +333,8 @@ export const publishHandler = async ({ // trigger ipfs storage upload, but don't wait for it to finish, will happen async publishResearchObject(publicDataReferences).then(handleMirrorSuccess).catch(handleMirrorFail); + */ + sendDiscordNotification(false); /** * Save the cover art for this Node for later sharing: PDF -> JPG for this version @@ -338,6 +344,6 @@ export const publishHandler = async ({ return true; } catch (err) { logger.error({ err }, '[publish::publish] node-publish-err'); - return false; // res.status(400).send({ ok: false, error: err.message }); + return false; } }; From 9bf1b607a3c2a819e9dbca8878f0850f7321e935 Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 27 Mar 2024 16:33:51 +0100 Subject: [PATCH 020/141] nodes-lib: be vocal about setting config --- nodes-lib/src/config/index.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/nodes-lib/src/config/index.ts b/nodes-lib/src/config/index.ts index 52a533001..59c1368b6 100644 --- a/nodes-lib/src/config/index.ts +++ b/nodes-lib/src/config/index.ts @@ -40,13 +40,20 @@ console.log(`[nodes-lib::config] initialising with nodes-dev config. Use setConf export const setApiKey = (apiKey: string) => { config.apiKey = apiKey; }; + export const setConfig = (newConfig: Config): void => { + const confWithRedactedKey = JSON.stringify( + { ...newConfig, apiKey: newConfig.apiKey?.slice(0, 5) + "..."}, + undefined, 2 + ); + console.log(`[nodes-lib::config] setting new config: \n${confWithRedactedKey}`); + config = newConfig; }; + export const getConfig = () => { if (!config.apiKey) { - console.log("[nodes-lib::config] config.apiKey is unset; non-public API requests will fail!") - throw new Error("Configuration error; no apiKey set."); + console.log("[nodes-lib::config] config.apiKey is unset; non-public API requests will fail unless running in browser with auth cookies!") }; return config as Required; }; From 880115eb8dd4766053405c8b483890e941a1eb4f Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 28 Mar 2024 10:32:48 +0100 Subject: [PATCH 021/141] nodes-lib: publish works with web3provider+metamask --- desci-server/src/services/nodeManager.ts | 1 - nodes-lib/README.md | 17 ++++++++++--- nodes-lib/src/api.ts | 6 ++--- nodes-lib/src/chain.ts | 31 ++++++++++++------------ nodes-lib/src/codex.ts | 17 +++++++------ nodes-lib/src/config/chain.ts | 3 +-- nodes-lib/src/config/index.ts | 8 +++++- nodes-lib/src/publish.ts | 8 +++--- 8 files changed, 52 insertions(+), 39 deletions(-) diff --git a/desci-server/src/services/nodeManager.ts b/desci-server/src/services/nodeManager.ts index e6a9d6662..36b53b805 100644 --- a/desci-server/src/services/nodeManager.ts +++ b/desci-server/src/services/nodeManager.ts @@ -5,7 +5,6 @@ import axios from 'axios'; import { prisma } from '../client.js'; import { MEDIA_SERVER_API_KEY, MEDIA_SERVER_API_URL, PUBLIC_IPFS_PATH } from '../config/index.js'; import { logger as parentLogger } from '../logger.js'; -import { uploadDataToEstuary } from '../services/estuary.js'; import { getIndexedResearchObjects } from '../theGraph.js'; import { generateDataReferences } from '../utils/dataRefTools.js'; import { cleanupManifestUrl } from '../utils/manifest.js'; diff --git a/nodes-lib/README.md b/nodes-lib/README.md index cada3bcf8..515120b28 100644 --- a/nodes-lib/README.md +++ b/nodes-lib/README.md @@ -73,9 +73,16 @@ The other top-level fields contain a human-readable title, simple metadata about ## Usage ### Configuration -Copy `.env.example` from this repo to `.env`, and configure the values depending on which environment is being targeted. If installing `nodes-lib` through NPM, set these variables in your host project environment instead. +By default, the library defaults to interacting with the nodes dev environment. This is the right place to fiddle around! Working against the dev environment means: +- Nodes will only resolve on https://nodes-dev.desci.com +- dPID registration transactions will be done against a testing contract +- Ceramic publishing is done on the Clay testnet -Some variables have different values depending on environment, re-set them as necessary. A detailed read of the `.env.example` file will be helpful. "Devcluster" refers to the docker-compose cluster defined in the root of this repository, which can be started with `./dockerDev.sh`. See further instructions in the [repo root docs](../README.md). +Configure your intended environment by calling the `setConfig` function. If you're not doing something very avant-garde, you can likely just pass a standard config instance like `CONFIG.local`. Otherwise, build up your own config object. + +Note that your API key must be set manually by calling `setApiKey`, find more information in the Authentication section. + +The `CONFIG.local` preset refers to a locally running docker-compose cluster as defined in the root of this repository, which can be started with `./dockerDev.sh`. See further instructions in the [repo root docs](../README.md). ### Drafts A node that's being modified is always in a "draft" state, meaning that the changes are not public. They only become public when the node is published, after which it's possible to view without being authenticated. When new changes are made from this point, they are not publicly available until publish is done again. @@ -83,9 +90,11 @@ A node that's being modified is always in a "draft" state, meaning that the chan Manifests cannot be submitted "whole", as the state of draft manifests are maintained internally as [automerge CRDT documents](https://automerge.org/). Hence, one needs to send change chunks so that the lib submitted changes can be interspersed with simultaneous webapp edits. This means that your calls will more or less instantly be reflected in the webapp. ### Authentication -Most functions ineracting with the Nodes backend require authentication, as they work on your private draft node. You can create an API key under your profile at [nodes.desci.com](https://nodes.desci.com). Set this as `AUTH_TOKEN` in your environment. +Most functions ineracting with the Nodes backend require authentication, as they work on your private draft node. You can create an API key under your profile at [nodes.desci.com](https://nodes.desci.com). Set this using the `setApiKey` function. + +Publishing to the dPID registry and/or Codex requires some type of cryptographic signing mechanism. The relevant functions take a `signer` argument, to which you can pass either a signer instance from Metamask, or use the helper function`signerFromPkey` to create one from a raw private key. -Publishing to the dPID registry and/or Codex requires a private key. Publishing is done in-library and is not sent to the Nodes backend. Set the environment variable `PUBLISH_PKEY` and it will be used in interaction with the dPID registry on-chain, and as your DID in the Codex/Ceramic case. +Note that publishing is done locally, so your key is not sent to the Nodes backend. ### Documentation This section outlines the major functionality the library provides. It's not a complete rundown of all capabilities, but should be enough to get some inutition for the workflow. diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts index 16e2536dc..10c53f431 100644 --- a/nodes-lib/src/api.ts +++ b/nodes-lib/src/api.ts @@ -331,14 +331,14 @@ export type PublishResponse = { * the dPID registry and Codex. * * @param uuid - UUID of node to publish - * @param signer - Signer to use for publish, if not set with env + * @param provider - Signer to use for publish, if not set with env */ export const publishDraftNode = async ( uuid: string, - signer: Signer | providers.JsonRpcSigner, + provider: providers.Web3Provider, skipCodex = false, ): Promise => { - const publishResult = await publish(uuid, signer, skipCodex); + const publishResult = await publish(uuid, provider, skipCodex); const pubParams: PublishParams = { uuid, diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts index 6794d89de..64331c005 100644 --- a/nodes-lib/src/chain.ts +++ b/nodes-lib/src/chain.ts @@ -3,17 +3,16 @@ import { convertUUIDToHex, convertCidTo0xHex} from "./util/converting.js"; import { changeManifest, prePublishDraftNode, type PrepublishResponse } from "./api.js" import { getConfig } from "./config/index.js"; import { formatBytes32String } from "ethers/lib/utils.js"; -import { SigMaker } from "./config/chain.js"; const LOG_CTX = "[nodes-lib::chain]" const DEFAULT_DPID_PREFIX_STRING = "beta"; const DEFAULT_DPID_PREFIX = formatBytes32String(DEFAULT_DPID_PREFIX_STRING); -const researchObjectContract = (signer: SigMaker) => +const researchObjectContract = (signer: Signer) => getConfig().chainConfig.researchObjectConnector(signer); -const dpidRegistryContract = (signer: SigMaker) => +const dpidRegistryContract = (signer: Signer) => getConfig().chainConfig.dpidRegistryConnector(signer); export type DpidPublishResult = { @@ -27,7 +26,7 @@ export type DpidPublishResult = { export const dpidPublish = async ( uuid: string, dpidExists: boolean, - signer: Signer | providers.JsonRpcSigner, + provider: providers.Web3Provider, ): Promise => { let reciept: ContractReceipt; let prepubResult: PrepublishResponse; @@ -35,7 +34,7 @@ export const dpidPublish = async ( console.log(`${LOG_CTX} dpid exists for ${uuid}, updating`); try { prepubResult = await prePublishDraftNode(uuid); - reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid, signer); + reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid, provider); } catch(e) { const err = e as Error; console.log(`${LOG_CTX} Failed updating dpid for uuid ${uuid}: ${err.message}`); @@ -44,7 +43,7 @@ export const dpidPublish = async ( } else { console.log(`${LOG_CTX} no dpid found for ${uuid}, registering new`); try { - const registrationResult = await registerNewDpid(uuid, signer); + const registrationResult = await registerNewDpid(uuid, provider); reciept = registrationResult.reciept; prepubResult = registrationResult.prepubResult; } catch (e) { @@ -62,12 +61,12 @@ export const dpidPublish = async ( const updateExistingDpid = async ( uuid: string, prepubManifestCid: string, - signer: Signer | providers.JsonRpcSigner, + provider: providers.Web3Provider, ): Promise => { const cidBytes = convertCidTo0xHex(prepubManifestCid); const hexUuid = convertUUIDToHex(uuid); - const tx = await researchObjectContract(signer).updateMetadata(hexUuid, cidBytes); + const tx = await researchObjectContract(provider.getSigner()).updateMetadata(hexUuid, cidBytes); return await tx.wait() }; @@ -78,10 +77,10 @@ const updateExistingDpid = async ( */ const registerNewDpid = async ( uuid: string, - signer: Signer | providers.JsonRpcSigner, + provider: providers.Web3Provider, ): Promise<{ reciept: ContractReceipt, prepubResult: PrepublishResponse}> => { - const optimisticDpid = await getPreliminaryDpid(signer); - const regFee = await dpidRegistryContract(signer).getFee(); + const optimisticDpid = await getPreliminaryDpid(provider); + const regFee = await dpidRegistryContract(provider.getSigner()).getFee(); await changeManifest( uuid, @@ -99,7 +98,7 @@ const registerNewDpid = async ( const hexUuid = convertUUIDToHex(uuid); // Throws if the expected dPID isn't available - const tx = await researchObjectContract(signer).mintWithDpid( + const tx = await researchObjectContract(provider.getSigner()).mintWithDpid( hexUuid, cidBytes, DEFAULT_DPID_PREFIX, @@ -123,15 +122,15 @@ const registerNewDpid = async ( * @returns the next free dPID */ const getPreliminaryDpid = async ( - signer: Signer | providers.JsonRpcSigner, + provider: providers.Web3Provider, ): Promise => { - const [nextFreeDpid, _] = await dpidRegistryContract(signer) + const [nextFreeDpid, _] = await dpidRegistryContract(provider.getSigner()) .getOrganization(DEFAULT_DPID_PREFIX); return nextFreeDpid; }; export const hasDpid = async ( uuid: string, - signer: Signer | providers.JsonRpcSigner + provider: providers.Web3Provider ): Promise => - await researchObjectContract(signer).exists(convertUUIDToHex(uuid)); + await researchObjectContract(provider.getSigner()).exists(convertUUIDToHex(uuid)); diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index 350181c1d..e4f75c6f4 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -11,7 +11,7 @@ import { import type { IndexedNodeVersion, PrepublishResponse } from "./api.js"; import { convert0xHexToCid } from "./util/converting.js"; import { getConfig } from "./config/index.js"; -import { Signer } from "ethers"; +import { Signer, providers } from "ethers"; import { EthereumWebAuth, getAccountId } from "@didtools/pkh-ethereum"; import { DIDSession } from "did-session"; @@ -30,7 +30,7 @@ const LOG_CTX = "[nodes-lib::codex]"; export const codexPublish = async ( prepublishResult: PrepublishResponse, dpidHistory: IndexedNodeVersion[], - signer: Signer, + provider: providers.Web3Provider, ): Promise => { const nodeUrl = getConfig().ceramicNodeUrl; console.log(LOG_CTX, `starting publish with node ${nodeUrl}...`); @@ -38,7 +38,7 @@ export const codexPublish = async ( const compose = newComposeClient({ ceramic }); // Wrangle a DID out of the signer for Ceramic auth - const did = await sessionFromSigner(signer, compose.resources); + const did = await sessionFromProvider(provider, compose.resources); compose.setDID(did); // If we know about a stream already, let's assume we backfilled it initially @@ -77,7 +77,7 @@ export const codexPublish = async ( return await codexPublish( { ...prepublishResult, ceramicStream: streamID }, dpidHistory, - signer, + provider, ); }; }; @@ -146,12 +146,13 @@ export const getCodexHistory = async ( return await resolveHistory(ceramic, streamID); }; -const sessionFromSigner = async ( - signer: Signer, +const sessionFromProvider = async ( + provider: providers.Web3Provider, resources: string[], ) => { - const accountId = await getAccountId(signer, await signer.getAddress()); - const authMethod = await EthereumWebAuth.getAuthMethod(signer, accountId) + const externalProvider = provider.provider; + const accountId = await getAccountId(externalProvider, await provider.getSigner().getAddress()); + const authMethod = await EthereumWebAuth.getAuthMethod(externalProvider, accountId) const session = await DIDSession.authorize(authMethod, { resources }); return session.did; }; diff --git a/nodes-lib/src/config/chain.ts b/nodes-lib/src/config/chain.ts index 219fc9ea5..5a4558c4f 100644 --- a/nodes-lib/src/config/chain.ts +++ b/nodes-lib/src/config/chain.ts @@ -16,13 +16,12 @@ import devDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-dp import prodRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-research-object.json"; import prodDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-dpid.json"; -export type SigMaker = Signer | providers.JsonRpcSigner; export type NodesContract = | ResearchObject | ResearchObjectV2 | DpidRegistry; export type ContractConnector = - (signer: SigMaker) => T; + (signer: Signer) => T; export type ChainConfig = { rpcUrl: string, diff --git a/nodes-lib/src/config/index.ts b/nodes-lib/src/config/index.ts index 59c1368b6..02fa838fe 100644 --- a/nodes-lib/src/config/index.ts +++ b/nodes-lib/src/config/index.ts @@ -38,12 +38,18 @@ let config: Config = CONFIGS.dev; console.log(`[nodes-lib::config] initialising with nodes-dev config. Use setConfig and setApiKey to change this: \n${JSON.stringify(CONFIGS.dev, undefined, 2)}`); export const setApiKey = (apiKey: string) => { + console.log(`[nodes-lib::config] setting new apiKey: \n${apiKey.slice(0, 5) + "..."}`); config.apiKey = apiKey; }; export const setConfig = (newConfig: Config): void => { const confWithRedactedKey = JSON.stringify( - { ...newConfig, apiKey: newConfig.apiKey?.slice(0, 5) + "..."}, + { + ...newConfig, + apiKey: newConfig.apiKey + ? newConfig.apiKey?.slice(0, 5) + "..." + : "[unset]", + }, undefined, 2 ); console.log(`[nodes-lib::config] setting new config: \n${confWithRedactedKey}`); diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts index ce7eda60b..f81a6fe8e 100644 --- a/nodes-lib/src/publish.ts +++ b/nodes-lib/src/publish.ts @@ -10,14 +10,14 @@ import { Signer, providers } from "ethers"; */ export const publish = async ( uuid: string, - signer: Signer | providers.JsonRpcSigner, + provider: providers.Web3Provider, skipCodex: boolean = false, ) => { let chainPubResponse: DpidPublishResult; let preexistingDpid: boolean; try { - preexistingDpid = await hasDpid(uuid, signer); - chainPubResponse = await dpidPublish(uuid, preexistingDpid, signer); + preexistingDpid = await hasDpid(uuid, provider); + chainPubResponse = await dpidPublish(uuid, preexistingDpid, provider); } catch (e) { /** * dPID registry operations failed. Since we can't know if the prepublish @@ -49,7 +49,7 @@ export const publish = async ( const publishHistory = preexistingDpid ? (await getDpidHistory(uuid)).versions : []; - ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory, signer); + ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory, provider); } catch (e) { const err = e as Error; console.log("Codex publish failed:", err); From 5cbe178774728210b81749e1a6c26be93c265ac8 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 28 Mar 2024 14:56:19 +0100 Subject: [PATCH 022/141] server: seed dev db with api key for tests --- desci-server/prisma/seed.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/desci-server/prisma/seed.ts b/desci-server/prisma/seed.ts index 4afe3c431..925308dfb 100755 --- a/desci-server/prisma/seed.ts +++ b/desci-server/prisma/seed.ts @@ -3,7 +3,7 @@ import researchFieldsData from '../src/data/fields.json' assert { type: 'json' } import { seedSocialData } from '../src/scripts/seed-social-data.js'; async function main() { - await prisma.user.upsert({ + const { id: userId }= await prisma.user.upsert({ where: { email: 'noreply@desci.com', }, @@ -18,6 +18,22 @@ async function main() { }, }); + await prisma.apiKey.upsert({ + where: { + keyHashed: "agu+zEH30gwm77C+Em4scbzdiYOnv8uSvA0qr2XAj5k=", + }, + update: {}, + create: { + keyHashed: "agu+zEH30gwm77C+Em4scbzdiYOnv8uSvA0qr2XAj5k=", + memo: "nodes-lib tests", + createdAt: "2023-01-01T00:00:00.000Z", + lastUsed: "2023-01-01T00:00:00.000Z", + isActive: true, + createdIp: "192.168.0.1", + userId, + }, + }); + const estuary = await prisma.ipfsMirror.upsert({ // select: { id: true, name: true }, where: { From 7feb8a6b0a326e562efbc1a29f21fcab4c0baa19 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 28 Mar 2024 16:37:47 +0100 Subject: [PATCH 023/141] nodes-lib: switch web3provider interface for signer --- nodes-lib/src/api.ts | 6 +++--- nodes-lib/src/chain.ts | 26 +++++++++++++------------- nodes-lib/src/codex.ts | 29 ++++++++++++++++++++--------- nodes-lib/src/publish.ts | 2 +- 4 files changed, 37 insertions(+), 26 deletions(-) diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts index 10c53f431..83b92e9bb 100644 --- a/nodes-lib/src/api.ts +++ b/nodes-lib/src/api.ts @@ -331,14 +331,14 @@ export type PublishResponse = { * the dPID registry and Codex. * * @param uuid - UUID of node to publish - * @param provider - Signer to use for publish, if not set with env + * @param signer - Signer to use for publish, if not set with env */ export const publishDraftNode = async ( uuid: string, - provider: providers.Web3Provider, + signer: Signer, skipCodex = false, ): Promise => { - const publishResult = await publish(uuid, provider, skipCodex); + const publishResult = await publish(uuid, signer, skipCodex); const pubParams: PublishParams = { uuid, diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts index 64331c005..775819a48 100644 --- a/nodes-lib/src/chain.ts +++ b/nodes-lib/src/chain.ts @@ -26,7 +26,7 @@ export type DpidPublishResult = { export const dpidPublish = async ( uuid: string, dpidExists: boolean, - provider: providers.Web3Provider, + signer: Signer, ): Promise => { let reciept: ContractReceipt; let prepubResult: PrepublishResponse; @@ -34,7 +34,7 @@ export const dpidPublish = async ( console.log(`${LOG_CTX} dpid exists for ${uuid}, updating`); try { prepubResult = await prePublishDraftNode(uuid); - reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid, provider); + reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid, signer); } catch(e) { const err = e as Error; console.log(`${LOG_CTX} Failed updating dpid for uuid ${uuid}: ${err.message}`); @@ -43,7 +43,7 @@ export const dpidPublish = async ( } else { console.log(`${LOG_CTX} no dpid found for ${uuid}, registering new`); try { - const registrationResult = await registerNewDpid(uuid, provider); + const registrationResult = await registerNewDpid(uuid, signer); reciept = registrationResult.reciept; prepubResult = registrationResult.prepubResult; } catch (e) { @@ -61,12 +61,12 @@ export const dpidPublish = async ( const updateExistingDpid = async ( uuid: string, prepubManifestCid: string, - provider: providers.Web3Provider, + signer: Signer, ): Promise => { const cidBytes = convertCidTo0xHex(prepubManifestCid); const hexUuid = convertUUIDToHex(uuid); - const tx = await researchObjectContract(provider.getSigner()).updateMetadata(hexUuid, cidBytes); + const tx = await researchObjectContract(signer).updateMetadata(hexUuid, cidBytes); return await tx.wait() }; @@ -77,10 +77,10 @@ const updateExistingDpid = async ( */ const registerNewDpid = async ( uuid: string, - provider: providers.Web3Provider, + signer: Signer, ): Promise<{ reciept: ContractReceipt, prepubResult: PrepublishResponse}> => { - const optimisticDpid = await getPreliminaryDpid(provider); - const regFee = await dpidRegistryContract(provider.getSigner()).getFee(); + const optimisticDpid = await getPreliminaryDpid(signer); + const regFee = await dpidRegistryContract(signer).getFee(); await changeManifest( uuid, @@ -98,7 +98,7 @@ const registerNewDpid = async ( const hexUuid = convertUUIDToHex(uuid); // Throws if the expected dPID isn't available - const tx = await researchObjectContract(provider.getSigner()).mintWithDpid( + const tx = await researchObjectContract(signer).mintWithDpid( hexUuid, cidBytes, DEFAULT_DPID_PREFIX, @@ -122,15 +122,15 @@ const registerNewDpid = async ( * @returns the next free dPID */ const getPreliminaryDpid = async ( - provider: providers.Web3Provider, + signer: Signer, ): Promise => { - const [nextFreeDpid, _] = await dpidRegistryContract(provider.getSigner()) + const [nextFreeDpid, _] = await dpidRegistryContract(signer) .getOrganization(DEFAULT_DPID_PREFIX); return nextFreeDpid; }; export const hasDpid = async ( uuid: string, - provider: providers.Web3Provider + signer: Signer ): Promise => - await researchObjectContract(provider.getSigner()).exists(convertUUIDToHex(uuid)); + await researchObjectContract(signer).exists(convertUUIDToHex(uuid)); diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index e4f75c6f4..c3c556003 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -30,7 +30,7 @@ const LOG_CTX = "[nodes-lib::codex]"; export const codexPublish = async ( prepublishResult: PrepublishResponse, dpidHistory: IndexedNodeVersion[], - provider: providers.Web3Provider, + signer: Signer, ): Promise => { const nodeUrl = getConfig().ceramicNodeUrl; console.log(LOG_CTX, `starting publish with node ${nodeUrl}...`); @@ -38,7 +38,7 @@ export const codexPublish = async ( const compose = newComposeClient({ ceramic }); // Wrangle a DID out of the signer for Ceramic auth - const did = await sessionFromProvider(provider, compose.resources); + const did = await sessionFromSigner(signer, compose.resources); compose.setDID(did); // If we know about a stream already, let's assume we backfilled it initially @@ -77,7 +77,7 @@ export const codexPublish = async ( return await codexPublish( { ...prepublishResult, ceramicStream: streamID }, dpidHistory, - provider, + signer, ); }; }; @@ -146,13 +146,24 @@ export const getCodexHistory = async ( return await resolveHistory(ceramic, streamID); }; -const sessionFromProvider = async ( - provider: providers.Web3Provider, +const sessionFromSigner = async ( + signer: Signer, resources: string[], ) => { - const externalProvider = provider.provider; - const accountId = await getAccountId(externalProvider, await provider.getSigner().getAddress()); - const authMethod = await EthereumWebAuth.getAuthMethod(externalProvider, accountId) - const session = await DIDSession.authorize(authMethod, { resources }); + // Fuckery to get the inner provider for a metamask signer + const externalProvider = (signer.provider as providers.Web3Provider)?.provider; + + const accountId = await getAccountId( + externalProvider ?? signer, + await signer.getAddress() + ); + const authMethod = await EthereumWebAuth.getAuthMethod( + externalProvider ?? signer, + accountId + ); + const session = await DIDSession.authorize( + authMethod, + { resources } + ); return session.did; }; diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts index f81a6fe8e..bbb5bd650 100644 --- a/nodes-lib/src/publish.ts +++ b/nodes-lib/src/publish.ts @@ -10,7 +10,7 @@ import { Signer, providers } from "ethers"; */ export const publish = async ( uuid: string, - provider: providers.Web3Provider, + provider: Signer, skipCodex: boolean = false, ) => { let chainPubResponse: DpidPublishResult; From 10e7138a3d5f938bb31f41773450d62ac7f399bf Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Mon, 1 Apr 2024 21:53:03 +0200 Subject: [PATCH 024/141] update models --- desci-models/src/ResearchObject.ts | 19 ++++++++++++++++++- .../src/routes/v1/attestations/schema.ts | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/desci-models/src/ResearchObject.ts b/desci-models/src/ResearchObject.ts index 1e009dd3e..ed99afc64 100644 --- a/desci-models/src/ResearchObject.ts +++ b/desci-models/src/ResearchObject.ts @@ -350,15 +350,32 @@ export interface PdfAnnotation extends ResearchObjectComponentAnnotation, Scaled __client?: any; } -export interface HighlightBlock extends PdfAnnotation { +export interface PdfHighlightBlock extends PdfAnnotation { move?: boolean; text?: string; title?: string; image?: string; path: string; rects: COORDP[]; + kind: 'pdf'; } +export interface CodeAnnotation extends ResearchObjectComponentAnnotation { + path: string; + text?: string; + title?: string; + image?: string; + cid?: string; + startLine: number; + endLine: number; + language: string; +} + +export interface CodeHighlightBlock extends CodeAnnotation { + kind: 'code'; +} +export type HighlightBlock = CodeHighlightBlock | PdfHighlightBlock; + export interface ResearchObjectComponentAnnotation { id: string; authorId?: string; diff --git a/desci-server/src/routes/v1/attestations/schema.ts b/desci-server/src/routes/v1/attestations/schema.ts index 13a5392f0..05f0f40ea 100644 --- a/desci-server/src/routes/v1/attestations/schema.ts +++ b/desci-server/src/routes/v1/attestations/schema.ts @@ -43,6 +43,7 @@ export const dpidPathSchema = z .url() .refine((link) => dpidPathRegex.test(link), { message: 'Invalid dpid link' }); +// TODO: UPDATE TO A UNION OF CodeHighlightBlock and PdfHighlightBlock const highlightSchema = z .object({ id: z.string(), From 4f121876231fd4d14a34e04037b8a580cdcb81f5 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 2 Apr 2024 06:32:11 +0200 Subject: [PATCH 025/141] update be-node-dev.sh install script to work on mac os --- desci-server/scripts/be-node-dev.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index 64b26b4fd..f01296753 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -1,10 +1,10 @@ #!/bin/sh echo "Install bash and execute 'wait-for-it.sh' script" -apt-get add bash +apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run From 090651a70c81c81e7336a1fa62376ffe37b2cbcb Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 2 Apr 2024 07:32:37 +0200 Subject: [PATCH 026/141] update script and desci-repo node version --- desci-repo/Dockerfile | 2 +- desci-server/scripts/be-node-dev.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/desci-repo/Dockerfile b/desci-repo/Dockerfile index bb96428bd..cbda3f228 100644 --- a/desci-repo/Dockerfile +++ b/desci-repo/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.20.0-bookworm +FROM node:18.16.0-bookworm VOLUME /root/.yarn diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index 64b26b4fd..3a7941689 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -1,6 +1,6 @@ #!/bin/sh echo "Install bash and execute 'wait-for-it.sh' script" -apt-get add bash +apt-get install bash # Exit on error set -e From 0663991aa641d43fe9009166035bc092d404a03c Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 2 Apr 2024 09:36:33 +0200 Subject: [PATCH 027/141] fix: server crash on browser request hit (node 18.17.0) upgrade to node(18.20.0:bullseye) --- .nvmrc | 2 +- Dockerfile | 2 +- desci-server/package.json | 2 +- desci-server/yarn.lock | 7 +------ 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.nvmrc b/.nvmrc index 39d00c051..23cc58a71 100755 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.17.0 \ No newline at end of file +18.20.0 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 494c842e9..147c5a5da 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18.17.0-bookworm +FROM node:18.20.0-bullseye VOLUME /root/.yarn diff --git a/desci-server/package.json b/desci-server/package.json index 0b4c71be0..70733205f 100755 --- a/desci-server/package.json +++ b/desci-server/package.json @@ -56,7 +56,7 @@ "@desci-labs/desci-models": "link:./desci-models", "@honeycombio/opentelemetry-node": "^0.3.2", "@ipld/dag-pb": "^4.0.0", - "@opentelemetry/api": "1.3.0", + "@opentelemetry/api": "^1.8.0", "@opentelemetry/auto-instrumentations-node": "^0.37", "@penseapp/discord-notification": "^2.0.9", "@prisma/client": "4.10.1", diff --git a/desci-server/yarn.lock b/desci-server/yarn.lock index c436519e5..2e4b53f4d 100644 --- a/desci-server/yarn.lock +++ b/desci-server/yarn.lock @@ -2688,12 +2688,7 @@ dependencies: "@opentelemetry/api" "^1.0.0" -"@opentelemetry/api@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.3.0.tgz#27c6f776ac3c1c616651e506a89f438a0ed6a055" - integrity sha512-YveTnGNsFFixTKJz09Oi4zYkiLT5af3WpZDu4aIUM7xX+2bHAkOJayFTVQd6zB8kkWPpbua4Ha6Ql00grdLlJQ== - -"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.3.0": +"@opentelemetry/api@^1.0.0", "@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.8.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.8.0.tgz#5aa7abb48f23f693068ed2999ae627d2f7d902ec" integrity sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w== From 66e0fc242fe00a449699bca49596a77933348fb1 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 2 Apr 2024 17:44:26 +0200 Subject: [PATCH 028/141] add support for code highlights to comments api schema, update model --- desci-models/src/ResearchObject.ts | 7 +-- .../src/controllers/attestations/comments.ts | 2 +- .../src/routes/v1/attestations/schema.ts | 48 ++++++++++++------- 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/desci-models/src/ResearchObject.ts b/desci-models/src/ResearchObject.ts index ed99afc64..66084c013 100644 --- a/desci-models/src/ResearchObject.ts +++ b/desci-models/src/ResearchObject.ts @@ -351,9 +351,6 @@ export interface PdfAnnotation extends ResearchObjectComponentAnnotation, Scaled } export interface PdfHighlightBlock extends PdfAnnotation { - move?: boolean; - text?: string; - title?: string; image?: string; path: string; rects: COORDP[]; @@ -363,9 +360,7 @@ export interface PdfHighlightBlock extends PdfAnnotation { export interface CodeAnnotation extends ResearchObjectComponentAnnotation { path: string; text?: string; - title?: string; - image?: string; - cid?: string; + cid: string; startLine: number; endLine: number; language: string; diff --git a/desci-server/src/controllers/attestations/comments.ts b/desci-server/src/controllers/attestations/comments.ts index 0393104c1..8f7b3ac50 100644 --- a/desci-server/src/controllers/attestations/comments.ts +++ b/desci-server/src/controllers/attestations/comments.ts @@ -87,7 +87,7 @@ export const addComment = async (req: Request, let annotation: Annotation; if (highlights?.length > 0) { const processedHighlights = await asyncMap(highlights, async (highlight) => { - if (!highlight.image) return highlight; + if (!('image' in highlight)) return highlight; const blob = base64ToBlob(highlight.image); const storedCover = await client.add(blob, { cidVersion: 1 }); diff --git a/desci-server/src/routes/v1/attestations/schema.ts b/desci-server/src/routes/v1/attestations/schema.ts index 05f0f40ea..a720edf25 100644 --- a/desci-server/src/routes/v1/attestations/schema.ts +++ b/desci-server/src/routes/v1/attestations/schema.ts @@ -44,7 +44,7 @@ export const dpidPathSchema = z .refine((link) => dpidPathRegex.test(link), { message: 'Invalid dpid link' }); // TODO: UPDATE TO A UNION OF CodeHighlightBlock and PdfHighlightBlock -const highlightSchema = z +const pdfHighlightSchema = z .object({ id: z.string(), text: z.string().optional(), @@ -64,6 +64,7 @@ const highlightSchema = z pageIndex: z.coerce.number(), }), ), + kind: z.literal('pdf'), }) .refine( (highlight) => @@ -74,24 +75,39 @@ const highlightSchema = z highlight.pageIndex !== null && highlight.pageIndex !== undefined && (highlight.text || highlight.image), + { message: 'Invalid Pdf highlight block' }, ); +const codeHighlightSchema = z.object({ + id: z.string(), + text: z.string().optional(), + path: dpidPathSchema, + cid: z.string(), + startLine: z.coerce.number(), + endLine: z.coerce.number(), + language: z.string(), + kind: z.literal('code'), +}); + +const highlightBlockSchema = z.union([pdfHighlightSchema, codeHighlightSchema]); +const commentSchema = z + .object({ + authorId: z.coerce.number(), + claimId: z.coerce.number(), + body: z.string(), + links: z + .string() + .array() + .refine((links) => links.every((link) => dpidPathRegex.test(link))) + .optional(), + highlights: z.array(highlightBlockSchema).optional(), + }) + .refine((comment) => comment.body?.length > 0 || !!comment?.highlights?.length, { + message: 'Either Comment body or highlights is required', + }); + export const createCommentSchema = z.object({ - body: z - .object({ - authorId: z.coerce.number(), - claimId: z.coerce.number(), - body: z.string(), - links: z - .string() - .array() - .refine((links) => links.every((link) => dpidPathRegex.test(link))) - .optional(), - highlights: z.array(highlightSchema).optional(), - }) - .refine((comment) => comment.body?.length > 0 || comment.highlights?.length > 0, { - message: 'Either Comment body or highlights is required', - }), + body: commentSchema, }); export const EMOJI_OPTIONS = z.union([z.literal('U+2705'), z.literal('U+1F914'), z.literal('U+1F440')], { From 7a984571dbd35de160dfd885fbac37c63d042c13 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 2 Apr 2024 18:13:50 +0200 Subject: [PATCH 029/141] bump desci-models version to 0.2.6-rc1 --- desci-models/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-models/package.json b/desci-models/package.json index 5329ff06e..d8cc13d93 100644 --- a/desci-models/package.json +++ b/desci-models/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/desci-models", - "version": "0.2.5", + "version": "0.2.6-rc1", "description": "Data models for DeSci Nodes", "main": "dist/index.js", "types": "dist/index.d.ts", From afc1b0bcce74c465adba27a6b9883f48959a4a5d Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 3 Apr 2024 12:05:54 +0200 Subject: [PATCH 030/141] fixes for macos setup issues --- .nvmrc | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.nvmrc b/.nvmrc index 39d00c051..23cc58a71 100755 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.17.0 \ No newline at end of file +18.20.0 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 494c842e9..147c5a5da 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18.17.0-bookworm +FROM node:18.20.0-bullseye VOLUME /root/.yarn From 80c4bc15649602e2d7c237d8a7968ab837aed3c1 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 3 Apr 2024 12:09:05 +0200 Subject: [PATCH 031/141] revert desci-repo node version --- desci-repo/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-repo/Dockerfile b/desci-repo/Dockerfile index cbda3f228..df909dce2 100644 --- a/desci-repo/Dockerfile +++ b/desci-repo/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18.16.0-bookworm +FROM node:18.20.0-bookworm VOLUME /root/.yarn From 6ea453b58d3590eaff5718df49507a09e7bbead0 Mon Sep 17 00:00:00 2001 From: kadami Date: Wed, 3 Apr 2024 23:17:13 +0700 Subject: [PATCH 032/141] change get node contributions route to post to prevent issues with json bodies in get reqs --- desci-server/src/routes/v1/nodes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/src/routes/v1/nodes.ts b/desci-server/src/routes/v1/nodes.ts index 08b955c6a..2400e2618 100755 --- a/desci-server/src/routes/v1/nodes.ts +++ b/desci-server/src/routes/v1/nodes.ts @@ -67,11 +67,11 @@ router.get('/cover/:uuid/:version', [], getCoverImage); router.get('/documents/:uuid', [ensureUser, ensureNodeAccess], getNodeDocument); router.post('/documents/:uuid/actions', [ensureUser, ensureNodeAccess], dispatchDocumentChange); router.get('/thumbnails/:uuid/:manifestCid?', [attachUser], thumbnails); +router.post('/contributions/node/:uuid', [attachUser], getNodeContributions); router.post('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], addContributor); router.patch('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], updateContributor); router.delete('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], deleteContributor); router.get('/contributions/user/:userId', [], getUserContributions); -router.get('/contributions/node/:uuid', [attachUser], getNodeContributions); router.patch('/contributions/verify', [ensureUser], verifyContribution); router.delete('/:uuid', [ensureUser], deleteNode); From e5a39cc255e6c4e24c16484b62db9fd323ab1e27 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 3 Apr 2024 20:39:58 +0200 Subject: [PATCH 033/141] first implemention of single node locking with redis --- desci-server/scripts/be-node-dev.sh | 2 +- desci-server/src/redisClient.ts | 43 +++++++++++++++++++++++++++ desci-server/src/server.ts | 4 ++- desci-server/src/workers/publish.ts | 45 ++++++++++++++++++++--------- 4 files changed, 79 insertions(+), 15 deletions(-) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index 3a7941689..f01296753 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -4,7 +4,7 @@ apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run diff --git a/desci-server/src/redisClient.ts b/desci-server/src/redisClient.ts index 08fc8f813..3e4abd841 100644 --- a/desci-server/src/redisClient.ts +++ b/desci-server/src/redisClient.ts @@ -96,3 +96,46 @@ export async function getOrCache(key: string, fn: () => Promise, ttl = DEF throw e; } } + +class SingleNodeLockService { + private nodeId: string; + private isReady: boolean; + private MAX_LOCK_TIME = 60 * 60; // 1 hour + + constructor(id: string) { + this.nodeId = id; + if (redisClient.isOpen) { + this.isReady = true; + } else { + redisClient.on('ready', () => { + this.isReady = true; + logger.info({ ready: redisClient.isReady, open: redisClient.isOpen }, 'REDIS CLIENT IS READY'); + }); + redisClient.on('open', () => { + this.isReady = true; + logger.info({ ready: redisClient.isReady, open: redisClient.isOpen }, 'REDIS CLIENT IS OPEN'); + }); + } + logger.info({ ready: redisClient.isReady, open: redisClient.isOpen }, 'INIT SingleNodeLockService'); + } + + async aquireLock(key: string, lockTime = this.MAX_LOCK_TIME) { + logger.info({ ready: this.isReady, open: redisClient.isOpen }, 'ACQUIRE LOCK'); + if (!this.isReady) return false; + const result = await redisClient.set(key, 'true', { NX: true, EX: lockTime }); + logger.info({ result, key }, 'ACQUIRE LOCK'); + if (result) { + return true; + } + return false; + } + + async freeLock(key: string) { + logger.info({ key }, 'FREE LOCK'); + return await redisClient.del(key); + } + + // TODO: implement clean up method to free up locks on server crash +} + +export const lockService = new SingleNodeLockService(''); diff --git a/desci-server/src/server.ts b/desci-server/src/server.ts index 8b08fa572..aaa6e2d72 100644 --- a/desci-server/src/server.ts +++ b/desci-server/src/server.ts @@ -212,7 +212,9 @@ class AppServer { } async #initWorker() { - await runWorkerUntilStopped(); + await Promise.all([runWorkerUntilStopped(), runWorkerUntilStopped()]); + // TODO: remove after testing + // await runWorkerUntilStopped(); } } diff --git a/desci-server/src/workers/publish.ts b/desci-server/src/workers/publish.ts index 717a0f20f..01d667a4f 100644 --- a/desci-server/src/workers/publish.ts +++ b/desci-server/src/workers/publish.ts @@ -1,9 +1,11 @@ -import { PublishTaskQueueStatus } from '@prisma/client'; +import { PublishTaskQueue, PublishTaskQueueStatus } from '@prisma/client'; import { ethers } from 'ethers'; import { prisma } from '../client.js'; import { publishHandler } from '../controllers/nodes/publish.js'; import { logger as parentLogger } from '../logger.js'; +import { lockService } from '../redisClient.js'; +import { randomUUID64 } from '../utils.js'; enum ProcessOutcome { EmptyQueue, @@ -34,9 +36,8 @@ const checkTransaction = async (transactionId: string, uuid: string) => { return tx?.status; }; -async function processPublishQueue() { - const task = await dequeueTask(); - +async function processPublishQueue(workerId = '') { + const task = await dequeueTask(workerId); if (!task) return ProcessOutcome.EmptyQueue; try { @@ -44,37 +45,53 @@ async function processPublishQueue() { if (txStatus === 1) { // todo: dispatch publish task publishHandler(task) - .then((published) => { + .then(async (published) => { logger.info({ task, published }, 'PUBLISH SUCCESS'); + lockService.freeLock(task.transactionId); }) .catch((err) => { logger.info({ task, err }, 'PUBLISH FAILED'); + lockService.freeLock(task.transactionId); }); - // todo: dequeue task await prisma.publishTaskQueue.delete({ where: { id: task.id } }); } else if (txStatus === 0) { await prisma.publishTaskQueue.update({ where: { id: task.id }, data: { status: PublishTaskQueueStatus.FAILED } }); + lockService.freeLock(task.transactionId); logger.info({ txStatus }, 'PUBLISH TX Receipt'); } else { await prisma.publishTaskQueue.update({ where: { id: task.id }, data: { status: PublishTaskQueueStatus.PENDING }, }); + lockService.freeLock(task.transactionId); logger.info({ txStatus }, 'PUBLISH TX Might be stuck'); } return ProcessOutcome.TaskCompleted; } catch (err) { logger.error({ err }, 'ProcessPublishQueue::ERROR'); return ProcessOutcome.Error; + } finally { + lockService.freeLock(task.transactionId); } } -const dequeueTask = async () => { - let task = await prisma.publishTaskQueue.findFirst({ where: { status: PublishTaskQueueStatus.WAITING } }); - if (!task) { - task = await prisma.publishTaskQueue.findFirst({ where: { status: PublishTaskQueueStatus.PENDING } }); +const dequeueTask = async (workerId = '') => { + let freeTask: PublishTaskQueue; + let tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.WAITING }, take: 5 }); + if (!tasks.length) { + tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.PENDING }, take: 5 }); + } + logger.info({ tasks, workerId }, 'TASKS'); + for (const task of tasks) { + const taskLock = await lockService.aquireLock(task.transactionId); + logger.info({ taskLock, task, workerId }, 'ATTEMPT TO ACQUIRE LOCK'); + if (taskLock) { + freeTask = task; + break; + } } - return task; + logger.info({ freeTask, workerId }, 'DEQUEUE TASK'); + return freeTask; }; const delay = async (timeMs: number) => { @@ -82,9 +99,11 @@ const delay = async (timeMs: number) => { }; export async function runWorkerUntilStopped() { + // TODO: add logging of work issued id and server instance kubctl id + const workerId = randomUUID64(); while (true) { - const outcome = await processPublishQueue(); - console.log('Processed Queue', outcome); + const outcome = await processPublishQueue(workerId); + logger.info({ outcome, workerId }, 'Processed Queue'); switch (outcome) { case ProcessOutcome.EmptyQueue: await delay(10000); From 168bfa07b0c7d647fc179589e2d6a2d16a67719f Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 4 Apr 2024 02:21:28 +0200 Subject: [PATCH 034/141] free all active locks on server stop signal --- desci-server/src/redisClient.ts | 47 ++++++++++++++++++++--------- desci-server/src/server.ts | 5 ++- desci-server/src/workers/publish.ts | 17 +++++------ 3 files changed, 43 insertions(+), 26 deletions(-) diff --git a/desci-server/src/redisClient.ts b/desci-server/src/redisClient.ts index 3e4abd841..fffee3b11 100644 --- a/desci-server/src/redisClient.ts +++ b/desci-server/src/redisClient.ts @@ -44,9 +44,9 @@ redisClient.on('error', (err) => { }); // gracefully shutdown -process.on('exit', () => { - redisClient.quit(); -}); +// process.on('exit', () => { +// redisClient.quit(); +// }); export default redisClient; @@ -98,12 +98,11 @@ export async function getOrCache(key: string, fn: () => Promise, ttl = DEF } class SingleNodeLockService { - private nodeId: string; private isReady: boolean; private MAX_LOCK_TIME = 60 * 60; // 1 hour + private activeLocks: Set; - constructor(id: string) { - this.nodeId = id; + constructor() { if (redisClient.isOpen) { this.isReady = true; } else { @@ -111,20 +110,18 @@ class SingleNodeLockService { this.isReady = true; logger.info({ ready: redisClient.isReady, open: redisClient.isOpen }, 'REDIS CLIENT IS READY'); }); - redisClient.on('open', () => { - this.isReady = true; - logger.info({ ready: redisClient.isReady, open: redisClient.isOpen }, 'REDIS CLIENT IS OPEN'); - }); } logger.info({ ready: redisClient.isReady, open: redisClient.isOpen }, 'INIT SingleNodeLockService'); + this.activeLocks = new Set(); } async aquireLock(key: string, lockTime = this.MAX_LOCK_TIME) { - logger.info({ ready: this.isReady, open: redisClient.isOpen }, 'ACQUIRE LOCK'); + logger.info({ ready: this.isReady, open: redisClient.isOpen }, 'START ACQUIRE LOCK'); if (!this.isReady) return false; const result = await redisClient.set(key, 'true', { NX: true, EX: lockTime }); - logger.info({ result, key }, 'ACQUIRE LOCK'); + logger.info({ result, key }, ' END ACQUIRE LOCK'); if (result) { + this.activeLocks.add(key); return true; } return false; @@ -132,10 +129,32 @@ class SingleNodeLockService { async freeLock(key: string) { logger.info({ key }, 'FREE LOCK'); + this.activeLocks.delete(key); return await redisClient.del(key); } - // TODO: implement clean up method to free up locks on server crash + freeLocks() { + logger.info({ locks: [...this.activeLocks] }, 'FREE ALL LOCKS'); + this.activeLocks.forEach((key) => redisClient.del(key)); + } } -export const lockService = new SingleNodeLockService(''); +export const lockService = new SingleNodeLockService(); + +process.on('exit', () => { + lockService.freeLocks(); + redisClient.quit(); +}); + +// catches ctrl+c event +process.on('SIGINT', () => { + lockService.freeLocks(); +}); + +// catches "kill pid" (for example: nodemon restart) +process.on('SIGUSR1', () => { + lockService.freeLocks(); +}); +process.on('SIGUSR2', () => { + lockService.freeLocks(); +}); diff --git a/desci-server/src/server.ts b/desci-server/src/server.ts index aaa6e2d72..41c754c3f 100644 --- a/desci-server/src/server.ts +++ b/desci-server/src/server.ts @@ -65,7 +65,6 @@ class AppServer { app: Express; server: HttpServer; port: number; - // socketServer: SocketServer; constructor() { this.app = express(); @@ -212,9 +211,9 @@ class AppServer { } async #initWorker() { - await Promise.all([runWorkerUntilStopped(), runWorkerUntilStopped()]); // TODO: remove after testing - // await runWorkerUntilStopped(); + // await Promise.all([runWorkerUntilStopped(), runWorkerUntilStopped()]); + await runWorkerUntilStopped(); } } diff --git a/desci-server/src/workers/publish.ts b/desci-server/src/workers/publish.ts index 01d667a4f..806cfa5f9 100644 --- a/desci-server/src/workers/publish.ts +++ b/desci-server/src/workers/publish.ts @@ -43,21 +43,20 @@ async function processPublishQueue(workerId = '') { try { const txStatus = await checkTransaction(task.transactionId, task.uuid); if (txStatus === 1) { - // todo: dispatch publish task publishHandler(task) .then(async (published) => { - logger.info({ task, published }, 'PUBLISH SUCCESS'); + logger.info({ task, published }, 'PUBLISH HANDLER SUCCESS'); lockService.freeLock(task.transactionId); }) .catch((err) => { - logger.info({ task, err }, 'PUBLISH FAILED'); + logger.info({ task, err }, 'PUBLISH HANDLER ERROR'); lockService.freeLock(task.transactionId); }); await prisma.publishTaskQueue.delete({ where: { id: task.id } }); } else if (txStatus === 0) { await prisma.publishTaskQueue.update({ where: { id: task.id }, data: { status: PublishTaskQueueStatus.FAILED } }); lockService.freeLock(task.transactionId); - logger.info({ txStatus }, 'PUBLISH TX Receipt'); + logger.info({ txStatus }, 'PUBLISH TX FAILED'); } else { await prisma.publishTaskQueue.update({ where: { id: task.id }, @@ -76,7 +75,7 @@ async function processPublishQueue(workerId = '') { } const dequeueTask = async (workerId = '') => { - let freeTask: PublishTaskQueue; + let nextTask: PublishTaskQueue; let tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.WAITING }, take: 5 }); if (!tasks.length) { tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.PENDING }, take: 5 }); @@ -86,12 +85,12 @@ const dequeueTask = async (workerId = '') => { const taskLock = await lockService.aquireLock(task.transactionId); logger.info({ taskLock, task, workerId }, 'ATTEMPT TO ACQUIRE LOCK'); if (taskLock) { - freeTask = task; + nextTask = task; break; } } - logger.info({ freeTask, workerId }, 'DEQUEUE TASK'); - return freeTask; + logger.info({ nextTask, workerId }, 'DEQUEUE TASK'); + return nextTask; }; const delay = async (timeMs: number) => { @@ -99,7 +98,7 @@ const delay = async (timeMs: number) => { }; export async function runWorkerUntilStopped() { - // TODO: add logging of work issued id and server instance kubctl id + // TODO: use server instance k8s pod id const workerId = randomUUID64(); while (true) { const outcome = await processPublishQueue(workerId); From 304ced148f2fc1b9b35b78476490583987c8687f Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 4 Apr 2024 02:31:55 +0200 Subject: [PATCH 035/141] free locks on uncaughtexceptions --- desci-server/src/redisClient.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/desci-server/src/redisClient.ts b/desci-server/src/redisClient.ts index fffee3b11..9d604c883 100644 --- a/desci-server/src/redisClient.ts +++ b/desci-server/src/redisClient.ts @@ -158,3 +158,7 @@ process.on('SIGUSR1', () => { process.on('SIGUSR2', () => { lockService.freeLocks(); }); + +process.on('uncaughtException', () => { + lockService.freeLocks(); +}); From 54761b95bfb1eb57a1a9d67e1425e3bc3dca0c26 Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 3 Apr 2024 12:24:44 +0200 Subject: [PATCH 036/141] contracts: regenerate outputs, move deps to devDeps to reduce footprint, reintroduce ganache deployment --- desci-contracts/Dockerfile | 2 +- desci-contracts/Makefile | 6 +- desci-contracts/package.json | 18 +- desci-contracts/yarn.lock | 4152 ++++++++++++++++++---------------- 4 files changed, 2176 insertions(+), 2002 deletions(-) diff --git a/desci-contracts/Dockerfile b/desci-contracts/Dockerfile index 92152a45e..cbc321e2a 100644 --- a/desci-contracts/Dockerfile +++ b/desci-contracts/Dockerfile @@ -12,4 +12,4 @@ RUN apt-get update && apt-get -qy install jq postgresql-client COPY . . EXPOSE 8545 -CMD [ "scripts/startTestChain.sh" ] \ No newline at end of file +CMD [ "scripts/startTestChain.sh" ] diff --git a/desci-contracts/Makefile b/desci-contracts/Makefile index d22847ebb..2ac150f8e 100644 --- a/desci-contracts/Makefile +++ b/desci-contracts/Makefile @@ -2,9 +2,9 @@ seed: install # npx hardhat run scripts/migrateToNewContract.js --network ganache - scripts/seed.sh "dpid migration" "migration-complete.json" "migrate" - # scripts/seed.sh "dpid registry" "unknown-dpid.json" "deploy:dpid:ganache" - # scripts/seed.sh "research object" "unknown-research-object.json" "deploy:ganache" + # scripts/seed.sh "dpid migration" "migration-complete.json" "migrate" + scripts/seed.sh "dpid registry" "unknown-dpid.json" "deploy:dpid:ganache" + scripts/seed.sh "research object" "unknown-research-object.json" "deploy:ganache" build: install yarn build diff --git a/desci-contracts/package.json b/desci-contracts/package.json index 9ccf1ce9c..8163b00d5 100644 --- a/desci-contracts/package.json +++ b/desci-contracts/package.json @@ -1,7 +1,7 @@ { "name": "@desci-labs/desci-contracts", "description": "Smart contracts implementing DeSci Nodes on-chain state and logic", - "version": "0.2.1", + "version": "0.2.3-rc0", "license": "MIT", "scripts": { "test": "hardhat clean && hardhat test", @@ -30,9 +30,10 @@ "devDependencies": { "@graphprotocol/graph-cli": "^0.59.0", "@graphprotocol/graph-ts": "^0.32.0", - "@nomiclabs/hardhat-ethers": "^2.0.0", - "@nomiclabs/hardhat-waffle": "^2.0.1", - "@openzeppelin/contracts-upgradeable": "^4.7.3", + "@nomiclabs/hardhat-ethers": "2.0.5", + "@nomiclabs/hardhat-waffle": "2.0.3", + "@openzeppelin/contracts": "4.8.1", + "@openzeppelin/contracts-upgradeable": "4.7.3", "@openzeppelin/hardhat-upgrades": "^1.20.0", "@typechain/ethers-v5": "^9.0.0", "@typechain/hardhat": "^4.0.0", @@ -41,6 +42,8 @@ "@types/node": "^16.4.10", "as-base64": "^0.2.0", "chai": "^4.3.4", + "cids": "^1.1.9", + "dotenv": "^10.0.0", "ethereum-waffle": "^3.4.0", "ethers": "5.5.4", "ganache": "^7.8.0", @@ -49,16 +52,11 @@ "hardhat-deploy-ethers": "^0.3.0-beta.10", "hardhat-gas-reporter": "^1.0.4", "mocha": "^9.0.3", + "openzeppelin-solidity": "github:OpenZeppelin/openzeppelin-contracts#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946", "ts-generator": "^0.1.1", "ts-morph": "^11.0.3", "ts-node": "^10.1.0", "typechain": "^7.0.0", "typescript": "^4.3.5" - }, - "dependencies": { - "@openzeppelin/contracts": "^4.8.1", - "cids": "^1.1.9", - "dotenv": "^10.0.0", - "openzeppelin-solidity": "git+https://github.com/OpenZeppelin/openzeppelin-contracts#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" } } diff --git a/desci-contracts/yarn.lock b/desci-contracts/yarn.lock index 1ebaa97a8..978088aa4 100644 --- a/desci-contracts/yarn.lock +++ b/desci-contracts/yarn.lock @@ -2,26 +2,61 @@ # yarn lockfile v1 +"@aws-crypto/sha256-js@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-1.2.2.tgz#02acd1a1fda92896fc5a28ec7c6e164644ea32fc" + integrity sha512-Nr1QJIbW/afYYGzYvrF70LtaHrIRtd4TNAglX8BvlfxJLZ45SAmueIKYl5tWoNBPzp65ymXGFK0Bb1vZUpuc9g== + dependencies: + "@aws-crypto/util" "^1.2.2" + "@aws-sdk/types" "^3.1.0" + tslib "^1.11.1" + +"@aws-crypto/util@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-1.2.2.tgz#b28f7897730eb6538b21c18bd4de22d0ea09003c" + integrity sha512-H8PjG5WJ4wz0UXAFXeJjWCW1vkvIJ3qUUD+rGRwJ2/hj+xT58Qle2MTql/2MGzkU+1JLAFuR6aJpLAjHwhmwwg== + dependencies: + "@aws-sdk/types" "^3.1.0" + "@aws-sdk/util-utf8-browser" "^3.0.0" + tslib "^1.11.1" + +"@aws-sdk/types@^3.1.0": + version "3.535.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.535.0.tgz#5e6479f31299dd9df170e63f4d10fe739008cf04" + integrity sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg== + dependencies: + "@smithy/types" "^2.12.0" + tslib "^2.6.2" + +"@aws-sdk/util-utf8-browser@^3.0.0": + version "3.259.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" + integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== + dependencies: + tslib "^2.3.1" + "@babel/code-frame@^7.0.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae" + integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.24.2" + picocolors "^1.0.0" -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== +"@babel/highlight@^7.24.2": + version "7.24.2" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26" + integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA== dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" "@chainsafe/as-sha256@^0.3.1": version "0.3.1" @@ -59,18 +94,6 @@ "@chainsafe/persistent-merkle-tree" "^0.4.2" case "^1.6.3" -"@cspotcode/source-map-consumer@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" - integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== - -"@cspotcode/source-map-support@0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" - integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== - dependencies: - "@cspotcode/source-map-consumer" "0.8.0" - "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -94,18 +117,18 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== -"@ethereum-waffle/chai@^3.4.0": - version "3.4.3" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.3.tgz#a2fbaa583f02164c6a5c755df488f45482f6f382" - integrity sha512-yu1DCuyuEvoQFP9PCbHqiycGxwKUrZ24yc/DsjkBlLAQ3OSLhbmlbMiz804YFymWCNsFmobEATp6kBuUDexo7w== +"@ethereum-waffle/chai@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.4.tgz#16c4cc877df31b035d6d92486dfdf983df9138ff" + integrity sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g== dependencies: - "@ethereum-waffle/provider" "^3.4.1" + "@ethereum-waffle/provider" "^3.4.4" ethers "^5.5.2" -"@ethereum-waffle/compiler@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.4.0.tgz#68917321212563544913de33e408327745cb1284" - integrity sha512-a2wxGOoB9F1QFRE+Om7Cz2wn+pxM/o7a0a6cbwhaS2lECJgFzeN9xEkVrKahRkF4gEfXGcuORg4msP0Asxezlw== +"@ethereum-waffle/compiler@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz#d568ee0f6029e68b5c645506079fbf67d0dfcf19" + integrity sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ== dependencies: "@resolver-engine/imports" "^0.3.3" "@resolver-engine/imports-fs" "^0.3.3" @@ -119,34 +142,48 @@ ts-generator "^0.1.1" typechain "^3.0.0" -"@ethereum-waffle/ens@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.3.1.tgz#0f1b7ac4fc156641c18accd60f8ce256e2c475cf" - integrity sha512-xSjNWnT2Iwii3J3XGqD+F5yLEOzQzLHNLGfI5KIXdtQ4FHgReW/AMGRgPPLi+n+SP08oEQWJ3sEKrvbFlwJuaA== +"@ethereum-waffle/ens@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/ens/-/ens-3.4.4.tgz#db97ea2c9decbb70b9205d53de2ccbd6f3182ba1" + integrity sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg== dependencies: "@ensdomains/ens" "^0.4.4" "@ensdomains/resolver" "^0.2.4" ethers "^5.5.2" -"@ethereum-waffle/mock-contract@^3.3.0": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.3.1.tgz#dfd53a6e184f5e4c5e1119a8aef67f2d88914497" - integrity sha512-h9yChF7IkpJLODg/o9/jlwKwTcXJLSEIq3gewgwUJuBHnhPkJGekcZvsTbximYc+e42QUZrDUATSuTCIryeCEA== +"@ethereum-waffle/mock-contract@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz#fc6ffa18813546f4950a69f5892d4dd54b2c685a" + integrity sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA== dependencies: "@ethersproject/abi" "^5.5.0" ethers "^5.5.2" -"@ethereum-waffle/provider@^3.4.0", "@ethereum-waffle/provider@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.1.tgz#d59f5741d5ee96a7d5501f455709b38d81c8be2f" - integrity sha512-5iDte7c9g9N1rTRE/P4npwk1Hus/wA2yH850X6sP30mr1IrwSG9NKn6/2SOQkAVJnh9jqyLVg2X9xCODWL8G4A== +"@ethereum-waffle/provider@^3.4.4": + version "3.4.4" + resolved "https://registry.yarnpkg.com/@ethereum-waffle/provider/-/provider-3.4.4.tgz#398fc1f7eb91cc2df7d011272eacba8af0c7fffb" + integrity sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g== dependencies: - "@ethereum-waffle/ens" "^3.3.1" + "@ethereum-waffle/ens" "^3.4.4" ethers "^5.5.2" ganache-core "^2.13.2" patch-package "^6.2.2" postinstall-postinstall "^2.1.0" +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + "@ethersproject/abi@5.0.0-beta.153": version "5.0.0-beta.153" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" @@ -177,7 +214,7 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.1", "@ethersproject/abi@^5.5.0": +"@ethersproject/abi@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== @@ -192,7 +229,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.3.1", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -207,7 +244,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": +"@ethersproject/abstract-provider@5.5.1": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== @@ -220,7 +257,7 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.5.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -233,7 +270,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.3.0", "@ethersproject/abstract-signer@^5.5.0": +"@ethersproject/abstract-signer@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== @@ -244,7 +281,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.3.0", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -255,7 +292,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.5.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.3.0", "@ethersproject/address@^5.5.0": +"@ethersproject/address@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== @@ -266,7 +303,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/rlp" "^5.5.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.3.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -277,21 +314,21 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": +"@ethersproject/base64@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== dependencies: "@ethersproject/bytes" "^5.5.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.5.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": +"@ethersproject/basex@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== @@ -299,7 +336,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.5.0", "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -307,7 +344,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.3.0", "@ethersproject/bignumber@^5.5.0": +"@ethersproject/bignumber@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== @@ -316,7 +353,7 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.3.0", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -325,35 +362,35 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.3.0", "@ethersproject/bytes@^5.5.0": +"@ethersproject/bytes@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.3.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.5.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.5.0": +"@ethersproject/constants@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== dependencies: "@ethersproject/bignumber" "^5.5.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.7.0", "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.5.0", "@ethersproject/contracts@^5.3.0": +"@ethersproject/contracts@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== @@ -369,7 +406,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/transactions" "^5.5.0" -"@ethersproject/contracts@5.7.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.3.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -385,7 +422,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.5.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.5.0": +"@ethersproject/hash@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== @@ -399,7 +436,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.7.0", "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.5.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -414,7 +451,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": +"@ethersproject/hdnode@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== @@ -432,7 +469,7 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/wordlists" "^5.5.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.5.0", "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -450,7 +487,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0": +"@ethersproject/json-wallets@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== @@ -469,7 +506,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.5.0", "@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -488,7 +525,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.5.0": +"@ethersproject/keccak256@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== @@ -496,7 +533,7 @@ "@ethersproject/bytes" "^5.5.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -504,38 +541,31 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.5.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.5.0": +"@ethersproject/logger@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.7.0", "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.5.2", "@ethersproject/networks@^5.5.0": +"@ethersproject/networks@5.5.2": version "5.5.2" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.2.tgz#784c8b1283cd2a931114ab428dae1bd00c07630b" integrity sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/networks@5.7.1": +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.5.0", "@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/networks@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" - integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": +"@ethersproject/pbkdf2@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== @@ -543,7 +573,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/sha2" "^5.5.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.5.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -551,21 +581,21 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.5.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.5.0": +"@ethersproject/properties@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.7.0", "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.5.3", "@ethersproject/providers@^5.3.1": +"@ethersproject/providers@5.5.3": version "5.5.3" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.3.tgz#56c2b070542ac44eb5de2ed3cf6784acd60a3130" integrity sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA== @@ -590,7 +620,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.3.1", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -616,7 +646,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.5.1", "@ethersproject/random@^5.5.0": +"@ethersproject/random@5.5.1": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.1.tgz#7cdf38ea93dc0b1ed1d8e480ccdaf3535c555415" integrity sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA== @@ -624,7 +654,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.5.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -632,7 +662,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": +"@ethersproject/rlp@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== @@ -640,7 +670,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -648,7 +678,7 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": +"@ethersproject/sha2@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== @@ -657,7 +687,7 @@ "@ethersproject/logger" "^5.5.0" hash.js "1.1.7" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.5.0", "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -666,7 +696,7 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": +"@ethersproject/signing-key@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== @@ -678,7 +708,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.5.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -690,7 +720,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.5.0", "@ethersproject/solidity@^5.3.0": +"@ethersproject/solidity@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== @@ -702,7 +732,7 @@ "@ethersproject/sha2" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/solidity@5.7.0": +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.3.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== @@ -714,7 +744,7 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.5.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.5.0": +"@ethersproject/strings@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== @@ -723,7 +753,7 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.7.0", "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -732,7 +762,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0", "@ethersproject/transactions@^5.5.0": +"@ethersproject/transactions@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== @@ -747,7 +777,7 @@ "@ethersproject/rlp" "^5.5.0" "@ethersproject/signing-key" "^5.5.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.3.0", "@ethersproject/transactions@^5.5.0", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -780,7 +810,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/wallet@5.5.0", "@ethersproject/wallet@^5.3.0": +"@ethersproject/wallet@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== @@ -801,7 +831,7 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/wordlists" "^5.5.0" -"@ethersproject/wallet@5.7.0": +"@ethersproject/wallet@5.7.0", "@ethersproject/wallet@^5.3.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== @@ -822,7 +852,7 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.5.1", "@ethersproject/web@^5.5.0": +"@ethersproject/web@5.5.1": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== @@ -833,7 +863,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/web@5.7.1": +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.5.0", "@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -844,18 +874,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/web@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" - integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": +"@ethersproject/wordlists@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== @@ -866,7 +885,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.5.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -878,9 +897,9 @@ "@ethersproject/strings" "^5.7.0" "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== "@float-capital/float-subgraph-uncrashable@^0.0.0-alpha.4": version "0.0.0-internal-testing.5" @@ -957,9 +976,9 @@ multiformats "^9.5.4" "@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" @@ -974,10 +993,24 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@ljharb/resumer@~0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@ljharb/resumer/-/resumer-0.0.1.tgz#8a940a9192dd31f6a1df17564bbd26dc6ad3e68d" + integrity sha512-skQiAOrCfO7vRTq53cxznMpks7wS1va95UCidALlOVWqvBAzwPVErwizDwoMqNVMEn1mDq0utxZd02eIrvF1lw== + dependencies: + "@ljharb/through" "^2.3.9" + +"@ljharb/through@^2.3.9", "@ljharb/through@~2.3.9": + version "2.3.13" + resolved "https://registry.yarnpkg.com/@ljharb/through/-/through-2.3.13.tgz#b7e4766e0b65aa82e529be945ab078de79874edc" + integrity sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ== + dependencies: + call-bind "^1.0.7" + "@metamask/eth-sig-util@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz#11553ba06de0d1352332c1bde28c8edd00e0dcf6" - integrity sha512-LczOjjxY4A7XYloxzyxJIHONELmUxVZncpOLoClpEcTiebiVdM46KRPYXGuULro9oNNR2xdVx3yoKiQjdfWmoA== + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== dependencies: ethereumjs-abi "^0.6.8" ethereumjs-util "^6.2.1" @@ -990,11 +1023,23 @@ resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" @@ -1221,12 +1266,12 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" -"@nomiclabs/hardhat-ethers@^2.0.0": +"@nomiclabs/hardhat-ethers@2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.5.tgz#131b0da1b71680d5a01569f916ae878229d326d3" integrity sha512-A2gZAGB6kUvLx+kzM92HKuUF33F1FSe90L0TmkXkT2Hh0OKRpvWZURUSU2nghD2yC4DzfEZ3DftfeHGvZ2JTUw== -"@nomiclabs/hardhat-waffle@^2.0.1": +"@nomiclabs/hardhat-waffle@2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-waffle/-/hardhat-waffle-2.0.3.tgz#9c538a09c5ed89f68f5fd2dc3f78f16ed1d6e0b1" integrity sha512-049PHSnI1CZq6+XTbrMbMv5NaL7cednTfPenx02k3cEh8wBMLa6ys++dBETJa6JjfwgA9nBhhHQ173LJv6k2Pg== @@ -1321,40 +1366,65 @@ chalk "^4" fast-levenshtein "^3.0.0" -"@openzeppelin/contracts-upgradeable@^4.7.3": +"@openzeppelin/contracts-upgradeable@4.7.3": version "4.7.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== -"@openzeppelin/contracts@^4.8.1": +"@openzeppelin/contracts@4.8.1": version "4.8.1" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.8.1.tgz#709cfc4bbb3ca9f4460d60101f15dac6b7a2d5e4" integrity sha512-xQ6eUZl+RDyb/FiZe1h+U7qr/f4p/SrTSQcTPH2bjur3C5DbuW/zFgCU/b1P/xcIaEqJep+9ju4xDRi3rmChdQ== +"@openzeppelin/defender-base-client@^1.46.0": + version "1.54.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz#ed777ae56908d5a920e1f72ac735c63694e65b30" + integrity sha512-DRGz/7KN3ZQwu28YWMOaojrC7jjPkz/uCwkC8/C8B11qwZhA5qIVvyhYHhhFOCl0J84+E3TNdvkPD2q3p2WaJw== + dependencies: + amazon-cognito-identity-js "^6.0.1" + async-retry "^1.3.3" + axios "^1.4.0" + lodash "^4.17.19" + node-fetch "^2.6.0" + "@openzeppelin/hardhat-upgrades@^1.20.0": - version "1.20.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.20.0.tgz#fe1bddc4ab591ccf185caf4cfa269a4851b73599" - integrity sha512-ign7fc/ZdPe+KAYCB91619o+wlBr7sIEEt1nqLhoXAJ9f0qVuXkwAaTdLB0MTSWH85TzlUUT2fTJp1ZnZ1o4LQ== + version "1.28.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.28.0.tgz#6361f313a8a879d8a08a5e395acf0933bc190950" + integrity sha512-7sb/Jf+X+uIufOBnmHR0FJVWuxEs2lpxjJnLNN6eCJCP8nD0v+Ot5lTOW2Qb/GFnh+fLvJtEkhkowz4ZQ57+zQ== dependencies: - "@openzeppelin/upgrades-core" "^1.18.0" + "@openzeppelin/defender-base-client" "^1.46.0" + "@openzeppelin/platform-deploy-client" "^0.8.0" + "@openzeppelin/upgrades-core" "^1.27.0" chalk "^4.1.0" debug "^4.1.1" proper-lockfile "^4.1.1" -"@openzeppelin/upgrades-core@^1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.18.0.tgz#a5db80d15e6b87d45307ad27314c91807a506c00" - integrity sha512-fFp5sscGC876yhq7BU595LG45yky21sZFa6cDJigluUjAyJSPoLwF7GD9bSwQMMo4jC7ii1UJBtLipUxN6PVTA== +"@openzeppelin/platform-deploy-client@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/platform-deploy-client/-/platform-deploy-client-0.8.0.tgz#af6596275a19c283d6145f0128cc1247d18223c1" + integrity sha512-POx3AsnKwKSV/ZLOU/gheksj0Lq7Is1q2F3pKmcFjGZiibf+4kjGxr4eSMrT+2qgKYZQH1ZLQZ+SkbguD8fTvA== + dependencies: + "@ethersproject/abi" "^5.6.3" + "@openzeppelin/defender-base-client" "^1.46.0" + axios "^0.21.2" + lodash "^4.17.19" + node-fetch "^2.6.0" + +"@openzeppelin/upgrades-core@^1.27.0": + version "1.32.5" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.32.5.tgz#2496174fd1f47be4dd8f36b29714d4e1f8240632" + integrity sha512-R0wprsyJ4xWiRW05kaTfZZkRVpG2g0af3/hpjE7t2mX0Eb2n40MQLokTwqIk4LDzpp910JfLSpB0vBuZ6WNPog== dependencies: - cbor "^8.0.0" + cbor "^9.0.0" chalk "^4.1.0" - compare-versions "^4.0.0" + compare-versions "^6.0.0" debug "^4.1.1" ethereumjs-util "^7.0.3" + minimist "^1.2.7" proper-lockfile "^4.1.1" - solidity-ast "^0.4.15" + solidity-ast "^0.4.51" -"@peculiar/asn1-schema@^2.3.6": +"@peculiar/asn1-schema@^2.3.8": version "2.3.8" resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz#04b38832a814e25731232dd5be883460a156da3b" integrity sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA== @@ -1371,15 +1441,15 @@ tslib "^2.0.0" "@peculiar/webcrypto@^1.4.0": - version "1.4.3" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7" - integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== + version "1.4.6" + resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.6.tgz#607af294c4f205efeeb172aa32cb20024fe4aecf" + integrity sha512-YBcMfqNSwn3SujUJvAaySy5tlYbYm6tVt9SKoXu8BaTdKGROiJDgPR3TXpZdAKUfklzm3lRapJEAltiMQtBgZg== dependencies: - "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/asn1-schema" "^2.3.8" "@peculiar/json-schema" "^1.1.12" - pvtsutils "^1.3.2" - tslib "^2.5.0" - webcrypto-core "^1.7.7" + pvtsutils "^1.3.5" + tslib "^2.6.2" + webcrypto-core "^1.7.9" "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" @@ -1476,10 +1546,10 @@ path-browserify "^1.0.0" url "^0.11.0" -"@scure/base@~1.1.0": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== +"@scure/base@~1.1.0", "@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== "@scure/bip32@1.1.5": version "1.1.5" @@ -1490,6 +1560,15 @@ "@noble/secp256k1" "~1.7.0" "@scure/base" "~1.1.0" +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@scure/bip39@1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" @@ -1498,6 +1577,14 @@ "@noble/hashes" "~1.2.0" "@scure/base" "~1.1.0" +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + "@sentry/core@5.30.0": version "5.30.0" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" @@ -1571,10 +1658,22 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@smithy/types@^2.12.0": + version "2.12.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-2.12.0.tgz#c44845f8ba07e5e8c88eda5aed7e6a0c462da041" + integrity sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw== + dependencies: + tslib "^2.6.2" + "@solidity-parser/parser@^0.14.0": - version "0.14.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46" - integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw== + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== dependencies: antlr4ts "^0.5.0-alpha.4" @@ -1585,6 +1684,13 @@ dependencies: defer-to-connect "^1.0.1" +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + "@trufflesuite/bigint-buffer@1.1.10": version "1.1.10" resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" @@ -1592,15 +1698,15 @@ dependencies: node-gyp-build "4.4.0" -"@trufflesuite/uws-js-unofficial@20.10.0-unofficial.2": - version "20.10.0-unofficial.2" - resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.10.0-unofficial.2.tgz#7ed613ce3260cd5d1773a4d5787a2a106acd1a91" - integrity sha512-oQQlnS3oNeGsgS4K3KCSSavJgSb0W9D5ktZs4FacX9VbM7b+NlhjH96d6/G4fMrz+bc5MXRyco419on0X0dvRA== +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== dependencies: - ws "8.2.3" + ws "8.13.0" optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" + bufferutil "4.0.7" + utf-8-validate "6.0.3" "@ts-morph/common@~0.10.1": version "0.10.1" @@ -1613,24 +1719,24 @@ path-browserify "^1.0.1" "@tsconfig/node10@^1.0.7": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" - integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" - integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" - integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" - integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@typechain/ethers-v5@^2.0.0": version "2.0.0" @@ -1655,9 +1761,9 @@ fs-extra "^9.1.0" "@types/bn.js@*", "@types/bn.js@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.0.tgz#32c5d271503a12653c62cf4d2b45e6eab8cebc68" - integrity sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA== + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== dependencies: "@types/node" "*" @@ -1668,10 +1774,20 @@ dependencies: "@types/node" "*" +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + "@types/chai@*", "@types/chai@^4.2.21": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" - integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== + version "4.3.14" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6" + integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w== "@types/cli-progress@^3.11.0": version "3.11.5" @@ -1697,7 +1813,19 @@ "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha1-yayFsqX9GENbjIXZ7LUObWyJP/g= + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" @@ -1724,27 +1852,22 @@ "@types/node" "*" "@types/mocha@^9.0.0": - version "9.1.0" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.0.tgz#baf17ab2cca3fcce2d322ebc30454bff487efad5" - integrity sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg== + version "9.1.1" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4" + integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/node-fetch@^2.5.5": - version "2.6.1" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.1.tgz#8f127c50481db65886800ef496f20bbf15518975" - integrity sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA== + version "2.6.11" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24" + integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== dependencies: "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" - integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== + form-data "^4.0.0" -"@types/node@>=13.7.0": - version "20.10.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.5.tgz#47ad460b514096b7ed63a1dae26fad0914ed3ab2" - integrity sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw== +"@types/node@*", "@types/node@>=13.7.0": + version "20.12.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.4.tgz#af5921bd75ccdf3a3d8b3fa75bf3d3359268cd11" + integrity sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw== dependencies: undici-types "~5.26.4" @@ -1753,20 +1876,15 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^12.12.54": +"@types/node@^12.12.54", "@types/node@^12.12.6": version "12.20.55" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== -"@types/node@^12.12.6": - version "12.20.46" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.46.tgz#7e49dee4c54fd19584e6a9e0da5f3dc2e9136bc7" - integrity sha512-cPjLXj8d6anFPzFvOPxS3fvly3Shm5nTfl6g8X5smexixbuGUf7hfr21J5tX9JW+UPStp/5P5R8qrKL5IyVJ+A== - "@types/node@^16.4.10": - version "16.11.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.26.tgz#63d204d136c9916fb4dcd1b50f9740fe86884e47" - integrity sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ== + version "16.18.94" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.94.tgz#3337174e6d031e5803eb0a6a34fdbaafc08b26c3" + integrity sha512-X8q3DoKq8t/QhA0Rk/9wJUajxtXRDiCK+cVaONKLxpsjPhu+xX6uZuEj4UKGLQ4p0obTdFxa0cP/BMvf9mOYZA== "@types/node@^8.0.0": version "8.10.66" @@ -1774,26 +1892,26 @@ integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== dependencies: "@types/node" "*" "@types/prettier@^2.1.1": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/qs@^6.2.31", "@types/qs@^6.9.4": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.14" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" + integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA== "@types/readable-stream@^2.3.13": version "2.3.15" @@ -1810,10 +1928,17 @@ dependencies: "@types/node" "*" +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + "@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== dependencies: "@types/node" "*" @@ -1823,29 +1948,29 @@ integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== "@types/sinon-chai@^3.2.3": - version "3.2.8" - resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" - integrity sha512-d4ImIQbT/rKMG8+AXpmcan5T2/PNeSjrYhvkwet6z0p8kzYtfgA32xzOBlbU0yqJfq+/0Ml805iFoODO0LP5/g== + version "3.2.12" + resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.12.tgz#c7cb06bee44a534ec84f3a5534c3a3a46fd779b6" + integrity sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ== dependencies: "@types/chai" "*" "@types/sinon" "*" "@types/sinon@*": - version "10.0.11" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.11.tgz#8245827b05d3fc57a6601bd35aee1f7ad330fc42" - integrity sha512-dmZsHlBsKUtBpHriNjlK0ndlvEh8dcb9uV9Afsbt89QIyydpC7NcR+nWlAhASfy3GHnxTl4FX/aKE7XZUt/B4g== + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-17.0.3.tgz#9aa7e62f0a323b9ead177ed23a36ea757141a5fa" + integrity sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw== dependencies: "@types/sinonjs__fake-timers" "*" "@types/sinonjs__fake-timers@*": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + version "8.1.5" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz#5fd3592ff10c1e9695d377020c033116cc2889f2" + integrity sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ== "@types/underscore@*": - version "1.11.4" - resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.4.tgz#62e393f8bc4bd8a06154d110c7d042a93751def3" - integrity sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg== + version "1.11.15" + resolved "https://registry.yarnpkg.com/@types/underscore/-/underscore-1.11.15.tgz#29c776daecf6f1935da9adda17509686bf979947" + integrity sha512-HP38xE+GuWGlbSRq9WrZkousaQ7dragtZCruBVMi0oX1migFZavZ3OROKHSkNp/9ouq82zrWtZpg18jFnVN96g== "@types/web3@1.0.19": version "1.0.19" @@ -1922,7 +2047,7 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: +abstract-level@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== @@ -1935,6 +2060,19 @@ abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-lev module-error "^1.0.1" queue-microtask "^1.2.3" +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + abstract-leveldown@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" @@ -1984,14 +2122,14 @@ accepts@~1.3.8: negotiator "0.6.3" acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== acorn@^8.4.1: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== adm-zip@^0.4.16: version "0.4.16" @@ -2001,7 +2139,7 @@ adm-zip@^0.4.16: aes-js@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== aes-js@^3.1.1: version "3.1.2" @@ -2033,16 +2171,27 @@ ajv@^6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +amazon-cognito-identity-js@^6.0.1: + version "6.3.12" + resolved "https://registry.yarnpkg.com/amazon-cognito-identity-js/-/amazon-cognito-identity-js-6.3.12.tgz#af73df033094ad4c679c19cf6122b90058021619" + integrity sha512-s7NKDZgx336cp+oDeUtB2ZzT8jWJp/v2LWuYl+LQtMEODe22RF1IJ4nRiDATp+rp1pTffCZcm44Quw4jx2bqNg== + dependencies: + "@aws-crypto/sha256-js" "1.2.2" + buffer "4.9.2" + fast-base64-decode "^1.0.0" + isomorphic-unfetch "^3.0.0" + js-cookie "^2.2.1" -ansi-colors@4.1.1, ansi-colors@^4.1.1: +ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" @@ -2053,17 +2202,17 @@ ansi-escapes@^4.3.0, ansi-escapes@^4.3.2: ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: version "5.0.1" @@ -2073,9 +2222,9 @@ ansi-regex@^5.0.1: ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -2112,10 +2261,10 @@ any-signal@^3.0.0: resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6" integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg== -anymatch@~3.1.1, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -2152,7 +2301,7 @@ argparse@^2.0.1: arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -2162,12 +2311,12 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== array-back@^1.0.3, array-back@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/array-back/-/array-back-1.0.4.tgz#644ba7f095f7ffcf7c43b5f0dc39d3c1f03c063b" - integrity sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs= + integrity sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw== dependencies: typical "^2.6.0" @@ -2183,15 +2332,23 @@ array-back@^3.0.1, array-back@^3.1.0: resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== -array-back@^4.0.1: +array-back@^4.0.1, array-back@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-union@^2.1.0: version "2.1.0" @@ -2201,12 +2358,51 @@ array-union@^2.1.0: array-uniq@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.findlast@^1.2.2: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" as-base64@^0.2.0: version "0.2.0" @@ -2216,17 +2412,16 @@ as-base64@^0.2.0: asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" asn1@~0.2.3: version "0.2.6" @@ -2264,7 +2459,7 @@ assemblyscript@0.19.23: assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assertion-error@^1.1.0: version "1.1.0" @@ -2274,7 +2469,7 @@ assertion-error@^1.1.0: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== astral-regex@^2.0.0: version "2.0.0" @@ -2293,6 +2488,13 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-retry@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + async@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" @@ -2303,12 +2505,12 @@ async@2.6.2: async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0, async@^2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" @@ -2320,7 +2522,7 @@ async@^3.2.3: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" @@ -2332,27 +2534,43 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axios@^0.21.1, axios@^0.21.4: +axios@^0.21.1, axios@^0.21.2, axios@^0.21.4: version "0.21.4" resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" +axios@^1.4.0, axios@^1.5.1: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -2400,7 +2618,7 @@ babel-generator@^6.26.0: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" - integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + integrity sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q== dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -2409,7 +2627,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" - integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + integrity sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -2419,7 +2637,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" - integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + integrity sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -2429,7 +2647,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" - integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + integrity sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ== dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -2438,7 +2656,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" - integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + integrity sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q== dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -2449,7 +2667,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" - integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + integrity sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2457,7 +2675,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" - integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + integrity sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2465,7 +2683,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + integrity sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2473,7 +2691,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" - integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + integrity sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg== dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -2482,7 +2700,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" - integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + integrity sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2493,7 +2711,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + integrity sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw== dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -2505,7 +2723,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2513,36 +2731,36 @@ babel-helpers@^6.24.1: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + integrity sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== dependencies: babel-runtime "^6.22.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" - integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + integrity sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw== babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" - integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + integrity sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ== babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" - integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + integrity sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ== babel-plugin-transform-async-to-generator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" - integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + integrity sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw== dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -2551,21 +2769,21 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" - integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + integrity sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + integrity sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" - integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + integrity sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw== dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -2576,7 +2794,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-plugin-transform-es2015-classes@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + integrity sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag== dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -2591,7 +2809,7 @@ babel-plugin-transform-es2015-classes@^6.23.0: babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + integrity sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw== dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -2599,14 +2817,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" - integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + integrity sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + integrity sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2614,14 +2832,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + integrity sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + integrity sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg== dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -2630,14 +2848,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0: babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + integrity sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + integrity sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA== dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -2656,7 +2874,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + integrity sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg== dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -2665,7 +2883,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + integrity sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw== dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -2674,7 +2892,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + integrity sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA== dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -2682,7 +2900,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" - integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + integrity sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ== dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -2694,7 +2912,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + integrity sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2702,14 +2920,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0: babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" - integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + integrity sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + integrity sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2718,21 +2936,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0: babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + integrity sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + integrity sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw== dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + integrity sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ== dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -2741,7 +2959,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-plugin-transform-exponentiation-operator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" - integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + integrity sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ== dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -2750,14 +2968,14 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" - integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + integrity sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg== dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + integrity sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -2801,7 +3019,7 @@ babel-preset-env@^1.7.0: babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -2814,7 +3032,7 @@ babel-register@^6.26.0: babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -2822,7 +3040,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -2833,7 +3051,7 @@ babel-template@^6.24.1, babel-template@^6.26.0: babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -2848,7 +3066,7 @@ babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -2858,7 +3076,7 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: babelify@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" - integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= + integrity sha512-vID8Fz6pPN5pJMdlUnNFSfrlcx5MUule4k9aKs/zbZPyXxMTcRrB0M4Tarw22L8afr8eYSWxDPYCob3TdrqtlA== dependencies: babel-core "^6.0.14" object-assign "^4.0.0" @@ -2871,7 +3089,7 @@ babylon@^6.18.0: backoff@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" - integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= + integrity sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA== dependencies: precond "0.2" @@ -2887,7 +3105,7 @@ base-x@^3.0.2, base-x@^3.0.8: dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2908,7 +3126,7 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" @@ -2923,14 +3141,14 @@ bigint-crypto-utils@^3.0.23: integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== bignumber.js@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" - integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== binary-install-raw@0.0.13: version "0.0.13" @@ -2951,13 +3169,6 @@ binaryen@102.0.0-nightly.20211028: resolved "https://registry.yarnpkg.com/binaryen/-/binaryen-102.0.0-nightly.20211028.tgz#8f1efb0920afd34509e342e37f84313ec936afb2" integrity sha512-GCJBVB5exbxzzvyt8MGDv/MeUjs6gkXDvf4xOIItRBptYl0Tz5sm1o/uG95YK0L0VeG5ajDu3hRtkBP2kzqC5w== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bip39@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" @@ -2969,13 +3180,6 @@ bip39@2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" -bip66@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" - integrity sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI= - dependencies: - safe-buffer "^5.0.1" - bl@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" @@ -2985,9 +3189,9 @@ bl@^1.0.0: safe-buffer "^5.1.1" blakejs@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" - integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== blob-to-it@^1.0.1: version "1.0.4" @@ -3004,38 +3208,35 @@ bluebird@^3.5.0, bluebird@^3.5.2: bn.js@4.11.6: version "4.11.6" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.8.0: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -bn.js@^5.2.1: +bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -body-parser@1.19.2, body-parser@^1.16.0: - version "1.19.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.2.tgz#4714ccd9c157d44797b8b5607d72c0b89952f26e" - integrity sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw== +body-parser@1.20.2, body-parser@^1.16.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" - depd "~1.1.2" - http-errors "1.8.1" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.9.7" - raw-body "2.4.3" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" type-is "~1.6.18" + unpipe "1.0.0" brace-expansion@^1.1.7: version "1.1.11" @@ -3068,7 +3269,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -3078,7 +3279,7 @@ braces@^3.0.1, braces@~3.0.2: brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== browser-level@^1.0.1: version "1.0.1" @@ -3100,7 +3301,7 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: +browserify-aes@^1.0.4, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -3131,7 +3332,7 @@ browserify-des@^1.0.0: inherits "^2.0.1" safe-buffer "^5.1.2" -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: +browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== @@ -3140,19 +3341,20 @@ browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: randombytes "^2.0.1" browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" + bn.js "^5.2.1" + browserify-rsa "^4.1.0" create-hash "^1.2.0" create-hmac "^1.1.7" - elliptic "^6.5.3" + elliptic "^6.5.5" + hash-base "~3.0" inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" browserslist@^3.2.6: version "3.2.8" @@ -3165,7 +3367,7 @@ browserslist@^3.2.6: bs58@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== dependencies: base-x "^3.0.2" @@ -3204,12 +3406,12 @@ buffer-from@^1.0.0: buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha1-YGSkD6dutDxyOrqe+PbhIW0QURo= + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== buffer-xor@^2.0.1: version "2.0.2" @@ -3218,6 +3420,15 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.0.5, buffer@^5.2.1, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -3241,10 +3452,17 @@ bufferutil@4.0.5: dependencies: node-gyp-build "^4.3.0" +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + bufferutil@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.6.tgz#ebd6c67c7922a0e902f053e5d8be5ec850e48433" - integrity sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw== + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== dependencies: node-gyp-build "^4.3.0" @@ -3263,14 +3481,14 @@ bytes@3.1.2: bytewise-core@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" - integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= + integrity sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA== dependencies: typewise-core "^1.2" bytewise@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" - integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= + integrity sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ== dependencies: bytewise-core "^1.2.2" typewise "^1.0.3" @@ -3290,6 +3508,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -3303,21 +3526,37 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + cachedown@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" - integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= + integrity sha512-t+yVk82vQWCJF3PsWHMld+jhhjkkWjcAzz8NbFx1iULOXWl8Tm/FdM4smZNVw3MRr0X+lVTx9PKzvEn4Ng19RQ== dependencies: abstract-leveldown "^2.4.1" lru-cache "^3.2.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7, call-bind@~1.0.2: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3327,12 +3566,7 @@ callsites@^3.0.0: camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== camelcase@^6.0.0: version "6.3.0" @@ -3340,9 +3574,9 @@ camelcase@^6.0.0: integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30000844: - version "1.0.30001312" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001312.tgz#e11eba4b87e24d22697dae05455d5aea28550d5f" - integrity sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ== + version "1.0.30001605" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz#ca12d7330dd8bcb784557eb9aa64f0037870d9d6" + integrity sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ== cardinal@^2.1.1: version "2.1.1" @@ -3360,17 +3594,17 @@ case@^1.6.3: caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== -cbor@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== +cbor@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== dependencies: nofilter "^3.1.0" @@ -3380,17 +3614,17 @@ cborg@^1.5.4, cborg@^1.6.0: integrity sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug== chai@^4.3.4: - version "4.3.6" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" - integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== dependencies: assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - loupe "^2.3.1" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" pathval "^1.1.1" - type-detect "^4.0.5" + type-detect "^4.0.8" chalk@3.0.0: version "3.0.0" @@ -3403,7 +3637,7 @@ chalk@3.0.0: chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -3411,7 +3645,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3431,39 +3665,41 @@ chalk@^4, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: "charenc@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" checkpoint-store@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" - integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= + integrity sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg== dependencies: functional-red-black-tree "^1.0.1" -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.2.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.1.1" + fsevents "~2.3.2" -chokidar@3.5.3, chokidar@^3.4.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -3535,9 +3771,9 @@ class-utils@^0.3.5: static-extend "^0.1.1" classic-level@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" - integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== dependencies: abstract-level "^1.0.2" catering "^2.1.0" @@ -3572,9 +3808,9 @@ cli-progress@^3.12.0: string-width "^4.2.3" cli-spinners@^2.2.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a" - integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw== + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== cli-table3@0.6.0: version "0.6.0" @@ -3599,21 +3835,12 @@ cli-table3@^0.5.0: cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" wrap-ansi "^2.0.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -3624,16 +3851,16 @@ cliui@^7.0.2: wrap-ansi "^7.0.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" clone@2.1.2, clone@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== clone@^1.0.2: version "1.0.4" @@ -3648,12 +3875,12 @@ code-block-writer@^10.1.1: code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3675,7 +3902,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" @@ -3719,13 +3946,13 @@ command-line-args@^5.1.1: typical "^4.0.0" command-line-usage@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.1.tgz#c908e28686108917758a49f45efb4f02f76bc03f" - integrity sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA== + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== dependencies: - array-back "^4.0.1" + array-back "^4.0.2" chalk "^2.4.2" - table-layout "^1.0.1" + table-layout "^1.0.2" typical "^5.2.0" commander@3.0.2: @@ -3738,20 +3965,20 @@ commander@^2.20.3: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -compare-versions@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-4.1.3.tgz#8f7b8966aef7dc4282b45dfa6be98434fc18a1a4" - integrity sha512-WQfnbDcrYnGr55UwbxKiQKASnTtNnaAWVi8jZyy8NTpVAXWACSne8lMD1iaIo9AiU6mnuLvSVshCzewVuWxHUg== +compare-versions@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" + integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: version "1.6.2" @@ -3779,42 +4006,45 @@ content-hash@^2.5.2: multicodec "^0.5.5" multihashes "^0.4.15" -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== convert-source-map@^1.5.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== -cookie@0.4.2, cookie@^0.4.1: +cookie@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== cookiejar@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" - integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== core-js-pure@^3.0.1: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" - integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== + version "3.36.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.36.1.tgz#1461c89e76116528b54eba20a0aff30164087a94" + integrity sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA== core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" @@ -3824,7 +4054,7 @@ core-js@^2.4.0, core-js@^2.5.0: core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -3851,12 +4081,9 @@ cosmiconfig@7.0.1: yaml "^1.10.0" crc-32@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.1.tgz#436d2bcaad27bcb6bd073a2587139d3024a16460" - integrity sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w== - dependencies: - exit-on-epipe "~1.0.1" - printj "~1.3.1" + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== create-ecdh@^4.0.0: version "4.0.4" @@ -3895,12 +4122,12 @@ create-require@^1.1.0: integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-fetch@^2.1.0, cross-fetch@^2.1.1: - version "2.2.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.5.tgz#afaf5729f3b6c78d89c9296115c9f142541a5705" - integrity sha512-xqYAhQb4NhCJSRym03dwxpP1bYXpK3y7UN83Bo2WFi3x1Zmzn0SL/6xGoPr+gpt4WmNrgCCX3HPysvOwFOW36w== + version "2.2.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" + integrity sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA== dependencies: - node-fetch "2.6.1" - whatwg-fetch "2.0.4" + node-fetch "^2.6.7" + whatwg-fetch "^2.0.4" cross-spawn@7.0.3, cross-spawn@^7.0.3: version "7.0.3" @@ -3925,7 +4152,7 @@ cross-spawn@^6.0.5: "crypt@>= 0.0.1": version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== crypto-browserify@3.12.0: version "3.12.0" @@ -3944,21 +4171,48 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== dependencies: - es5-ext "^0.10.50" - type "^1.0.1" + es5-ext "^0.10.64" + type "^2.7.2" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" +data-view-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" + integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" + integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +data-view-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" + integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-data-view "^1.0.1" + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -3973,20 +4227,20 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@4.3.3, debug@^4.1.1, debug@^4.3.3: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@4.3.4, debug@^4.3.1, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +debug@4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + debug@^3.1.0, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -3994,10 +4248,10 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decamelize@^4.0.0: version "4.0.0" @@ -4005,35 +4259,42 @@ decamelize@^4.0.0: integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^3.2.0, decompress-response@^3.3.0: +decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: mimic-response "^1.0.0" -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: type-detect "^4.0.0" deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + version "1.1.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.2.tgz#78a561b7830eef3134c7f6f3a3d6af272a678761" + integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" + is-arguments "^1.1.1" + is-date-object "^1.0.5" + is-regex "^1.1.4" + object-is "^1.1.5" object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" + regexp.prototype.flags "^1.5.1" deep-extend@~0.6.0: version "0.6.0" @@ -4041,9 +4302,9 @@ deep-extend@~0.6.0: integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA== + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" @@ -4052,6 +4313,11 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + deferred-leveldown@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" @@ -4067,24 +4333,35 @@ deferred-leveldown@~4.0.0: abstract-leveldown "~5.0.0" inherits "^2.0.3" -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-data-property@^1.0.1, define-data-property@^1.1.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - object-keys "^1.0.12" + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -4096,10 +4373,10 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= +defined@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" + integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== delay@^5.0.0: version "5.0.0" @@ -4109,43 +4386,33 @@ delay@^5.0.0: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== dependencies: repeating "^2.0.0" -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - diff@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" @@ -4224,24 +4491,15 @@ dotignore@~0.1.2: dependencies: minimatch "^3.0.4" -drbg.js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" - integrity sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs= - dependencies: - browserify-aes "^1.0.6" - create-hash "^1.1.2" - create-hmac "^1.1.4" - duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -4249,7 +4507,7 @@ ecc-jsbn@~0.1.1: ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== ejs@3.1.6: version "3.1.6" @@ -4273,11 +4531,11 @@ electron-fetch@^1.7.2: encoding "^0.1.13" electron-to-chromium@^1.3.47: - version "1.4.75" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.75.tgz#d1ad9bb46f2f1bf432118c2be21d27ffeae82fdd" - integrity sha512-LxgUNeu3BVU7sXaKjUDD9xivocQLxFtq6wgERrutdY/yIOps3ODOZExK1jg8DTEg4U8TUCb5MLGeWFOYuxjF3Q== + version "1.4.726" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.726.tgz#9ca95f19e9a0d63675e838b24681182203e40a30" + integrity sha512-xtjfBXn53RORwkbyKvDfTajtnTp0OJoPOIBzXvkNbb7+YYvCHJflba3L7Txyx/6Fov3ov2bGPr/n5MTixmPhdQ== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4: +elliptic@6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -4290,16 +4548,24 @@ elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5 minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3, elliptic@^6.5.4, elliptic@^6.5.5: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emittery@0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -4313,7 +4579,7 @@ encode-utf8@^1.0.2: encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== encoding-down@5.0.4, encoding-down@~5.0.0: version "5.0.4" @@ -4340,13 +4606,21 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enquirer@2.3.6, enquirer@^2.3.0, enquirer@^2.3.6: +enquirer@2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" +enquirer@^2.3.0, enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -4371,31 +4645,97 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== - dependencies: - call-bind "^1.0.2" +es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: + version "1.23.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" + integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + data-view-buffer "^1.0.1" + data-view-byte-length "^1.0.1" + data-view-byte-offset "^1.0.0" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.2" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-data-view "^1.0.1" + is-negative-zero "^2.0.3" is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" + is-shared-array-buffer "^1.0.3" is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.2" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.9" + string.prototype.trimend "^1.0.8" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.6" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.15" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -4406,19 +4746,20 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== +es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== dependencies: d "1" es5-ext "^0.10.35" @@ -4436,34 +4777,44 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== dependencies: - d "^1.0.1" - ext "^1.1.2" + d "^1.0.2" + ext "^1.7.0" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -4477,7 +4828,7 @@ esutils@^2.0.2: etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== eth-block-tracker@^3.0.0: version "3.0.1" @@ -4495,29 +4846,27 @@ eth-block-tracker@^3.0.0: eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== dependencies: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.24: - version "0.2.24" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.24.tgz#768721fec7de02b566e4ebfd123466d275d7035c" - integrity sha512-RbXLC2bnuPHzIMU/rnLXXlb6oiHEEKu7rq2UrAX/0mfo0Lzrr/kb9QTjWjfz8eNvc+uu6J8AuBwI++b+MLNI2w== +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== dependencies: - "@ethersproject/abi" "^5.0.0-beta.146" "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" cli-table3 "^0.5.0" colors "1.4.0" - ethereumjs-util "6.2.0" - ethers "^4.0.40" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" fs-readdir-recursive "^1.1.0" lodash "^4.17.14" markdown-table "^1.1.3" - mocha "^7.1.1" + mocha "^10.2.0" req-cwd "^2.0.0" - request "^2.88.0" - request-promise-native "^1.0.5" sha1 "^1.1.1" sync-request "^6.0.0" @@ -4574,7 +4923,7 @@ eth-lib@^0.1.26: eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" - integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== dependencies: json-rpc-random-id "^1.0.0" xtend "^4.0.1" @@ -4594,7 +4943,7 @@ eth-sig-util@3.0.0: eth-sig-util@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" - integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= + integrity sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw== dependencies: ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" ethereumjs-util "^5.1.1" @@ -4640,7 +4989,7 @@ ethereum-common@0.2.0: ethereum-common@^0.0.18: version "0.0.18" resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" - integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= + integrity sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ== ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" @@ -4673,21 +5022,31 @@ ethereum-cryptography@^1.0.3: "@scure/bip32" "1.1.5" "@scure/bip39" "1.1.1" -ethereum-waffle@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.0.tgz#990b3c6c26db9c2dd943bf26750a496f60c04720" - integrity sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ== +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== dependencies: - "@ethereum-waffle/chai" "^3.4.0" - "@ethereum-waffle/compiler" "^3.4.0" - "@ethereum-waffle/mock-contract" "^3.3.0" - "@ethereum-waffle/provider" "^3.4.0" + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethereum-waffle@^3.4.0: + version "3.4.4" + resolved "https://registry.yarnpkg.com/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz#1378b72040697857b7f5e8f473ca8f97a37b5840" + integrity sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q== + dependencies: + "@ethereum-waffle/chai" "^3.4.4" + "@ethereum-waffle/compiler" "^3.4.4" + "@ethereum-waffle/mock-contract" "^3.4.4" + "@ethereum-waffle/provider" "^3.4.4" ethers "^5.0.1" ethereumjs-abi@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" - integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= + integrity sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g== dependencies: bn.js "^4.10.0" ethereumjs-util "^4.3.0" @@ -4789,19 +5148,6 @@ ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@ ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" -ethereumjs-util@6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" - integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - ethjs-util "0.1.6" - keccak "^2.0.0" - rlp "^2.2.3" - secp256k1 "^3.0.1" - ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0, ethereumjs-util@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" @@ -4839,18 +5185,7 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereum rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.2, ethereumjs-util@^7.1.0: - version "7.1.4" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz#a6885bcdd92045b06f596c7626c3e89ab3312458" - integrity sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethereumjs-util@^7.0.3: +ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -4914,7 +5249,7 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" -ethers@5.5.4, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2: +ethers@5.5.4: version "5.5.4" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.4.tgz#e1155b73376a2f5da448e4a33351b57a885f4352" integrity sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw== @@ -4950,22 +5285,7 @@ ethers@5.5.4, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2: "@ethersproject/web" "5.5.1" "@ethersproject/wordlists" "5.5.0" -ethers@^4.0.40: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.7.1: +ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2, ethers@^5.7.1, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -5004,7 +5324,7 @@ ethers@^5.7.1: ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== dependencies: bn.js "4.11.6" number-to-bn "1.7.0" @@ -5017,6 +5337,14 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +event-emitter@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -5055,15 +5383,10 @@ execa@5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -exit-on-epipe@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" - integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== - expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5074,59 +5397,60 @@ expand-brackets@^2.1.4: to-regex "^3.0.1" express@^4.14.0: - version "4.17.3" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.3.tgz#f6c7302194a4fb54271b73a1fe7a06478c8f85a1" - integrity sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg== + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.19.2" + body-parser "1.20.2" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.2" + cookie "0.6.0" cookie-signature "1.0.6" debug "2.6.9" - depd "~1.1.2" + depd "2.0.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "~1.1.2" + finalhandler "1.2.0" fresh "0.5.2" + http-errors "2.0.0" merge-descriptors "1.0.1" methods "~1.1.2" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" path-to-regexp "0.1.7" proxy-addr "~2.0.7" - qs "6.9.7" + qs "6.11.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.17.2" - serve-static "1.14.2" + send "0.18.0" + serve-static "1.15.0" setprototypeof "1.2.0" - statuses "~1.5.0" + statuses "2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -ext@^1.1.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" - integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== +ext@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: - type "^2.5.0" + type "^2.7.2" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -5153,7 +5477,7 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" @@ -5168,10 +5492,15 @@ eyes@^0.1.8: fake-merkle-patricia-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" - integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= + integrity sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA== dependencies: checkpoint-store "^1.1.0" +fast-base64-decode@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz#b434a0dd7d92b12b43f26819300d2dafb83ee418" + integrity sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q== + fast-decode-uri-component@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" @@ -5187,18 +5516,7 @@ fast-fifo@^1.0.0: resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== -fast-glob@^3.2.5: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.2.9: +fast-glob@^3.2.5, fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -5241,24 +5559,19 @@ fastest-levenshtein@^1.0.7: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" fetch-ponyfill@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" - integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= + integrity sha512-knK9sGskIg2T7OnYLdZ2hZXn0CtDrAIBxYQLpmEf0BqfdWnwmM1weccUl5+4EdA44tzNSFAuxITPbXtPehUB3g== dependencies: node-fetch "~1.7.1" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - filelist@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" @@ -5269,7 +5582,7 @@ filelist@^1.0.4: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -5283,23 +5596,23 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" - on-finished "~2.3.0" + on-finished "2.4.1" parseurl "~1.3.3" - statuses "~1.5.0" + statuses "2.0.1" unpipe "~1.0.0" find-replace@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-1.0.3.tgz#b88e7364d2d9c959559f388c66670d6130441fa0" - integrity sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A= + integrity sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA== dependencies: array-back "^1.0.4" test-value "^2.1.0" @@ -5311,13 +5624,6 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -5329,7 +5635,7 @@ find-up@5.0.0: find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -5337,7 +5643,7 @@ find-up@^1.0.0: find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== dependencies: locate-path "^2.0.0" @@ -5356,13 +5662,6 @@ find-yarn-workspace-root@^2.0.0: dependencies: micromatch "^4.0.2" -flat@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" - integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== - dependencies: - is-buffer "~2.0.3" - flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" @@ -5371,19 +5670,19 @@ flat@^5.0.2: flow-stoplight@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" - integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= + integrity sha512-rDjbZUKpN8OYhB0IE/vY/I8UWO/602IIJEU/76Tv4LvYnwHCk0BCsvz4eRr9n+FQcri7L5cyaXOo0+/Kh4HisA== fmix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" - integrity sha1-x7vxJN7ELJ0ZHPuUfQqXeN2YbAw= + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== dependencies: imul "^1.0.0" -follow-redirects@^1.12.1, follow-redirects@^1.14.0: - version "1.14.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" - integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== +follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" @@ -5395,12 +5694,12 @@ for-each@^0.3.3, for-each@~0.3.3: for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@^2.2.0: version "2.5.1" @@ -5411,15 +5710,6 @@ form-data@^2.2.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -5456,21 +5746,21 @@ fp-ts@^1.0.0: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@9.1.0, fs-extra@^9.1.0: +fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== @@ -5483,7 +5773,7 @@ fs-extra@9.1.0, fs-extra@^9.1.0: fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== dependencies: graceful-fs "^4.1.2" jsonfile "^2.1.0" @@ -5492,9 +5782,9 @@ fs-extra@^0.30.0: rimraf "^2.2.8" fs-extra@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.1.tgz#27de43b4320e833f6867cc044bfce29fdf0ef3b8" - integrity sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag== + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5548,27 +5838,37 @@ fs-readdir-recursive@^1.1.0: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== ganache-core@^2.13.2: version "2.13.2" @@ -5608,12 +5908,12 @@ ganache-core@^2.13.2: web3 "1.2.11" ganache@^7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.8.0.tgz#02154384f246b66e98974cbcbb18e8372df3c2e0" - integrity sha512-IrUYvsaE/m2/NaVIZ7D/gCnsmyU/buechnH6MhUipzG1qJcZIwIp/DoP/LZUcHyhy0Bv0NKZD2pGOjpRhn7l7A== + version "7.9.2" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" + integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== dependencies: "@trufflesuite/bigint-buffer" "1.1.10" - "@trufflesuite/uws-js-unofficial" "20.10.0-unofficial.2" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" "@types/bn.js" "^5.1.0" "@types/lru-cache" "5.1.1" "@types/seedrandom" "3.0.1" @@ -5633,24 +5933,26 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" get-iterator@^1.0.2: version "1.0.2" @@ -5665,12 +5967,7 @@ get-package-type@^0.1.0: get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== get-stream@^4.1.0: version "4.1.0" @@ -5691,37 +5988,38 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" -glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -5730,17 +6028,16 @@ glob@7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" glob@9.3.5: version "9.3.5" @@ -5752,6 +6049,18 @@ glob@9.3.5: minipass "^4.2.4" path-scurry "^1.6.1" +glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@~7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" @@ -5765,6 +6074,13 @@ globals@^9.18.0: resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -5813,6 +6129,13 @@ gluegun@5.1.2: which "2.0.2" yargs-parser "^21.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + got@9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -5830,35 +6153,27 @@ got@9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -got@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" - integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== - dependencies: - decompress-response "^3.2.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-plain-obj "^1.1.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - p-cancelable "^0.3.0" - p-timeout "^1.1.1" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - url-parse-lax "^1.0.0" - url-to-options "^1.0.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" -graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphql-import-node@^0.0.5: version "0.0.5" @@ -5883,7 +6198,7 @@ growl@1.10.5: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" @@ -5926,12 +6241,12 @@ hardhat-deploy@^0.8.11: qs "^6.9.4" hardhat-gas-reporter@^1.0.4: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz#93ce271358cd748d9c4185dbb9d1d5525ec145e0" - integrity sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g== + version "1.0.10" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b" + integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA== dependencies: array-uniq "1.0.3" - eth-gas-reporter "^0.2.24" + eth-gas-reporter "^0.2.25" sha1 "^1.1.1" hardhat@2.19.3: @@ -5991,53 +6306,53 @@ hardhat@2.19.3: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbol-support-x@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" - integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" -has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: +has-proto@^1.0.1, has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-to-string-tag-x@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" - integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== - dependencies: - has-symbol-support-x "^1.4.1" - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -6046,7 +6361,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -6055,22 +6370,20 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3, has@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" +has@~1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" + integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== hash-base@^3.0.0: version "3.1.0" @@ -6081,13 +6394,13 @@ hash-base@^3.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== +hash-base@~3.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.0.1" hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" @@ -6097,6 +6410,13 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + he@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -6105,12 +6425,12 @@ he@1.2.0: heap@0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" - integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + integrity sha512-MzzWcnfB1e4EG2vHi3dXHoBupmuXNZzx6pY6HldVS55JKKBoq3xOyzfSaZRkJp37HIhEYC78knabHff3zc4dQQ== hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -6119,7 +6439,7 @@ hmac-drbg@^1.0.1: home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" @@ -6140,20 +6460,9 @@ http-basic@^8.1.1: parse-cache-control "^1.0.1" http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-errors@2.0.0: version "2.0.0" @@ -6169,7 +6478,7 @@ http-errors@2.0.0: http-https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== http-response-object@^3.0.1: version "3.0.2" @@ -6181,16 +6490,24 @@ http-response-object@^3.0.1: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" sshpk "^1.7.0" +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" @@ -6226,15 +6543,15 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== immediate@^3.2.3: version "3.3.0" @@ -6244,7 +6561,7 @@ immediate@^3.2.3: immediate@~3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg== immutable@4.2.1: version "4.2.1" @@ -6252,9 +6569,9 @@ immutable@4.2.1: integrity sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ== immutable@^4.0.0-rc.12: - version "4.0.0" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" - integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== import-fresh@^3.2.1: version "3.3.0" @@ -6267,7 +6584,7 @@ import-fresh@^3.2.1: imul@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" - integrity sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk= + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== indent-string@^4.0.0: version "4.0.0" @@ -6277,7 +6594,7 @@ indent-string@^4.0.0: inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -6301,13 +6618,13 @@ interface-store@^2.0.2: resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-2.0.2.tgz#83175fd2b0c501585ed96db54bb8ba9d55fce34c" integrity sha512-rScRlhDcz6k199EkHqT8NpM87ebN89ICOzILoBHgaG36/WX50N32BnU/kpZgCGPLhARRAWUUX5/cyaIjt7Kipg== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" + es-errors "^1.3.0" + hasown "^2.0.0" side-channel "^1.0.4" invariant@^2.2.2: @@ -6320,7 +6637,7 @@ invariant@^2.2.2: invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== io-ts@1.10.4: version "1.10.4" @@ -6429,21 +6746,14 @@ ipfs-utils@^9.0.2: react-native-fetch-api "^3.0.0" stream-to-it "^0.2.2" -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== dependencies: - kind-of "^6.0.0" + hasown "^2.0.0" -is-arguments@^1.0.4: +is-arguments@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== @@ -6451,10 +6761,18 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" @@ -6483,15 +6801,15 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.5, is-buffer@~2.0.3: +is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^2.0.0: version "2.0.0" @@ -6500,28 +6818,28 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== dependencies: - kind-of "^3.0.2" + hasown "^2.0.0" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-data-view@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" + integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== dependencies: - kind-of "^6.0.0" + is-typed-array "^1.1.13" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -6529,22 +6847,20 @@ is-date-object@^1.0.1: has-tostringtag "^1.0.0" is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-docker@^2.0.0: version "2.2.1" @@ -6552,14 +6868,14 @@ is-docker@^2.0.0: integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-electron@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.1.tgz#751b1dd8a74907422faa5c35aaa0cf66d98086e9" - integrity sha512-r8EEQQsqT+Gn0aXFx7lTFygYQhILLCB+wn0WCDL5LZRINeLH/Rvw1j2oKodELLXYNImQ3CRlVsY8wW4cGOsyuw== + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-electron/-/is-electron-2.2.2.tgz#3778902a2044d76de98036f5dc58089ac4d80bb9" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -6571,7 +6887,7 @@ is-extendable@^1.0.1: is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-finite@^1.0.0: version "1.1.0" @@ -6581,19 +6897,19 @@ is-finite@^1.0.0: is-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" - integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= + integrity sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg== is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6615,7 +6931,7 @@ is-glob@^4.0.1, is-glob@~4.0.1: is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== is-interactive@^1.0.0: version "1.0.0" @@ -6629,22 +6945,22 @@ is-ip@^3.1.0: dependencies: ip-regex "^4.0.0" -is-negative-zero@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -6653,16 +6969,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" - integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -6675,7 +6981,7 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: +is-regex@^1.1.4, is-regex@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -6683,20 +6989,17 @@ is-regex@^1.0.4, is-regex@^1.1.4, is-regex@~1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" -is-stream@^1.0.0, is-stream@^1.0.1: +is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" @@ -6717,10 +7020,17 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-unicode-supported@^0.1.0: version "0.1.0" @@ -6735,9 +7045,9 @@ is-url@^1.2.4: is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== -is-weakref@^1.0.1: +is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== @@ -6759,17 +7069,22 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iso-url@^1.1.5: version "1.2.1" @@ -6779,14 +7094,22 @@ iso-url@^1.1.5: isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isomorphic-unfetch@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" + integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== + dependencies: + node-fetch "^2.6.1" + unfetch "^4.2.0" isomorphic-ws@^4.0.1: version "4.0.1" @@ -6796,15 +7119,7 @@ isomorphic-ws@^4.0.1: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -isurl@^1.0.0-alpha5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" - integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== - dependencies: - has-to-string-tag-x "^1.2.0" - is-object "^1.0.1" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== it-all@^1.0.4: version "1.0.6" @@ -6879,21 +7194,26 @@ jayson@4.0.0: uuid "^8.3.2" ws "^7.4.5" +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + js-sdsl@^4.1.4: version "4.4.2" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc= - js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6902,15 +7222,7 @@ js-sha3@0.8.0, js-sha3@^0.8.0: js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== js-yaml@3.14.1, js-yaml@^3.14.1: version "3.14.1" @@ -6930,22 +7242,27 @@ js-yaml@4.1.0, js-yaml@^4.1.0: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-even-better-errors@^2.3.0: version "2.3.1" @@ -6967,14 +7284,14 @@ json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0: json-rpc-error@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" - integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= + integrity sha512-EwUeWP+KgAZ/xqFpaP6YDAXMtCJi+o/QQpCQFIYyxr01AdADi2y413eM8hSqJcoQym9WMePAJWoaODEJufC4Ug== dependencies: inherits "^2.0.1" json-rpc-random-id@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" - integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== json-schema-traverse@^0.4.1: version "0.4.1" @@ -6987,33 +7304,36 @@ json-schema@0.4.0: integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== dependencies: - jsonify "~0.0.0" + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" @@ -7026,10 +7346,10 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== jsonparse@^1.2.0: version "1.3.1" @@ -7054,7 +7374,7 @@ keccak@3.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -keccak@3.0.2, keccak@^3.0.0: +keccak@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== @@ -7063,17 +7383,7 @@ keccak@3.0.2, keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" -keccak@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-2.1.0.tgz#734ea53f2edcfd0f42cdb8d5f4c358fef052752b" - integrity sha512-m1wbJRTo+gWbctZWay9i26v5fFnYkOn7D5PCxJ3fZUGUEb49dE1Pm4BREUYCt/aoO6di7jeoGmhvqN9Nzylm3Q== - dependencies: - bindings "^1.5.0" - inherits "^2.0.4" - nan "^2.14.0" - safe-buffer "^5.2.0" - -keccak@^3.0.2: +keccak@^3.0.0, keccak@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== @@ -7089,26 +7399,28 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" +keyv@^4.0.0: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -7123,14 +7435,14 @@ klaw-sync@^6.0.0: klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== optionalDependencies: graceful-fs "^4.1.9" lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== dependencies: invert-kv "^1.0.0" @@ -7186,7 +7498,7 @@ level-iterator-stream@^2.0.3: level-iterator-stream@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= + integrity sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw== dependencies: inherits "^2.0.1" level-errors "^1.0.3" @@ -7262,7 +7574,7 @@ level-transcoder@^1.0.1: level-ws@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" - integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= + integrity sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw== dependencies: readable-stream "~1.0.15" xtend "~2.1.1" @@ -7277,10 +7589,11 @@ level-ws@^1.0.0: xtend "^4.0.1" level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== dependencies: + abstract-level "^1.0.4" browser-level "^1.0.1" classic-level "^1.2.0" @@ -7324,7 +7637,7 @@ lines-and-columns@^1.1.6: load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -7335,19 +7648,11 @@ load-json-file@^1.0.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== dependencies: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - locate-path@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" @@ -7358,12 +7663,12 @@ locate-path@^6.0.0: lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== lodash.kebabcase@^4.1.1: version "4.1.1" @@ -7445,13 +7750,6 @@ lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@3.0.0, log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - log-symbols@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" @@ -7460,6 +7758,13 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -7473,12 +7778,12 @@ long@^5.2.0: looper@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" - integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= + integrity sha512-6DzMHJcjbQX/UPHc1rRCBfKlLwDkvuGZ715cIR36wSdYqWXFT35uLXq5P/2orl3tz+t+VOVPxw4yPinQlUDGDQ== looper@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" - integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= + integrity sha512-LJ9wplN/uSn72oJRsXTx+snxPet5c8XiZmOKCm906NVYu+ag6SB6vUcnJcWxgnl2NfbIyeobAn7Bwv6xRj2XJg== loose-envify@^1.0.0: version "1.4.0" @@ -7487,12 +7792,12 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loupe@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" - integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== dependencies: - get-func-name "^2.0.0" + get-func-name "^2.0.1" lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" @@ -7511,10 +7816,15 @@ lru-cache@5.1.1, lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.2.0.tgz#0bd445ca57363465900f4d1f9bd8db343a4d95c3" + integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== + lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" - integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= + integrity sha512-91gyOKTc2k66UG6kHiH4h3S2eltcPwE1STVfMYC/NG+nZwf8IIuiamfmpGZjpbbxzSyEJaLC0tNSmhjlQUTJow== dependencies: pseudomap "^1.0.1" @@ -7525,25 +7835,20 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -"lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - lru_map@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== ltgt@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" - integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= + integrity sha512-5VjHC5GsENtIi5rbJd+feEpDKhfr7j0odoUR2Uh978g+2p93nd5o34cTjQWohXsPsCZeqoDnIqEf88mPCe0Pfw== make-error@^1.1.1: version "1.3.6" @@ -7553,12 +7858,12 @@ make-error@^1.1.1: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -7589,12 +7894,12 @@ md5.js@^1.3.4: media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memdown@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== dependencies: abstract-leveldown "~2.7.1" functional-red-black-tree "^1.0.1" @@ -7627,12 +7932,12 @@ memory-level@^1.0.0: memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-options@^3.0.4: version "3.0.4" @@ -7681,7 +7986,12 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== micromatch@^3.1.4: version "3.1.10" @@ -7703,12 +8013,12 @@ micromatch@^3.1.4: to-regex "^3.0.2" micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - braces "^3.0.1" - picomatch "^2.2.3" + braces "^3.0.2" + picomatch "^2.3.1" miller-rabin@^4.0.0: version "4.0.1" @@ -7718,17 +8028,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.51.0" + mime-db "1.52.0" mime@1.6.0: version "1.6.0" @@ -7745,10 +8055,15 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" @@ -7760,12 +8075,12 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4" + integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g== dependencies: brace-expansion "^1.1.7" @@ -7776,7 +8091,7 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7797,10 +8112,10 @@ minimatch@^8.0.2: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.0, minimist@^1.2.6, minimist@^1.2.7, minimist@~1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" @@ -7811,9 +8126,9 @@ minipass@^2.6.0, minipass@^2.9.0: yallist "^3.0.0" minipass@^3.0.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" @@ -7822,6 +8137,11 @@ minipass@^4.2.4: resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.8.tgz#f0010f64393ecfc1d1ccb5f582bcaf45f48e1a3a" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" @@ -7853,22 +8173,27 @@ mixin-deep@^1.2.0: mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE= + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== dependencies: mkdirp "*" -mkdirp@*, mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.5, mkdirp@^0.5.1, mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - mnemonist@^0.38.0: version "0.38.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" @@ -7876,10 +8201,10 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== +mocha@^10.0.0, mocha@^10.2.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -7888,13 +8213,12 @@ mocha@^10.0.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -7903,40 +8227,10 @@ mocha@^10.0.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mocha@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - mocha@^9.0.3: - version "9.2.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.1.tgz#a1abb675aa9a8490798503af57e8782a78f1338e" - integrity sha512-T7uscqjJVS46Pq1XDXyo9Uvey9gd3huT/DD9cYBb4K2Xc/vbKRPUWK067bxDQRK0yIz6Jxk73IrnimvASzBNAQ== + version "9.2.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" + integrity sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g== dependencies: "@ungap/promise-all-settled" "1.1.2" ansi-colors "4.1.1" @@ -7951,9 +8245,9 @@ mocha@^9.0.3: he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" - minimatch "3.0.4" + minimatch "4.2.1" ms "2.1.3" - nanoid "3.2.0" + nanoid "3.3.1" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -7968,6 +8262,18 @@ mock-fs@^4.1.0: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== +mock-property@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mock-property/-/mock-property-1.0.3.tgz#3e37c50a56609d548cabd56559fde3dd8767b10c" + integrity sha512-2emPTb1reeLLYwHxyVx993iYyCHEiRRO+y8NFXFPL5kl5q14sgTK76cXyEKkeKCHeRw35SfdkUJ10Q1KfHuiIQ== + dependencies: + define-data-property "^1.1.1" + functions-have-names "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + hasown "^2.0.0" + isarray "^2.0.5" + module-error@^1.0.1, module-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" @@ -7976,12 +8282,7 @@ module-error@^1.0.1, module-error@^1.0.2: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -8058,16 +8359,11 @@ multicodec@^3.0.1: uint8arrays "^3.0.0" varint "^6.0.0" -multiformats@^9.4.13, multiformats@^9.4.5, multiformats@^9.5.4: +multiformats@^9.4.13, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.5.4: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== -multiformats@^9.4.2: - version "9.7.1" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.7.1.tgz#ab348e5fd6f8e7fb3fd56033211bda48854e2173" - integrity sha512-TaVmGEBt0fhxiNJMGphBfB+oGvUxFs8KgGvgl8d3C+GWtrFcvXdJ2196eg+dYhmSFClmgFfSfJEklo+SZzdNuw== - multihashes@^0.4.15, multihashes@~0.4.15: version "0.4.21" resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" @@ -8095,25 +8391,15 @@ murmur-128@^0.2.1: fmix "^0.1.0" imul "^1.0.0" -nan@^2.14.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== - nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== -nanoid@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" - integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +nanoid@3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" + integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== nanoid@^3.0.2, nanoid@^3.1.20, nanoid@^3.1.23: version "3.3.7" @@ -8167,10 +8453,10 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== nice-try@^1.0.4: version "1.0.5" @@ -8182,27 +8468,7 @@ node-addon-api@^2.0.0: resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.8: +node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.8: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -8223,9 +8489,9 @@ node-gyp-build@4.4.0: integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" - integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== nofilter@^3.1.0: version "3.1.0" @@ -8252,6 +8518,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -8262,12 +8533,12 @@ npm-run-path@^4.0.1: number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA= + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== dependencies: bn.js "4.11.6" strip-hex-prefix "1.0.0" @@ -8280,31 +8551,36 @@ oauth-sign@~0.9.0: object-assign@^4, object-assign@^4.0.0, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.11.0, object-inspect@^1.9.0, object-inspect@~1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.0.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== +object-inspect@~1.12.3: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-is@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -8312,7 +8588,7 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: object-keys@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= + integrity sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw== object-treeify@^1.1.33: version "1.1.33" @@ -8322,69 +8598,63 @@ object-treeify@^1.1.33: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== +object.getownpropertydescriptors@^2.1.6: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" obliterator@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.2.tgz#25f50dc92e1181371b9d8209d11890f1a3c2fc21" - integrity sha512-g0TrA7SbUggROhDPK8cEu/qpItwH2LSKcNl4tlfBNT54XY+nOsqrs0Q68h1V9b3HOSpIWv15jb1lax2hAggdIg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== oboe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" - integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= + integrity sha512-ymBJ4xSC6GBXLT9Y7lirj+xbqBLa+jADGJldGEYG7u8sZbS9GyG+u1Xk9c5cbriKwSpCg41qUhPjvU5xOpvIyQ== dependencies: http-https "^1.0.0" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -8403,9 +8673,9 @@ open@^7.4.2: is-docker "^2.0.0" is-wsl "^2.1.1" -"openzeppelin-solidity@git+https://github.com/OpenZeppelin/openzeppelin-contracts#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946": +"openzeppelin-solidity@github:OpenZeppelin/openzeppelin-contracts#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946": version "4.5.0" - resolved "git+https://github.com/OpenZeppelin/openzeppelin-contracts#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" + resolved "https://codeload.github.com/OpenZeppelin/openzeppelin-contracts/tar.gz/dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" ora@4.0.2: version "4.0.2" @@ -8423,30 +8693,30 @@ ora@4.0.2: os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== dependencies: lcid "^1.0.0" os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -p-cancelable@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" - integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + p-defer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" @@ -8460,11 +8730,6 @@ p-fifo@^1.0.0: fast-fifo "^1.0.0" p-defer "^3.0.0" -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -8472,13 +8737,6 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - p-limit@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" @@ -8489,17 +8747,10 @@ p-limit@^3.0.2: p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== dependencies: p-limit "^1.1.0" -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - p-locate@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" @@ -8510,26 +8761,14 @@ p-locate@^5.0.0: p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-timeout@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" - integrity sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y= + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: - p-finally "^1.0.0" + aggregate-error "^3.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== parent-module@^1.0.0: version "1.0.1" @@ -8538,21 +8777,22 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +parse-asn1@^5.0.0, parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" parse-cache-control@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha1-juqz5U+laSD+Fro493+iGqzC104= + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== parse-duration@^1.0.0: version "1.1.0" @@ -8560,14 +8800,14 @@ parse-duration@^1.0.0: integrity sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ== parse-headers@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" - integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== dependencies: error-ex "^1.2.0" @@ -8589,7 +8829,7 @@ parseurl@~1.3.3: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== password-prompt@^1.1.2: version "1.1.3" @@ -8618,23 +8858,24 @@ patch-package@6.2.2: tmp "^0.0.33" patch-package@^6.2.2: - version "6.4.7" - resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.4.7.tgz#2282d53c397909a0d9ef92dae3fdeb558382b148" - integrity sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ== + version "6.5.1" + resolved "https://registry.yarnpkg.com/patch-package/-/patch-package-6.5.1.tgz#3e5d00c16997e6160291fee06a521c42ac99b621" + integrity sha512-I/4Zsalfhc6bphmJTlrLoOcAF87jcxko4q0qsv4bGcurbr8IskEOtdnt9iCmsQVGL1B+iUhSQqweyTLJfCF9rA== dependencies: "@yarnpkg/lockfile" "^1.1.0" - chalk "^2.4.2" + chalk "^4.1.2" cross-spawn "^6.0.5" find-yarn-workspace-root "^2.0.0" - fs-extra "^7.0.1" + fs-extra "^9.0.0" is-ci "^2.0.0" klaw-sync "^6.0.0" - minimist "^1.2.0" + minimist "^1.2.6" open "^7.4.2" rimraf "^2.6.3" semver "^5.6.0" slash "^2.0.0" tmp "^0.0.33" + yaml "^1.10.2" path-browserify@^1.0.0, path-browserify@^1.0.1: version "1.0.1" @@ -8644,14 +8885,14 @@ path-browserify@^1.0.0, path-browserify@^1.0.1: path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -8661,12 +8902,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" @@ -8679,22 +8920,22 @@ path-parse@^1.0.6, path-parse@^1.0.7: integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.6.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + version "1.10.2" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.2.tgz#8f6357eb1239d5fa1da8b9f70e9c080675458ba7" + integrity sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -8710,7 +8951,7 @@ pathval@^1.1.1: resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9, pbkdf2@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -8724,9 +8965,14 @@ pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -8734,19 +8980,19 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== pluralize@^8.0.0: version "8.0.0" @@ -8756,7 +9002,12 @@ pluralize@^8.0.0: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== postinstall-postinstall@^2.1.0: version "2.1.0" @@ -8766,17 +9017,12 @@ postinstall-postinstall@^2.1.0: precond@0.2: version "0.2.3" resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + integrity sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ== prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier@1.19.1: version "1.19.1" @@ -8784,14 +9030,9 @@ prettier@1.19.1: integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== prettier@^2.1.2: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== - -printj@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.1.tgz#9af6b1d55647a1587ac44f4c1654a4b95b8e12cb" - integrity sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== private@^0.1.6, private@^0.1.8: version "0.1.8" @@ -8806,20 +9047,20 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== promise-to-callback@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" - integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= + integrity sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA== dependencies: is-fn "^1.0.0" set-immediate-shim "^1.0.1" promise@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -8859,20 +9100,25 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== pseudomap@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== public-encrypt@^4.0.0: version "4.0.3" @@ -8889,7 +9135,7 @@ public-encrypt@^4.0.0: pull-cat@^1.1.9: version "1.1.11" resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" - integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= + integrity sha512-i3w+xZ3DCtTVz8S62hBOuNLRHqVDsHMNZmgrZsjPnsxXUgbWtXEee84lo1XswE7W2a3WHyqsNuDJTjVLAQR8xg== pull-defer@^0.2.2: version "0.2.3" @@ -8912,7 +9158,7 @@ pull-level@^2.0.3: pull-live@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" - integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= + integrity sha512-tkNz1QT5gId8aPhV5+dmwoIiA1nmfDOzJDlOOUpU5DNusj6neNd3EePybJ5+sITr2FwyCs/FVpx74YMCfc8YeA== dependencies: pull-cat "^1.1.9" pull-stream "^3.4.0" @@ -8920,17 +9166,17 @@ pull-live@^1.0.1: pull-pushable@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" - integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= + integrity sha512-M7dp95enQ2kaHvfCt2+DJfyzgCSpWVR2h2kWYnVsW6ZpxQBx5wOu0QWOvQPVoPnBLUZYitYP2y7HyHkLQNeGXg== pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: - version "3.6.14" - resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.14.tgz#529dbd5b86131f4a5ed636fdf7f6af00781357ee" - integrity sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew== + version "3.7.0" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.7.0.tgz#85de0e44ff38a4d2ad08cc43fc458e1922f9bf0b" + integrity sha512-Eco+/R004UaCK2qEDE8vGklcTG2OeZSVm1kTUQNrykEjDwcFXDZhygFDsW49DbXyJMEhHeRL3z5cRVqPAhXlIw== pull-window@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" - integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= + integrity sha512-cbDzN76BMlcGG46OImrgpkMf/VkCnupj8JhsrpBw3aWBM9ye345aYnqitmZCgauBkc0HbbRRn9hCnsa3k2FNUg== dependencies: looper "^2.0.0" @@ -8950,25 +9196,20 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - punycode@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== -punycode@^1.3.2: +punycode@^1.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pvtsutils@^1.3.2, pvtsutils@^1.3.5: version "1.3.5" @@ -8982,18 +9223,20 @@ pvutils@^1.1.3: resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== -qs@6.9.7: - version "6.9.7" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.7.tgz#4610846871485e1e048f44ae3b94033f0e675afe" - integrity sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw== - -qs@^6.4.0, qs@^6.9.4: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" +qs@^6.11.2, qs@^6.4.0, qs@^6.9.4: + version "6.12.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77" + integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg== + dependencies: + side-channel "^1.0.6" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -9008,16 +9251,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -9038,20 +9281,10 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.3.tgz#8f80305d11c2a0a545c2d9d89d7a0286fcead43c" - integrity sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g== - dependencies: - bytes "3.1.2" - http-errors "1.8.1" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2, raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" @@ -9068,7 +9301,7 @@ react-native-fetch-api@^3.0.0: read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -9076,7 +9309,7 @@ read-pkg-up@^1.0.1: read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -9085,17 +9318,17 @@ read-pkg@^1.0.0: readable-stream@^1.0.33: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9106,9 +9339,9 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable util-deprecate "~1.0.1" readable-stream@^3.0.6, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -9117,20 +9350,13 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: readable-stream@~1.0.15, readable-stream@~1.0.26-4: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" isarray "0.0.1" string_decoder "~0.10.x" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -9184,18 +9410,20 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" - integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + integrity sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ== dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -9204,12 +9432,12 @@ regexpu-core@^2.0.0: regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" - integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + integrity sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g== regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" - integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + integrity sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw== dependencies: jsesc "~0.5.0" @@ -9221,46 +9449,30 @@ repeat-element@^1.1.2: repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== dependencies: is-finite "^1.0.0" req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha1-1AgrTURZgDZkD7c93qAe1T20nrw= + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== dependencies: req-from "^2.0.0" req-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA= + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== dependencies: resolve-from "^3.0.0" -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.5: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@2.88.2, request@^2.79.0, request@^2.85.0, request@^2.88.0: +request@2.88.2, request@^2.79.0, request@^2.85.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9289,12 +9501,12 @@ request@2.88.2, request@^2.79.0, request@^2.85.0, request@^2.88.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== require-from-string@^2.0.0: version "2.0.2" @@ -9304,17 +9516,17 @@ require-from-string@^2.0.0: require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== resolve-from@^4.0.0: version "4.0.0" @@ -9324,7 +9536,7 @@ resolve-from@^4.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve@1.17.0: version "1.17.0" @@ -9333,22 +9545,29 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.8.1, resolve@~1.22.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@^1.10.0, resolve@^1.8.1, resolve@~1.22.6: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -9357,13 +9576,6 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= - dependencies: - through "~2.3.4" - ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -9374,6 +9586,11 @@ retimer@^3.0.0: resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -9391,7 +9608,7 @@ rimraf@^2.2.8, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -9432,6 +9649,16 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== +safe-array-concat@^1.0.0, safe-array-concat@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" + integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== + dependencies: + call-bind "^1.0.7" + get-intrinsic "^1.2.4" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -9449,10 +9676,19 @@ safe-event-emitter@^1.0.1: dependencies: events "^3.0.0" +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -9461,11 +9697,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" @@ -9474,7 +9705,7 @@ scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: scryptsy@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-1.2.1.tgz#a3225fa4b2524f802700761e2855bdf3b2d92163" - integrity sha1-oyJfpLJST4AnAHYeKFW987LZIWM= + integrity sha512-aldIRgMozSJ/Gl6K6qmJZysRP82lz83Wb42vl4PWN8SaLFHIaOzLPc9nUUW2jQN88CuGm5q5HefJ9jZ3nWSmTw== dependencies: pbkdf2 "^3.0.3" @@ -9487,20 +9718,6 @@ secp256k1@4.0.3, secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -secp256k1@^3.0.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.8.0.tgz#28f59f4b01dbee9575f56a47034b7d2e3b3b352d" - integrity sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw== - dependencies: - bindings "^1.5.0" - bip66 "^1.1.5" - bn.js "^4.11.8" - create-hash "^1.2.0" - drbg.js "^1.0.1" - elliptic "^6.5.2" - nan "^2.14.0" - safe-buffer "^5.1.2" - seedrandom@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.1.tgz#eb3dde015bcf55df05a233514e5df44ef9dce083" @@ -9511,10 +9728,10 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0: resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@7.3.5: version "7.3.5" @@ -9531,14 +9748,14 @@ semver@7.4.0: lru-cache "^6.0.0" semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.7: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -9547,24 +9764,24 @@ semver@~5.4.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== -send@0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" - integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" + depd "2.0.0" + destroy "1.2.0" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "1.8.1" + http-errors "2.0.0" mime "1.6.0" ms "2.1.3" - on-finished "~2.3.0" + on-finished "2.4.1" range-parser "~1.2.1" - statuses "~1.5.0" + statuses "2.0.1" serialize-javascript@6.0.0: version "6.0.0" @@ -9573,15 +9790,15 @@ serialize-javascript@6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.14.2: - version "1.14.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" - integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.2" + send "0.18.0" servify@^0.1.12: version "0.1.12" @@ -9597,12 +9814,34 @@ servify@^0.1.12: set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + integrity sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ== set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -9614,15 +9853,10 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= - setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.2.0: version "1.2.0" @@ -9640,7 +9874,7 @@ sha.js@^2.4.0, sha.js@^2.4.8: sha1@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg= + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== dependencies: charenc ">= 0.0.1" crypt ">= 0.0.1" @@ -9648,7 +9882,7 @@ sha1@^1.1.1: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -9662,21 +9896,22 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel@^1.0.4, side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" @@ -9700,7 +9935,7 @@ simple-get@^2.7.0: slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== slash@^2.0.0: version "2.0.0" @@ -9791,10 +10026,12 @@ solc@^0.6.3: semver "^5.5.0" tmp "0.0.33" -solidity-ast@^0.4.15: - version "0.4.35" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.35.tgz#82e064b14dc989338123264bde2235cad751f128" - integrity sha512-F5bTDLh3rmDxRmLSrs3qt3nvxJprWSEkS7h2KmuXDx7XTfJ6ZKVTV1rtPIYCqJAuPsU/qa8YUeFn7jdOAZcTPA== +solidity-ast@^0.4.51: + version "0.4.56" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.56.tgz#94fe296f12e8de1a3bed319bc06db8d05a113d7a" + integrity sha512-HgmsA/Gfklm/M8GFbCX/J1qkVH0spXHgALCNZ8fA8x5X+MFdn/8CP2gr5OVyXjXw6RZTPC/Sxl2RUDQOXyNMeA== + dependencies: + array.prototype.findlast "^1.2.2" source-map-resolve@^0.5.0: version "0.5.3" @@ -9838,7 +10075,7 @@ source-map-url@^0.4.0: source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0: version "0.6.1" @@ -9846,17 +10083,17 @@ source-map@^0.6.0: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -9867,9 +10104,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== split-ca@^1.0.0: version "1.0.1" @@ -9886,12 +10123,12 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -9913,7 +10150,7 @@ stacktrace-parser@^0.1.10: static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -9923,16 +10160,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - stream-to-it@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/stream-to-it/-/stream-to-it-0.2.4.tgz#d2fd7bfbd4a899b4c0d6a7e6a533723af5749bd0" @@ -9956,7 +10183,7 @@ streamsearch@^1.1.0: strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== string-format@^2.0.0: version "2.0.0" @@ -9966,13 +10193,13 @@ string-format@^2.0.0: string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.1: +string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -9980,15 +10207,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9998,30 +10216,33 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2 is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.trim@~1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz#a587bcc8bfad8cb9829a577f5de30dd170c1682c" - integrity sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg== +string.prototype.trim@^1.2.9, string.prototype.trim@~1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" + integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.0" + es-object-atoms "^1.0.0" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" + integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -10033,7 +10254,7 @@ string_decoder@^1.1.1: string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" @@ -10045,18 +10266,18 @@ string_decoder@~1.1.1: strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -10073,7 +10294,7 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== dependencies: is-utf8 "^0.2.0" @@ -10085,27 +10306,15 @@ strip-final-newline@^2.0.0: strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha1-DF8VX+8RUTczd96du1iNoFUA428= + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== dependencies: is-hex-prefixed "1.0.0" -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - strip-json-comments@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - supports-color@8.1.1, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -10116,7 +10325,7 @@ supports-color@8.1.1, supports-color@^8.1.1: supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== supports-color@^5.3.0: version "5.5.0" @@ -10146,15 +10355,15 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swarm-js@^0.1.40: - version "0.1.40" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" - integrity sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA== + version "0.1.42" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== dependencies: bluebird "^3.5.0" buffer "^5.0.5" eth-lib "^0.1.26" fs-extra "^4.0.2" - got "^7.1.0" + got "^11.8.5" mime-types "^2.1.16" mkdirp-promise "^5.0.1" mock-fs "^4.1.0" @@ -10178,7 +10387,7 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -table-layout@^1.0.1: +table-layout@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== @@ -10189,25 +10398,26 @@ table-layout@^1.0.1: wordwrapjs "^4.0.0" tape@^4.6.3: - version "4.15.0" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.15.0.tgz#1b8a9563b4bc7e51302216c137732fb2ce6d1a99" - integrity sha512-SfRmG2I8QGGgJE/MCiLH8c11L5XxyUXxwK9xLRD0uiK5fehRkkSZGmR6Y1pxOt8vJ19m3sY+POTQpiaVv45/LQ== + version "4.17.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.17.0.tgz#de89f3671ddc5dad178d04c28dc6b0183f42268e" + integrity sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw== dependencies: + "@ljharb/resumer" "~0.0.1" + "@ljharb/through" "~2.3.9" call-bind "~1.0.2" deep-equal "~1.1.1" - defined "~1.0.0" + defined "~1.0.1" dotignore "~0.1.2" for-each "~0.3.3" - glob "~7.2.0" + glob "~7.2.3" has "~1.0.3" inherits "~2.0.4" is-regex "~1.1.4" - minimist "~1.2.5" - object-inspect "~1.12.0" - resolve "~1.22.0" - resumer "~0.0.0" - string.prototype.trim "~1.2.5" - through "~2.3.8" + minimist "~1.2.8" + mock-property "~1.0.0" + object-inspect "~1.12.3" + resolve "~1.22.6" + string.prototype.trim "~1.2.8" tar-fs@~1.16.3: version "1.16.3" @@ -10246,13 +10456,13 @@ tar@^4.0.2: yallist "^3.1.1" tar@^6.1.0: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -10260,7 +10470,7 @@ tar@^6.1.0: test-value@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/test-value/-/test-value-2.1.0.tgz#11da6ff670f3471a73b625ca4f3fdcf7bb748291" - integrity sha1-Edpv9nDzRxpztiXKTz/c97t0gpE= + integrity sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w== dependencies: array-back "^1.0.3" typical "^2.6.0" @@ -10295,15 +10505,15 @@ through2@^2.0.3: readable-stream "~2.3.6" xtend "~4.0.1" -"through@>=2.2.7 <3", through@~2.3.4, through@~2.3.8: +"through@>=2.2.7 <3": version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -timed-out@^4.0.0, timed-out@^4.0.1: +timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== timeout-abort-controller@^2.0.0: version "2.0.0" @@ -10336,11 +10546,9 @@ tmp@0.1.0: rimraf "^2.6.3" tmp@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== to-buffer@^1.1.1: version "1.1.1" @@ -10350,12 +10558,12 @@ to-buffer@^1.1.1: to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" @@ -10367,7 +10575,7 @@ to-readable-stream@^1.0.0: to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -10394,7 +10602,7 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tough-cookie@^2.3.3, tough-cookie@~2.5.0: +tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== @@ -10405,17 +10613,17 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== ts-command-line-args@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.2.1.tgz#fd6913e542099012c0ffb2496126a8f38305c7d6" - integrity sha512-mnK68QA86FYzQYTSA/rxIjT/8EpKsvQw9QkawPic8I8t0gjAOw3Oa509NIRoaY1FmH7hdrncMp7t7o+vYoceNQ== + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== dependencies: chalk "^4.1.0" command-line-args "^5.1.1" @@ -10460,26 +10668,7 @@ ts-morph@^11.0.3: "@ts-morph/common" "~0.10.1" code-block-writer "^10.1.1" -ts-node@^10.1.0: - version "10.6.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.6.0.tgz#c3f4195d5173ce3affdc8f2fd2e9a7ac8de5376a" - integrity sha512-CJen6+dfOXolxudBQXnVjRVvYTmTWbyz7cn+xq2XTsvnaXbHqr4gXSCNbS2Jj8yTZMuGwUoBESLaOkLascVVvg== - dependencies: - "@cspotcode/source-map-support" "0.7.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.0" - yn "3.1.1" - -ts-node@^10.9.1: +ts-node@^10.1.0, ts-node@^10.9.1: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== @@ -10498,7 +10687,7 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^1.9.3: +tslib@^1.11.1, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -10511,12 +10700,12 @@ tslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6 tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" @@ -10528,14 +10717,14 @@ tweetnacl-util@^0.15.0, tweetnacl-util@^0.15.1: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== tweetnacl@^1.0.0, tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== -type-detect@^4.0.0, type-detect@^4.0.5: +type-detect@^4.0.0, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -10558,15 +10747,10 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.6.0.tgz#3ca6099af5981d36ca86b78442973694278a219f" - integrity sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ== +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== typechain@^3.0.0: version "3.0.0" @@ -10582,9 +10766,9 @@ typechain@^3.0.0: ts-generator "^0.1.1" typechain@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-7.0.0.tgz#258ca136de1d451368bde01c318976a83062f110" - integrity sha512-ILfvBBFJ7j9aIk0crX03+N2GmzoDN1gtk32G1+XrasjuvXS0XAw2XxwQeQMMgKwlnxViJjIkG87sTMYXPkXA9g== + version "7.0.1" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-7.0.1.tgz#65411991327a7031895b1d57b7e0ce7fc9c66376" + integrity sha512-4c+ecLW4mTiKwTDdofiN8ToDp7TkFC2Bzp2Pt/+qeKzkmELWzy2eDjCiv0IWHswAZhE2y9KXBhTmShzhIzD+LQ== dependencies: "@types/prettier" "^2.1.1" debug "^4.1.1" @@ -10597,6 +10781,50 @@ typechain@^7.0.0: ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" + integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10607,34 +10835,34 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.3.5: - version "4.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" - integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typewise-core@^1.2, typewise-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" - integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= + integrity sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg== typewise@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" - integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= + integrity sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ== dependencies: typewise-core "^1.2.0" typewiselite@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" - integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= + integrity sha512-J9alhjVHupW3Wfz6qFRGgQw0N3gr8hOkw6zm7FZ6UR1Cse/oD9/JVok7DNE9TT9IbciDHX2Ex9+ksE6cRmtymw== typical@^2.6.0, typical@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" - integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= + integrity sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg== typical@^4.0.0: version "4.0.0" @@ -10647,9 +10875,9 @@ typical@^5.2.0: integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== uint8arrays@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.0.tgz#8186b8eafce68f28bd29bd29d683a311778901e2" - integrity sha512-ei5rfKtoRO8OyOIor2Rz5fhzjThwIHJZ3uyDPnDHTXbP0aMQ1RN/6AI5B5d9dBxJOU+BvOAk7ZQ1xphsX8Lrog== + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== dependencies: multiformats "^9.4.2" @@ -10658,14 +10886,14 @@ ultron@~1.1.0: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" underscore@1.9.1: @@ -10679,12 +10907,17 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== undici@^5.14.0: - version "5.28.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91" - integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w== + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== dependencies: "@fastify/busboy" "^2.0.0" +unfetch@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -10701,9 +10934,9 @@ universalify@^0.1.0: integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unorm@^1.3.3: version "1.6.0" @@ -10713,12 +10946,12 @@ unorm@^1.3.3: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10733,39 +10966,27 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk= - -url-to-options@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" - integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + version "0.11.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" + integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== dependencies: - punycode "1.3.2" - querystring "0.2.0" + punycode "^1.4.1" + qs "^6.11.2" urlpattern-polyfill@^8.0.0: version "8.0.2" @@ -10784,10 +11005,17 @@ utf-8-validate@5.0.7: dependencies: node-gyp-build "^4.3.0" +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + utf-8-validate@^5.0.2: - version "5.0.8" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.8.tgz#4a735a61661dbb1c59a0868c397d2fe263f14e58" - integrity sha512-k4dW/Qja1BYDl2qD4tOMB9PFVha/UJtxTc1cXYOe3WwA/2m0Yn4qB7wLMpJyLJ/7DR0XnTut3HsCSzDT4ZvKgA== + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: node-gyp-build "^4.3.0" @@ -10799,28 +11027,25 @@ utf8@3.0.0, utf8@^3.0.0: util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util.promisify@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== + version "1.1.2" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.2.tgz#02b3dbadbb80071eee4c43aed58747afdfc516db" + integrity sha512-PBdZ03m1kBnQ5cjjO0ZvJMJS+QsbyIcFwi4hY4U76OQsCO9JrOYjbCFgIF76ccFg9xnJo7ZHPkqyj1GqmdS7MA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" + call-bind "^1.0.2" + define-properties "^1.2.0" for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" + has-proto "^1.0.1" + has-symbols "^1.0.3" + object.getownpropertydescriptors "^2.1.6" + safe-array-concat "^1.0.0" utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@3.3.2: version "3.3.2" @@ -10837,11 +11062,6 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache-lib@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz#0582bcb1c74f3a2ee46487ceecf372e46bce53e8" - integrity sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -10868,12 +11088,12 @@ varint@^6.0.0: vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -10887,9 +11107,9 @@ wcwidth@^1.0.1: defaults "^1.0.3" web-streams-polyfill@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" - integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== web3-bzz@1.2.11: version "1.2.11" @@ -11151,7 +11371,7 @@ web3-utils@1.2.11: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.7.0, web3-utils@^1.0.0-beta.31: +web3-utils@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.7.0.tgz#c59f0fd43b2449357296eb54541810b99b1c771c" integrity sha512-O8Tl4Ky40Sp6pe89Olk2FsaUkgHyb5QAXuaKo38ms3CxZZ4d3rPGfjP9DNKGm5+IUgAZBNpF1VmlSmNCqfDI1w== @@ -11164,6 +11384,20 @@ web3-utils@1.7.0, web3-utils@^1.0.0-beta.31: randombytes "^2.1.0" utf8 "3.0.0" +web3-utils@^1.0.0-beta.31: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + web3@1.2.11: version "1.2.11" resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.11.tgz#50f458b2e8b11aa37302071c170ed61cff332975" @@ -11177,21 +11411,21 @@ web3@1.2.11: web3-shh "1.2.11" web3-utils "1.2.11" -webcrypto-core@^1.7.7: - version "1.7.7" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c" - integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== +webcrypto-core@^1.7.9: + version "1.7.9" + resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.9.tgz#a585f0032dbc88d202cff4f266cbef02ba48bd7a" + integrity sha512-FE+a4PPkOmBbgNDIyRmcHhgXn+2ClRl3JzJdDu/P4+B8y81LqKe6RAsI9b3lAOHe1T1BMkSjsRHTYRikImZnVA== dependencies: - "@peculiar/asn1-schema" "^2.3.6" + "@peculiar/asn1-schema" "^2.3.8" "@peculiar/json-schema" "^1.1.12" asn1js "^3.0.1" - pvtsutils "^1.3.2" - tslib "^2.4.0" + pvtsutils "^1.3.5" + tslib "^2.6.2" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== websocket@1.0.32: version "1.0.32" @@ -11217,7 +11451,7 @@ websocket@^1.0.31: utf-8-validate "^5.0.2" yaeti "^0.0.6" -whatwg-fetch@2.0.4: +whatwg-fetch@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng== @@ -11225,7 +11459,7 @@ whatwg-fetch@2.0.4: whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -11244,19 +11478,18 @@ which-boxed-primitive@^1.0.2: which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@1.3.1, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== +which-typed-array@^1.1.14, which-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" + integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== dependencies: - isexe "^2.0.0" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.2" which@2.0.2, which@^2.0.1: version "2.0.2" @@ -11265,12 +11498,12 @@ which@2.0.2, which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: - string-width "^1.0.2 || 2" + isexe "^2.0.0" widest-line@^3.1.0: version "3.1.0" @@ -11282,7 +11515,7 @@ widest-line@^3.1.0: window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= + integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== wordwrap@^1.0.0: version "1.0.0" @@ -11310,20 +11543,11 @@ workerpool@6.2.1: wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -11336,17 +11560,17 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -ws@8.2.3: - version "8.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba" - integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA== +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== ws@^3.0.0: version "3.3.3" @@ -11364,16 +11588,11 @@ ws@^5.1.1: dependencies: async-limiter "~1.0.0" -ws@^7.4.5: +ws@^7.4.5, ws@^7.4.6: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^7.4.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" @@ -11397,7 +11616,7 @@ xhr-request@^1.0.1, xhr-request@^1.1.0: xhr2-cookies@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" - integrity sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg= + integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== dependencies: cookiejar "^2.1.1" @@ -11411,11 +11630,6 @@ xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" @@ -11424,7 +11638,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: xtend@~2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= + integrity sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ== dependencies: object-keys "~0.4.0" @@ -11433,11 +11647,6 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" @@ -11446,7 +11655,7 @@ y18n@^5.0.5: yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" @@ -11463,14 +11672,6 @@ yaml@1.10.2, yaml@^1.10.0, yaml@^1.10.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -11479,7 +11680,7 @@ yargs-parser@20.2.4: yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= + integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== dependencies: camelcase "^3.0.0" lodash.assign "^4.0.6" @@ -11494,15 +11695,6 @@ yargs-parser@^21.0.0: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -11513,22 +11705,6 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - yargs@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -11545,7 +11721,7 @@ yargs@16.2.0: yargs@^4.7.1: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= + integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== dependencies: cliui "^3.2.0" decamelize "^1.1.1" From 3a1353983bab1d2feb0fa13238bfa0fe5d01b72c Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 10:30:21 +0200 Subject: [PATCH 037/141] contracts: fix local contract deployments --- desci-contracts/Makefile | 2 -- desci-contracts/package.json | 4 ++-- desci-contracts/scripts/deployDpidRegistry.js | 10 ++++++++ .../scripts/deployResearchObject.js | 24 ++++++++++++++----- desci-contracts/scripts/seed.sh | 2 +- 5 files changed, 31 insertions(+), 11 deletions(-) diff --git a/desci-contracts/Makefile b/desci-contracts/Makefile index 2ac150f8e..ed5067b79 100644 --- a/desci-contracts/Makefile +++ b/desci-contracts/Makefile @@ -1,8 +1,6 @@ .PHONY: install build clean seed seed: install - # npx hardhat run scripts/migrateToNewContract.js --network ganache - # scripts/seed.sh "dpid migration" "migration-complete.json" "migrate" scripts/seed.sh "dpid registry" "unknown-dpid.json" "deploy:dpid:ganache" scripts/seed.sh "research object" "unknown-research-object.json" "deploy:ganache" diff --git a/desci-contracts/package.json b/desci-contracts/package.json index 8163b00d5..7b496f3f1 100644 --- a/desci-contracts/package.json +++ b/desci-contracts/package.json @@ -8,8 +8,8 @@ "build": "hardhat compile --network ganache", "docker:build": "docker build -t desci-hardhat-node .", "docker:push": "docker tag desci-hardhat-node:latest 523044037273.dkr.ecr.us-east-2.amazonaws.com/desci-hardhat-node:latest && docker push 523044037273.dkr.ecr.us-east-2.amazonaws.com/desci-hardhat-node:latest", - "deploy:ganache": "yarn stubHardhatAnalytics && rm -f ./.openzeppelin/unknown-1337.json ; rm -f ./.openzeppelin/unknown-research-object.json ; hardhat run scripts/deployResearchObject.js --network ganache && mv ./.openzeppelin/unknown-1337.json ./.openzeppelin/unknown-research-object.json", - "deploy:dpid:ganache": "yarn stubHardhatAnalytics && rm -f ./.openzeppelin/unknown-1337.json ; rm -f ./.openzeppelin/unknown-dpid.json ; hardhat run scripts/deployDpidRegistry.js --network ganache && mv ./.openzeppelin/unknown-1337.json ./.openzeppelin/unknown-dpid.json", + "deploy:ganache": "yarn stubHardhatAnalytics && hardhat run scripts/deployResearchObject.js --network ganache", + "deploy:dpid:ganache": "yarn stubHardhatAnalytics && hardhat run scripts/deployDpidRegistry.js --network ganache", "migrate": "hardhat run scripts/migrateToNewContract.js --network ganache && touch ./.openzeppelin/migration-complete.json", "graph:codegen": "graph codegen subgraph/subgraph.yaml -o subgraph/generated", "graph:build": "graph build subgraph/subgraph.yaml", diff --git a/desci-contracts/scripts/deployDpidRegistry.js b/desci-contracts/scripts/deployDpidRegistry.js index c22bf379a..1fb6b77a5 100644 --- a/desci-contracts/scripts/deployDpidRegistry.js +++ b/desci-contracts/scripts/deployDpidRegistry.js @@ -1,11 +1,21 @@ const { ethers, upgrades } = require("hardhat"); +const fs = require('fs'); +console.log(process.cwd()) async function main() { + fs.rmSync(".openzeppelin/unknown-dpid.json", { force: true }); + fs.rmSync(".openzeppelin/unknown-1337.json", { force: true }); + const DpidRegistry = await ethers.getContractFactory("DpidRegistry"); console.log("[deployDpidRegistry] Deploying DpidRegistry..."); const proxy = await upgrades.deployProxy(DpidRegistry, []); await proxy.deployed(); console.log("[deployDpidRegistry] DpidRegistry deployed to:", proxy.address); + + fs.renameSync( + ".openzeppelin/unknown-1337.json", + ".openzeppelin/unknown-dpid.json", + ); } main(); diff --git a/desci-contracts/scripts/deployResearchObject.js b/desci-contracts/scripts/deployResearchObject.js index 300389f55..7c57063a0 100644 --- a/desci-contracts/scripts/deployResearchObject.js +++ b/desci-contracts/scripts/deployResearchObject.js @@ -1,15 +1,27 @@ const { ethers, upgrades } = require("hardhat"); +const fs = require('fs'); const dpidRegistry = require("../.openzeppelin/unknown-dpid.json"); +const dpidProxyAddress = dpidRegistry.proxies[0].address; async function main() { - const ResearchObject = await ethers.getContractFactory("ResearchObject"); - console.log("[deployResearchObject] Deploying ResearchObject..."); - const proxy = await upgrades.deployProxy(ResearchObject, [ - dpidRegistry.proxies[0].address, - ]); + fs.rmSync(".openzeppelin/unknown-research-object.json", { force: true }); + fs.rmSync(".openzeppelin/unknown-1337.json", { force: true }); + + const ResearchObjectV2 = await ethers.getContractFactory("ResearchObjectV2"); + console.log(`[deployResearchObject] Deploying ResearchObjectV2 with dpid proxy ${dpidProxyAddress}...`); + const proxy = await upgrades.deployProxy( + ResearchObjectV2, + [ dpidProxyAddress ], + { initializer: "__ResearchObjectV2_init" }, + ); await proxy.deployed(); - console.log("[deployResearchObject] ResearchObject deployed to:", proxy.address); + console.log("[deployResearchObject] ResearchObjectV2 deployed to:", proxy.address); + + fs.renameSync( + ".openzeppelin/unknown-1337.json", + ".openzeppelin/unknown-research-object.json", + ); } main(); diff --git a/desci-contracts/scripts/seed.sh b/desci-contracts/scripts/seed.sh index e7b5503d8..001158431 100755 --- a/desci-contracts/scripts/seed.sh +++ b/desci-contracts/scripts/seed.sh @@ -28,7 +28,7 @@ check() { done echo "[seed:$CONTRACT_NAME] deployment found, killing ganache..." - pkill -f "npm exec ganache" || echo "[seed:$CONTRACT_NAME] ganache not running" + pkill -f ".bin/ganache" || echo "[seed:$CONTRACT_NAME] ganache not running" echo "[seed:$CONTRACT_NAME] ganache killed" } From 684dea69eccdfa6dc3d2c341ace6ea171e169bcb Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 10:40:06 +0200 Subject: [PATCH 038/141] nodes-lib: custom siwe cacao authentication for plain signers --- nodes-lib/README.md | 4 +- nodes-lib/package-lock.json | 302 +++++----------------------------- nodes-lib/package.json | 7 +- nodes-lib/src/api.ts | 6 +- nodes-lib/src/chain.ts | 6 +- nodes-lib/src/codex.ts | 46 ++---- nodes-lib/src/config/chain.ts | 40 ++--- nodes-lib/src/config/index.ts | 29 +++- nodes-lib/src/routes.ts | 4 +- nodes-lib/src/util/signing.ts | 86 +++++++++- nodes-lib/test/root.spec.ts | 5 +- nodes-lib/tsconfig.json | 2 +- 12 files changed, 198 insertions(+), 339 deletions(-) diff --git a/nodes-lib/README.md b/nodes-lib/README.md index 515120b28..e6c141db8 100644 --- a/nodes-lib/README.md +++ b/nodes-lib/README.md @@ -78,11 +78,11 @@ By default, the library defaults to interacting with the nodes dev environment. - dPID registration transactions will be done against a testing contract - Ceramic publishing is done on the Clay testnet -Configure your intended environment by calling the `setConfig` function. If you're not doing something very avant-garde, you can likely just pass a standard config instance like `CONFIG.local`. Otherwise, build up your own config object. +Configure your intended environment by calling the `setConfig` function. If you're not doing something very avant-garde, you can likely just pass a standard config instance like `NODESLIB_CONFIGS.local`. Otherwise, build up your own config object. Note that your API key must be set manually by calling `setApiKey`, find more information in the Authentication section. -The `CONFIG.local` preset refers to a locally running docker-compose cluster as defined in the root of this repository, which can be started with `./dockerDev.sh`. See further instructions in the [repo root docs](../README.md). +The `NODESLIB_CONFIGS.local` preset refers to a locally running docker-compose cluster as defined in the root of this repository, which can be started with `./dockerDev.sh`. See further instructions in the [repo root docs](../README.md). ### Drafts A node that's being modified is always in a "draft" state, meaning that the changes are not public. They only become public when the node is published, after which it's possible to view without being authenticated. When new changes are made from this point, they are not publicly available until publish is done again. diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json index 20bc51d19..c1ffcfbb0 100644 --- a/nodes-lib/package-lock.json +++ b/nodes-lib/package-lock.json @@ -1,18 +1,22 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc0", + "version": "0.0.5-rc3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc0", + "version": "0.0.5-rc3", "license": "MIT", "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", + "@desci-labs/desci-contracts": "^0.2.3-rc0", "@desci-labs/desci-models": "^0.2.3-rc1", + "@didtools/cacao": "^3.0.1", "@didtools/pkh-ethereum": "^0.5.0", + "@stablelib/random": "^1.0.2", "axios": "^1.6.5", + "caip": "^1.1.1", "did-session": "^3.1.0", "ethers": "^5.7.2", "form-data": "^4.0.0", @@ -21,7 +25,6 @@ "url-safe-base64": "1.2.0" }, "devDependencies": { - "@desci-labs/desci-contracts": "^0.2.1", "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", "typedoc": "^0.25.8", @@ -1007,25 +1010,9 @@ } }, "node_modules/@desci-labs/desci-contracts": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.1.tgz", - "integrity": "sha512-1O5JkLlFaiuyTvR8tACgWdv9NpqILGf9NyyvGSuseai/wYgbCTK2qhC38R2LvGUFGWQqlXi127dFO5xD2R15fw==", - "dev": true, - "dependencies": { - "@openzeppelin/contracts": "^4.8.1", - "cids": "^1.1.9", - "dotenv": "^10.0.0", - "openzeppelin-solidity": "git+https://github.com/OpenZeppelin/openzeppelin-contracts.git#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" - } - }, - "node_modules/@desci-labs/desci-contracts/node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } + "version": "0.2.3-rc0", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc0.tgz", + "integrity": "sha512-IL3baA/6DYl63nWLKgrlMRnNYWdhket1xoV1hhM6gDBavGVaY4AiC1MVOVS0jpT33op+tP2m0O+vkq+s3/AmdA==" }, "node_modules/@desci-labs/desci-models": { "version": "0.2.3-rc1", @@ -2858,7 +2845,7 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@noble/hashes": { + "node_modules/@noble/curves/node_modules/@noble/hashes": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", @@ -2869,6 +2856,17 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/secp256k1": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", @@ -3107,12 +3105,6 @@ "node": ">=14" } }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.5.tgz", - "integrity": "sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==", - "dev": true - }, "node_modules/@polkadot/networks": { "version": "7.9.2", "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-7.9.2.tgz", @@ -4650,9 +4642,9 @@ } }, "node_modules/caip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.0.tgz", - "integrity": "sha512-yOO3Fu4ygyKYAdznuoaqschMKIZzcdgyMpBNtrIfrUhnOeaOWG+dh0c13wcOS6B/46IGGbncoyzJlio79jU7rw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.1.tgz", + "integrity": "sha512-a3v5lteUUOoyRI0U6qe5ayCCGkF2mCmJ5zQMDnOD2vRjgRg6sm9p8TsRC2h4D4beyqRN9RYniphAPnj/+jQC6g==" }, "node_modules/callback-stream": { "version": "1.1.0", @@ -4768,38 +4760,6 @@ "node": ">=10" } }, - "node_modules/cids": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.9.tgz", - "integrity": "sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "dev": true - }, - "node_modules/cids/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dev": true, - "dependencies": { - "multiformats": "^9.4.2" - } - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -7799,52 +7759,11 @@ "npm": ">=6.0.0" } }, - "node_modules/multicodec": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.2.1.tgz", - "integrity": "sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "uint8arrays": "^3.0.0", - "varint": "^6.0.0" - } - }, - "node_modules/multicodec/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "dev": true - }, - "node_modules/multicodec/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dev": true, - "dependencies": { - "multiformats": "^9.4.2" - } - }, "node_modules/multiformats": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" }, - "node_modules/multihashes": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", - "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", - "dev": true, - "dependencies": { - "multibase": "^4.0.1", - "uint8arrays": "^3.0.0", - "varint": "^5.0.2" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=6.0.0" - } - }, "node_modules/multihashes-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/multihashes-sync/-/multihashes-sync-2.0.0.tgz", @@ -7854,27 +7773,6 @@ "multiformats": "^13.0.0" } }, - "node_modules/multihashes/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "dev": true - }, - "node_modules/multihashes/node_modules/uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dev": true, - "dependencies": { - "multiformats": "^9.4.2" - } - }, - "node_modules/multihashes/node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - }, "node_modules/mustache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", @@ -8209,16 +8107,6 @@ "opencollective-postinstall": "index.js" } }, - "node_modules/openzeppelin-solidity": { - "version": "4.5.0", - "resolved": "git+ssh://git@github.com/OpenZeppelin/openzeppelin-contracts.git#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946", - "integrity": "sha512-TMWYTssbuYNC6p4dC5HrdJK/iy3L0ZHwuBRFKSUSpyCBn6JtYXWFAHRpKHo3pVaczNQlXbW8i29UzJ0lQOcE6Q==", - "dev": true, - "license": "MIT", - "bin": { - "openzeppelin-contracts-migrate-imports": "scripts/migrate-imports.js" - } - }, "node_modules/p-defer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", @@ -11123,24 +11011,9 @@ } }, "@desci-labs/desci-contracts": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.1.tgz", - "integrity": "sha512-1O5JkLlFaiuyTvR8tACgWdv9NpqILGf9NyyvGSuseai/wYgbCTK2qhC38R2LvGUFGWQqlXi127dFO5xD2R15fw==", - "dev": true, - "requires": { - "@openzeppelin/contracts": "^4.8.1", - "cids": "^1.1.9", - "dotenv": "^10.0.0", - "openzeppelin-solidity": "git+https://github.com/OpenZeppelin/openzeppelin-contracts.git#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" - }, - "dependencies": { - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - } - } + "version": "0.2.3-rc0", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc0.tgz", + "integrity": "sha512-IL3baA/6DYl63nWLKgrlMRnNYWdhket1xoV1hhM6gDBavGVaY4AiC1MVOVS0jpT33op+tP2m0O+vkq+s3/AmdA==" }, "@desci-labs/desci-models": { "version": "0.2.3-rc1", @@ -12331,12 +12204,19 @@ "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", "requires": { "@noble/hashes": "1.3.3" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==" + } } }, "@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==" }, "@noble/secp256k1": { "version": "1.7.1", @@ -12496,12 +12376,6 @@ "tslib": "^2.3.1" } }, - "@openzeppelin/contracts": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.5.tgz", - "integrity": "sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==", - "dev": true - }, "@polkadot/networks": { "version": "7.9.2", "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-7.9.2.tgz", @@ -13719,9 +13593,9 @@ } }, "caip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.0.tgz", - "integrity": "sha512-yOO3Fu4ygyKYAdznuoaqschMKIZzcdgyMpBNtrIfrUhnOeaOWG+dh0c13wcOS6B/46IGGbncoyzJlio79jU7rw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.1.tgz", + "integrity": "sha512-a3v5lteUUOoyRI0U6qe5ayCCGkF2mCmJ5zQMDnOD2vRjgRg6sm9p8TsRC2h4D4beyqRN9RYniphAPnj/+jQC6g==" }, "callback-stream": { "version": "1.1.0", @@ -13821,35 +13695,6 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "cids": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.9.tgz", - "integrity": "sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "multicodec": "^3.0.1", - "multihashes": "^4.0.1", - "uint8arrays": "^3.0.0" - }, - "dependencies": { - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "dev": true - }, - "uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dev": true, - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -16195,72 +16040,11 @@ "@multiformats/base-x": "^4.0.1" } }, - "multicodec": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-3.2.1.tgz", - "integrity": "sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==", - "dev": true, - "requires": { - "uint8arrays": "^3.0.0", - "varint": "^6.0.0" - }, - "dependencies": { - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "dev": true - }, - "uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dev": true, - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, "multiformats": { "version": "13.1.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz", "integrity": "sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==" }, - "multihashes": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", - "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", - "dev": true, - "requires": { - "multibase": "^4.0.1", - "uint8arrays": "^3.0.0", - "varint": "^5.0.2" - }, - "dependencies": { - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", - "dev": true - }, - "uint8arrays": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", - "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", - "dev": true, - "requires": { - "multiformats": "^9.4.2" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - } - } - }, "multihashes-sync": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/multihashes-sync/-/multihashes-sync-2.0.0.tgz", @@ -16512,12 +16296,6 @@ "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" }, - "openzeppelin-solidity": { - "version": "git+ssh://git@github.com/OpenZeppelin/openzeppelin-contracts.git#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946", - "integrity": "sha512-TMWYTssbuYNC6p4dC5HrdJK/iy3L0ZHwuBRFKSUSpyCBn6JtYXWFAHRpKHo3pVaczNQlXbW8i29UzJ0lQOcE6Q==", - "dev": true, - "from": "openzeppelin-solidity@git+https://github.com/OpenZeppelin/openzeppelin-contracts.git#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" - }, "p-defer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz", diff --git a/nodes-lib/package.json b/nodes-lib/package.json index ede00f606..2feb9d45e 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc0", + "version": "0.0.5-rc3", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { @@ -28,9 +28,13 @@ }, "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", + "@desci-labs/desci-contracts": "^0.2.3-rc0", "@desci-labs/desci-models": "^0.2.3-rc1", + "@didtools/cacao": "^3.0.1", "@didtools/pkh-ethereum": "^0.5.0", + "@stablelib/random": "^1.0.2", "axios": "^1.6.5", + "caip": "^1.1.1", "did-session": "^3.1.0", "ethers": "^5.7.2", "form-data": "^4.0.0", @@ -39,7 +43,6 @@ "url-safe-base64": "1.2.0" }, "devDependencies": { - "@desci-labs/desci-contracts": "^0.2.1", "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", "typedoc": "^0.25.8", diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts index 83b92e9bb..8b70a7cf7 100644 --- a/nodes-lib/src/api.ts +++ b/nodes-lib/src/api.ts @@ -25,9 +25,9 @@ import type { NodeIDs } from "@desci-labs/desci-codex-lib"; import { publish } from "./publish.js"; import type { ResearchObjectDocument } from "./automerge.js"; import { randomUUID } from "crypto"; -import { getConfig } from "./config/index.js"; +import { getNodesLibInternalConfig } from "./config/index.js"; import { makeRequest } from "./routes.js"; -import { Signer, providers } from "ethers"; +import { Signer } from "ethers"; export const ENDPOINTS = { deleteData: { @@ -964,7 +964,7 @@ export const updateCoverImage = async ( const getHeaders = (isFormData: boolean = false) => { const headers = { - "api-key": getConfig().apiKey, + "api-key": getNodesLibInternalConfig().apiKey, ...(isFormData ? { "content-type": "multipart/form-data" } : {}) }; return headers; diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts index 775819a48..214d51766 100644 --- a/nodes-lib/src/chain.ts +++ b/nodes-lib/src/chain.ts @@ -1,7 +1,7 @@ import { BigNumber, ContractReceipt, Signer, providers } from "ethers"; import { convertUUIDToHex, convertCidTo0xHex} from "./util/converting.js"; import { changeManifest, prePublishDraftNode, type PrepublishResponse } from "./api.js" -import { getConfig } from "./config/index.js"; +import { getNodesLibInternalConfig } from "./config/index.js"; import { formatBytes32String } from "ethers/lib/utils.js"; const LOG_CTX = "[nodes-lib::chain]" @@ -10,10 +10,10 @@ const DEFAULT_DPID_PREFIX_STRING = "beta"; const DEFAULT_DPID_PREFIX = formatBytes32String(DEFAULT_DPID_PREFIX_STRING); const researchObjectContract = (signer: Signer) => - getConfig().chainConfig.researchObjectConnector(signer); + getNodesLibInternalConfig().chainConfig.researchObjectConnector(signer); const dpidRegistryContract = (signer: Signer) => - getConfig().chainConfig.dpidRegistryConnector(signer); + getNodesLibInternalConfig().chainConfig.dpidRegistryConnector(signer); export type DpidPublishResult = { prepubResult: PrepublishResponse, diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index c3c556003..0d3ab5540 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -10,10 +10,9 @@ import { } from "@desci-labs/desci-codex-lib"; import type { IndexedNodeVersion, PrepublishResponse } from "./api.js"; import { convert0xHexToCid } from "./util/converting.js"; -import { getConfig } from "./config/index.js"; -import { Signer, providers } from "ethers"; -import { EthereumWebAuth, getAccountId } from "@didtools/pkh-ethereum"; -import { DIDSession } from "did-session"; +import { getNodesLibInternalConfig } from "./config/index.js"; +import { Signer } from "ethers"; +import { authorizedSessionDidFromSigner } from "./util/signing.js"; const LOG_CTX = "[nodes-lib::codex]"; /** @@ -32,13 +31,14 @@ export const codexPublish = async ( dpidHistory: IndexedNodeVersion[], signer: Signer, ): Promise => { - const nodeUrl = getConfig().ceramicNodeUrl; + const nodeUrl = getNodesLibInternalConfig().ceramicNodeUrl; console.log(LOG_CTX, `starting publish with node ${nodeUrl}...`); + const ceramic = newCeramicClient(nodeUrl); const compose = newComposeClient({ ceramic }); // Wrangle a DID out of the signer for Ceramic auth - const did = await sessionFromSigner(signer, compose.resources); + const did = await authorizedSessionDidFromSigner(signer, compose.resources); compose.setDID(did); // If we know about a stream already, let's assume we backfilled it initially @@ -130,40 +130,24 @@ const backfillNewStream = async ( return streamID; }; +/** + * Get the state of a research object as published on Codex. +*/ export const getPublishedFromCodex = async ( id: string ) => { - const ceramic = newCeramicClient(getConfig().ceramicNodeUrl); - + const ceramic = newCeramicClient(getNodesLibInternalConfig().ceramicNodeUrl); const compose = newComposeClient({ ceramic }); + return await queryResearchObject(compose, id); }; +/** + * Get the historical events for a given stream. +*/ export const getCodexHistory = async ( streamID: string ) => { - const ceramic = newCeramicClient(getConfig().ceramicNodeUrl); + const ceramic = newCeramicClient(getNodesLibInternalConfig().ceramicNodeUrl); return await resolveHistory(ceramic, streamID); }; - -const sessionFromSigner = async ( - signer: Signer, - resources: string[], -) => { - // Fuckery to get the inner provider for a metamask signer - const externalProvider = (signer.provider as providers.Web3Provider)?.provider; - - const accountId = await getAccountId( - externalProvider ?? signer, - await signer.getAddress() - ); - const authMethod = await EthereumWebAuth.getAuthMethod( - externalProvider ?? signer, - accountId - ); - const session = await DIDSession.authorize( - authMethod, - { resources } - ); - return session.did; -}; diff --git a/nodes-lib/src/config/chain.ts b/nodes-lib/src/config/chain.ts index 5a4558c4f..852579643 100644 --- a/nodes-lib/src/config/chain.ts +++ b/nodes-lib/src/config/chain.ts @@ -1,5 +1,5 @@ import { - DpidRegistry, + DpidRegistry, DpidRegistry__factory, ResearchObject, ResearchObjectV2, @@ -9,19 +9,19 @@ import { import { Signer, providers } from "ethers"; import { type NodesEnv } from "./index.js"; -import localRoInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-research-object.json"; -import localDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-dpid.json"; -import devRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-research-object.json"; -import devDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-dpid.json"; -import prodRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-research-object.json"; -import prodDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-dpid.json"; +import localRoInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-research-object.json" assert { type: "json"}; +import localDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-dpid.json" assert { type: "json"}; +import devRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-research-object.json" assert { type: "json"}; +import devDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-dpid.json" assert { type: "json"}; +import prodRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-research-object.json" assert { type: "json"}; +import prodDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-dpid.json" assert { type: "json"}; export type NodesContract = | ResearchObject | ResearchObjectV2 | DpidRegistry; export type ContractConnector = - (signer: Signer) => T; + (signerOrProvider: Signer | providers.Provider) => T; export type ChainConfig = { rpcUrl: string, @@ -32,35 +32,35 @@ export type ChainConfig = { export const CHAIN_CONFIGS = { local: { rpcUrl: "http://localhost:8545", - researchObjectConnector: signer => ResearchObject__factory.connect( + researchObjectConnector: signerOrProvider => ResearchObject__factory.connect( localRoInfo.proxies.at(0)!.address, - signer + signerOrProvider ), - dpidRegistryConnector: signer => DpidRegistry__factory.connect( + dpidRegistryConnector: signerOrProvider => DpidRegistry__factory.connect( localDpidInfo.proxies.at(0)!.address, - signer + signerOrProvider ), }, dev: { rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", - researchObjectConnector: signer => ResearchObjectV2__factory.connect( + researchObjectConnector: signerOrProvider => ResearchObjectV2__factory.connect( devRoInfo.proxies.at(0)!.address, - signer + signerOrProvider ), - dpidRegistryConnector: signer => DpidRegistry__factory.connect( + dpidRegistryConnector: signerOrProvider => DpidRegistry__factory.connect( devDpidInfo.proxies.at(0)!.address, - signer + signerOrProvider ), }, prod: { rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", - researchObjectConnector: signer => ResearchObjectV2__factory.connect( + researchObjectConnector: signerOrProvider => ResearchObjectV2__factory.connect( prodRoInfo.proxies.at(0)!.address, - signer + signerOrProvider ), - dpidRegistryConnector: signer => DpidRegistry__factory.connect( + dpidRegistryConnector: signerOrProvider => DpidRegistry__factory.connect( prodDpidInfo.proxies.at(0)!.address, - signer + signerOrProvider ), }, } as const satisfies { [Env in NodesEnv]: ChainConfig }; diff --git a/nodes-lib/src/config/index.ts b/nodes-lib/src/config/index.ts index 02fa838fe..25e21984e 100644 --- a/nodes-lib/src/config/index.ts +++ b/nodes-lib/src/config/index.ts @@ -12,7 +12,7 @@ export type Config = { chainConfig: ChainConfig, }; -export const CONFIGS = { +export const NODESLIB_CONFIGS = { local: { apiUrl: "http://localhost:5420", apiKey: undefined, @@ -34,15 +34,24 @@ export const CONFIGS = { } as const satisfies { [Env in NodesEnv]: Config }; // Default config to dev environment -let config: Config = CONFIGS.dev; -console.log(`[nodes-lib::config] initialising with nodes-dev config. Use setConfig and setApiKey to change this: \n${JSON.stringify(CONFIGS.dev, undefined, 2)}`); +let config: Config = NODESLIB_CONFIGS.dev; +console.log(`[nodes-lib::config] initialising with nodes-dev config. Use setConfig and setApiKey to change this: \n${JSON.stringify(NODESLIB_CONFIGS.dev, undefined, 2)}`); +console.log("[nodes-lib::config] config.apiKey is unset; non-public API requests WILL fail unless running in browser with auth cookies!") +/** + * Set API key in config. Note that it needs to be created in the correct environment: + * if apiUrl is `nodes-api-dev.desci.com`, generate the API key at + * `https://nodes-dev.desci.com`. +*/ export const setApiKey = (apiKey: string) => { console.log(`[nodes-lib::config] setting new apiKey: \n${apiKey.slice(0, 5) + "..."}`); config.apiKey = apiKey; }; -export const setConfig = (newConfig: Config): void => { +/** + * Set a new configuration. You likely want a preset from the `CONFIGS` object. +*/ +export const setNodesLibConfig = (newConfig: Config): void => { const confWithRedactedKey = JSON.stringify( { ...newConfig, @@ -53,13 +62,17 @@ export const setConfig = (newConfig: Config): void => { undefined, 2 ); console.log(`[nodes-lib::config] setting new config: \n${confWithRedactedKey}`); + if (!config.apiKey) { + console.log("[nodes-lib::config] config.apiKey is unset; non-public API requests WILL fail unless running in browser with auth cookies!") + }; config = newConfig; }; -export const getConfig = () => { - if (!config.apiKey) { - console.log("[nodes-lib::config] config.apiKey is unset; non-public API requests will fail unless running in browser with auth cookies!") - }; +/** + * Get the current config. Note that apiKey may be undefined, something that is + * masked by the type to allow browser auth cookie override. +*/ +export const getNodesLibInternalConfig = () => { return config as Required; }; diff --git a/nodes-lib/src/routes.ts b/nodes-lib/src/routes.ts index 3bc8a7e8f..ddafc2b1a 100644 --- a/nodes-lib/src/routes.ts +++ b/nodes-lib/src/routes.ts @@ -1,6 +1,6 @@ import axios, { AxiosError, AxiosResponse } from "axios"; import { ENDPOINTS } from "./api.js"; -import { getConfig } from "./config/index.js"; +import { getNodesLibInternalConfig } from "./config/index.js"; // Default error serialization is huuuge due to circular refs axios.interceptors.response.use( @@ -34,7 +34,7 @@ export async function makeRequest< payload: T["_payloadT"], routeTail?: string, ): Promise { - const url = getConfig().apiUrl + endpoint.route + (routeTail ?? ""); + const url = getNodesLibInternalConfig().apiUrl + endpoint.route + (routeTail ?? ""); let res: AxiosResponse; // post is the only method that takes a data payload if ( endpoint.method === "post") { diff --git a/nodes-lib/src/util/signing.ts b/nodes-lib/src/util/signing.ts index 9812e51a2..de874434a 100644 --- a/nodes-lib/src/util/signing.ts +++ b/nodes-lib/src/util/signing.ts @@ -1,12 +1,17 @@ -import { Signer, Wallet, getDefaultProvider } from "ethers"; +import { Signer, Wallet, getDefaultProvider, providers } from "ethers"; import { SigningKey } from "ethers/lib/utils.js"; -import { getConfig } from "../config/index.js"; +import { getNodesLibInternalConfig } from "../config/index.js"; +import { AuthMethod, AuthMethodOpts, Cacao, SiweMessage } from "@didtools/cacao"; +import { EthereumWebAuth, normalizeAccountId } from "@didtools/pkh-ethereum"; +import { randomString } from "@stablelib/random"; +import { AccountId } from "caip"; +import { DIDSession } from "did-session"; export const signerFromPkey = (pkey: string): Signer => walletFromPkey(pkey); const walletFromPkey = (pkey: string): Wallet => { - const provider = getDefaultProvider(getConfig().chainConfig.rpcUrl); + const provider = getDefaultProvider(getNodesLibInternalConfig().chainConfig.rpcUrl); const paddedPkey = ensurePkeyPadding(pkey); const key = new SigningKey(paddedPkey); return new Wallet(key, provider); @@ -14,3 +19,78 @@ const walletFromPkey = (pkey: string): Wallet => { const ensurePkeyPadding = (pkey: string) => pkey.startsWith("0x") ? pkey : `0x${pkey}`; + +/** + * Get auth method for cases where we have a simple signer instead of a + * complete wallet provider (i.e. metamask or similar). + * + * Assumes `resources` is passed as opts to `DIDSession.authorize` at time + * of use. +*/ +const getManualSignatureAuthMethod = ( + accountId: AccountId, + signer: Signer +): AuthMethod => async (opts: AuthMethodOpts) => { + const now = new Date(); + const oneWeekLater = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); + + const normalizedAccount = normalizeAccountId(accountId); + + const siweMessage = new SiweMessage({ + domain: new URL(getNodesLibInternalConfig().apiUrl).hostname, + address: normalizedAccount.address, + statement: opts.statement ?? 'Give this application access to some of your data on Ceramic', + uri: opts.uri, // ID of the CACAO, randomly populated by DIDSession.authorize + version: "1", // SIWX version + nonce: opts.nonce ?? randomString(10), + issuedAt: now.toISOString(), + expirationTime: opts.expirationTime ?? oneWeekLater.toISOString(), + chainId: normalizedAccount.chainId.reference, + resources: opts.resources, + }) + const signature = await signer.signMessage(siweMessage.signMessage()); + siweMessage.signature = signature; + const cacao = Cacao.fromSiweMessage(siweMessage); + + // NOTE: If things act up for a new type of signer, uncomment and trace verification: + // debugger; + // verifyEIP191Signature(cacao, { verifiers: getEIP191Verifier()}); + + return cacao; +}; + +/** + * From a signer, potentially wrapping a capable wallet provider, authenticate + * a DID session using a SIWE CACAO, and return the DID ready for writing to + * streams on behalf of the account. +*/ +export const authorizedSessionDidFromSigner = async ( + signer: Signer, + resources: string[], +) => { + // Fuckery to get the inner provider for a metamask signer + const externalProvider = (signer.provider as providers.Web3Provider)?.provider; + // Otherwise, it's likely a regular jsonRpcProvider + const jsonRpcProvider = signer.provider as providers.JsonRpcProvider; + + const address = await signer.getAddress(); + const network = await jsonRpcProvider.getNetwork(); + const chainId = `eip155:${network.chainId}`; + const caipAccountId = new AccountId({ address, chainId }); + + let authMethod: AuthMethod; + if (externalProvider) { + authMethod = await EthereumWebAuth.getAuthMethod( + externalProvider, + caipAccountId, + ); + } else { + authMethod = getManualSignatureAuthMethod(caipAccountId, signer); + }; + + const session = await DIDSession.authorize( + authMethod, + { resources } + ); + return session.did; +}; diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts index f09b6bc77..e1038ad79 100644 --- a/nodes-lib/test/root.spec.ts +++ b/nodes-lib/test/root.spec.ts @@ -31,7 +31,7 @@ import { ResearchObjectComponentDataSubtype } from "@desci-labs/desci-models"; import { signerFromPkey } from "../src/util/signing.js"; -import { getConfig, setApiKey } from "../src/config/index.js"; +import { getNodesLibInternalConfig, setApiKey } from "../src/config/index.js"; const TEST_PKEY = "f1d695d35c0987579c9e43e2e068f9f95775e7fd3958797b52d780aa8914e167"; const testSigner = signerFromPkey(TEST_PKEY); @@ -42,9 +42,10 @@ if (!process.env.NODESLIB_API_KEY) { setApiKey(process.env.NODESLIB_API_KEY); }; + describe("nodes-lib", () => { beforeAll(async () => { - const apiUrl = getConfig().apiUrl; + const apiUrl = getNodesLibInternalConfig().apiUrl; try { console.log(`Checking server reachable at ${apiUrl}...`); await axios.get(apiUrl); diff --git a/nodes-lib/tsconfig.json b/nodes-lib/tsconfig.json index e3744bda4..c3c524e41 100644 --- a/nodes-lib/tsconfig.json +++ b/nodes-lib/tsconfig.json @@ -2,7 +2,7 @@ /** https://www.typescriptlang.org/docs/handbook/modules/guides/choosing-compiler-options.html */ "compilerOptions": { /** Maximise compatibility with ESM/cjs and importer `moduleResolution: bundler` setting */ - "module": "node16", + "module": "nodenext", "target": "es2020", /** Without strict, we'd error when imported into a project with `strict` */ "strict": true, From ddb9c94f65d180c8fb001bae351c971425f35b39 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 13:59:15 +0200 Subject: [PATCH 039/141] server: associateOrcidWallet returns 202 instead of 400 if already associated --- .../src/controllers/users/associateWallet.ts | 32 +++++++++---------- desci-server/src/middleware/permissions.ts | 3 +- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/desci-server/src/controllers/users/associateWallet.ts b/desci-server/src/controllers/users/associateWallet.ts index ea68378d0..d57cf0d7f 100755 --- a/desci-server/src/controllers/users/associateWallet.ts +++ b/desci-server/src/controllers/users/associateWallet.ts @@ -43,21 +43,10 @@ export const associateOrcidWallet = async (req: Request, res: Response, next: Ne const user = (req as any).user; const { did } = req.body; if (!did) { - res.status(400).send({ err: 'missing wallet address' }); + res.status(400).send({ err: 'orcid DID not provided' }); return; } - // TODO: check for wallet uniqueness across all accounts - const doesExist = - (await prisma.wallet.count({ - where: { - address: did, - }, - })) > 0; - if (doesExist) { - res.status(400).send({ err: 'duplicate DID (global)' }); - return; - } const ORCID_NICKNAME = 'ORCID'; const hasOrcidWallet = await prisma.wallet.count({ where: { @@ -66,9 +55,21 @@ export const associateOrcidWallet = async (req: Request, res: Response, next: Ne }, }); if (hasOrcidWallet > 0) { - res.status(400).send({ err: 'orcid DID already registered' }); + res.status(202).send({ message: 'orcid DID already registered to this user' }); return; - } + }; + + // TODO: check for wallet uniqueness across all accounts + const doesExist = + (await prisma.wallet.count({ + where: { + address: did, + }, + })) > 0; + if (doesExist) { + res.status(400).send({ err: 'orcid DID already register to some other' }); + return; + }; try { const addWallet = await prisma.wallet.create({ @@ -101,9 +102,8 @@ export const associateOrcidWallet = async (req: Request, res: Response, next: Ne } catch (err) { logger.error({ err }, 'Error sending orcid DID txn'); } - res.send({ ok: true }); + res.status(201).send({ ok: true }); return; - // req.session.save(() => res.status(200).send({ ok: true })); } catch (err) { logger.error({ err }, 'Error associating orcid DID to user #1'); res.status(500).send({ err }); diff --git a/desci-server/src/middleware/permissions.ts b/desci-server/src/middleware/permissions.ts index d36f95dd7..13a7f55c9 100644 --- a/desci-server/src/middleware/permissions.ts +++ b/desci-server/src/middleware/permissions.ts @@ -17,7 +17,6 @@ export const ensureUser = async (req: ExpressRequest, res: Response, next: NextF const apiKey = await extractApiKey(req); const authTokenRetrieval = await extractUserFromToken(token); const apiKeyRetrieval = await extractUserFromApiKey(apiKey, req.ip); - // logger.info({ token, authTokenRetrieval }, 'ENSUER USER'); const retrievedUser = authTokenRetrieval || apiKeyRetrieval; if (!retrievedUser) { @@ -128,6 +127,8 @@ export const extractUserFromToken = async (token: string): Promise */ export const extractApiKey = async (request: ExpressRequest | Request) => { const apiKeyHeader = request.headers['api-key']; + logger.info({ module: 'Permissions::extractApiKey', apiKeyLength: apiKeyHeader?.length || 0 }, 'Request'); + return apiKeyHeader; }; From 8e5d08f12f8055d38681d23a7c6dd6d6d825d6e0 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 13:59:36 +0200 Subject: [PATCH 040/141] server: seed dev db with api key for noreply user --- desci-server/prisma/seed.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desci-server/prisma/seed.ts b/desci-server/prisma/seed.ts index 925308dfb..f47188e37 100755 --- a/desci-server/prisma/seed.ts +++ b/desci-server/prisma/seed.ts @@ -20,11 +20,11 @@ async function main() { await prisma.apiKey.upsert({ where: { - keyHashed: "agu+zEH30gwm77C+Em4scbzdiYOnv8uSvA0qr2XAj5k=", + keyHashed: "yMcm5OwIUcmh98cmpDhCZArwRV+8Q14XIOs2LhKQ6fY=", }, update: {}, create: { - keyHashed: "agu+zEH30gwm77C+Em4scbzdiYOnv8uSvA0qr2XAj5k=", + keyHashed: "yMcm5OwIUcmh98cmpDhCZArwRV+8Q14XIOs2LhKQ6fY=", memo: "nodes-lib tests", createdAt: "2023-01-01T00:00:00.000Z", lastUsed: "2023-01-01T00:00:00.000Z", From 89c36e0a6c8d94c96e66b4f6b9cf50658d476641 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 14:00:14 +0200 Subject: [PATCH 041/141] contracts: use ResearchObjectMigrated instead of ResearchObjectV2 in local deploy --- desci-contracts/package.json | 2 +- desci-contracts/scripts/deployResearchObject.js | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/desci-contracts/package.json b/desci-contracts/package.json index 7b496f3f1..bcacbd224 100644 --- a/desci-contracts/package.json +++ b/desci-contracts/package.json @@ -1,7 +1,7 @@ { "name": "@desci-labs/desci-contracts", "description": "Smart contracts implementing DeSci Nodes on-chain state and logic", - "version": "0.2.3-rc0", + "version": "0.2.3-rc1", "license": "MIT", "scripts": { "test": "hardhat clean && hardhat test", diff --git a/desci-contracts/scripts/deployResearchObject.js b/desci-contracts/scripts/deployResearchObject.js index 7c57063a0..56d52064f 100644 --- a/desci-contracts/scripts/deployResearchObject.js +++ b/desci-contracts/scripts/deployResearchObject.js @@ -8,15 +8,14 @@ async function main() { fs.rmSync(".openzeppelin/unknown-research-object.json", { force: true }); fs.rmSync(".openzeppelin/unknown-1337.json", { force: true }); - const ResearchObjectV2 = await ethers.getContractFactory("ResearchObjectV2"); - console.log(`[deployResearchObject] Deploying ResearchObjectV2 with dpid proxy ${dpidProxyAddress}...`); + const ResearchObjectV2 = await ethers.getContractFactory("ResearchObjectMigrated"); + console.log(`[deployResearchObject] Deploying ResearchObjectMigrated with dpid proxy ${dpidProxyAddress}...`); const proxy = await upgrades.deployProxy( ResearchObjectV2, [ dpidProxyAddress ], - { initializer: "__ResearchObjectV2_init" }, ); await proxy.deployed(); - console.log("[deployResearchObject] ResearchObjectV2 deployed to:", proxy.address); + console.log("[deployResearchObject] ResearchObjectMigrated deployed to:", proxy.address); fs.renameSync( ".openzeppelin/unknown-1337.json", From b4d3291c009825135869bc829e69cf95c03f10cf Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 14:26:56 +0200 Subject: [PATCH 042/141] nodeslib: blockchain related fixes --- nodes-lib/package-lock.json | 14 +++++++------- nodes-lib/package.json | 4 ++-- nodes-lib/src/chain.ts | 10 +++++----- nodes-lib/src/publish.ts | 2 +- nodes-lib/test/root.spec.ts | 18 +++++++++--------- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json index c1ffcfbb0..912891eb8 100644 --- a/nodes-lib/package-lock.json +++ b/nodes-lib/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", - "@desci-labs/desci-contracts": "^0.2.3-rc0", + "@desci-labs/desci-contracts": "^0.2.3-rc1", "@desci-labs/desci-models": "^0.2.3-rc1", "@didtools/cacao": "^3.0.1", "@didtools/pkh-ethereum": "^0.5.0", @@ -1010,9 +1010,9 @@ } }, "node_modules/@desci-labs/desci-contracts": { - "version": "0.2.3-rc0", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc0.tgz", - "integrity": "sha512-IL3baA/6DYl63nWLKgrlMRnNYWdhket1xoV1hhM6gDBavGVaY4AiC1MVOVS0jpT33op+tP2m0O+vkq+s3/AmdA==" + "version": "0.2.3-rc1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc1.tgz", + "integrity": "sha512-rUFVQuebhh2i8HAt9Bxkk41rQ7wD1bBzRCSRg6u51knjnPnd4gf4WWjZJDkpZEvVBGWcBODN598WtOlT8JGPhg==" }, "node_modules/@desci-labs/desci-models": { "version": "0.2.3-rc1", @@ -11011,9 +11011,9 @@ } }, "@desci-labs/desci-contracts": { - "version": "0.2.3-rc0", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc0.tgz", - "integrity": "sha512-IL3baA/6DYl63nWLKgrlMRnNYWdhket1xoV1hhM6gDBavGVaY4AiC1MVOVS0jpT33op+tP2m0O+vkq+s3/AmdA==" + "version": "0.2.3-rc1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc1.tgz", + "integrity": "sha512-rUFVQuebhh2i8HAt9Bxkk41rQ7wD1bBzRCSRg6u51knjnPnd4gf4WWjZJDkpZEvVBGWcBODN598WtOlT8JGPhg==" }, "@desci-labs/desci-models": { "version": "0.2.3-rc1", diff --git a/nodes-lib/package.json b/nodes-lib/package.json index 2feb9d45e..968dd39bf 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc3", + "version": "0.0.5-rc4", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { @@ -28,7 +28,7 @@ }, "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", - "@desci-labs/desci-contracts": "^0.2.3-rc0", + "@desci-labs/desci-contracts": "^0.2.3-rc1", "@desci-labs/desci-models": "^0.2.3-rc1", "@didtools/cacao": "^3.0.1", "@didtools/pkh-ethereum": "^0.5.0", diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts index 214d51766..34a0932b3 100644 --- a/nodes-lib/src/chain.ts +++ b/nodes-lib/src/chain.ts @@ -99,11 +99,11 @@ const registerNewDpid = async ( // Throws if the expected dPID isn't available const tx = await researchObjectContract(signer).mintWithDpid( - hexUuid, - cidBytes, - DEFAULT_DPID_PREFIX, - optimisticDpid, - { value: regFee, gasLimit: 350000 } + hexUuid, + cidBytes, + DEFAULT_DPID_PREFIX, + optimisticDpid, + { value: regFee, gasLimit: 350000 } ); reciept = await tx.wait(); } catch (e) { diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts index bbb5bd650..b0506a3b0 100644 --- a/nodes-lib/src/publish.ts +++ b/nodes-lib/src/publish.ts @@ -15,8 +15,8 @@ export const publish = async ( ) => { let chainPubResponse: DpidPublishResult; let preexistingDpid: boolean; - try { preexistingDpid = await hasDpid(uuid, provider); + try { chainPubResponse = await dpidPublish(uuid, preexistingDpid, provider); } catch (e) { /** diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts index e1038ad79..4d584f719 100644 --- a/nodes-lib/test/root.spec.ts +++ b/nodes-lib/test/root.spec.ts @@ -31,17 +31,17 @@ import { ResearchObjectComponentDataSubtype } from "@desci-labs/desci-models"; import { signerFromPkey } from "../src/util/signing.js"; -import { getNodesLibInternalConfig, setApiKey } from "../src/config/index.js"; +import { NODESLIB_CONFIGS, getNodesLibInternalConfig, setApiKey, setNodesLibConfig } from "../src/index.js"; -const TEST_PKEY = "f1d695d35c0987579c9e43e2e068f9f95775e7fd3958797b52d780aa8914e167"; -const testSigner = signerFromPkey(TEST_PKEY); - -if (!process.env.NODESLIB_API_KEY) { - throw new Error("NODESLIB_API_KEY not set; cannot run tests.") -} else { - setApiKey(process.env.NODESLIB_API_KEY); -}; +// Pre-funded ganache account +const TEST_PKEY = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; +// Pre-seeded for noreply user in local environment +const TEST_API_KEY = "agu+zEH30gwm77C+Em4scbzdiYOnv8uSvA0qr2XAj5k="; +// Prisma seeds test DB's with an API key for noreply@desci.com +setNodesLibConfig(NODESLIB_CONFIGS.local); +setApiKey(TEST_API_KEY); +const testSigner = signerFromPkey(TEST_PKEY); describe("nodes-lib", () => { beforeAll(async () => { From 35adf3c4b61d75cd2b9461bfa80bf27901d3d5ec Mon Sep 17 00:00:00 2001 From: kadami Date: Thu, 4 Apr 2024 22:15:06 +0700 Subject: [PATCH 043/141] add endpoint to get authed users contributions --- .../getUserContributionsAuthed.ts | 49 +++++++++++++++++++ desci-server/src/routes/v1/nodes.ts | 4 +- desci-server/src/services/Contributors.ts | 26 ++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts diff --git a/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts b/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts new file mode 100644 index 000000000..e5fd5a221 --- /dev/null +++ b/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts @@ -0,0 +1,49 @@ +import { Request, Response } from 'express'; + +import { logger as parentLogger } from '../../../logger.js'; +import { NodeContributorMap, UserContribution, contributorService } from '../../../services/Contributors.js'; +import { User } from '@sentry/node'; + +export type GetNodeContributionsAuthedRequest = Request & { + user: User; // Added by the ensureUser middleware +}; + +export type GetUserContributionsAuthedResBody = + | { + ok: boolean; + userContributionsMap: NodeContributorMap; + } + | { + error: string; + }; + +export const getUserContributionsAuthed = async ( + req: GetNodeContributionsAuthedRequest, + res: Response, +) => { +const user = req.user + + const logger = parentLogger.child({ + module: 'Contributors::getUserContributionsAuthedController', + body: req.body, + userId: user.id, + }); + + if (!user) { + return res.status(401).json({ error: 'user required' }); + } + + try { + const userContributionsMap: NodeContributorMap = + await contributorService.retrieveUserContributionMap(user); + if (userContributionsMap) { + logger.info({ totalContributions: userContributionsMap.length }, 'User contributions map retrieved successfully'); + return res.status(200).json({ ok: true, userContributionsMap }); + } + } catch (e) { + logger.error({ e }, 'Failed to retrieve user contributions map'); + return res.status(500).json({ error: 'Failed to retrieve user contributions map' }); + } + + return res.status(500).json({ error: 'Something went wrong' }); +}; diff --git a/desci-server/src/routes/v1/nodes.ts b/desci-server/src/routes/v1/nodes.ts index 2400e2618..472adf79d 100755 --- a/desci-server/src/routes/v1/nodes.ts +++ b/desci-server/src/routes/v1/nodes.ts @@ -37,6 +37,7 @@ import { versionDetails } from '../../controllers/nodes/versionDetails.js'; import { asyncHander, attachUser, validate } from '../../internal.js'; import { ensureNodeAccess, ensureWriteNodeAccess } from '../../middleware/authorisation.js'; import { ensureUser } from '../../middleware/permissions.js'; +import { getUserContributionsAuthed } from '../../controllers/nodes/contributions/getUserContributionsAuthed.js'; const router = Router(); @@ -67,11 +68,12 @@ router.get('/cover/:uuid/:version', [], getCoverImage); router.get('/documents/:uuid', [ensureUser, ensureNodeAccess], getNodeDocument); router.post('/documents/:uuid/actions', [ensureUser, ensureNodeAccess], dispatchDocumentChange); router.get('/thumbnails/:uuid/:manifestCid?', [attachUser], thumbnails); -router.post('/contributions/node/:uuid', [attachUser], getNodeContributions); +router.get('/contributions/node/:uuid', [attachUser], getNodeContributions); router.post('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], addContributor); router.patch('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], updateContributor); router.delete('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], deleteContributor); router.get('/contributions/user/:userId', [], getUserContributions); +router.get('/contributions/user', [ensureUser], getUserContributionsAuthed); router.patch('/contributions/verify', [ensureUser], verifyContribution); router.delete('/:uuid', [ensureUser], deleteNode); diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 3c048fef1..864a2396a 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -195,6 +195,32 @@ class ContributorService { return NodesWithManifestCids || []; } + /** + * Retrieve a map of all nodes an authed user has contributed to, to enable checks such as canVerify on the frontend + */ + async retrieveUserContributionMap(user: User): Promise { + const contributions = await prisma.nodeContribution.findMany({ + where: { + OR: [ + { userId: user.id }, + { email: user.email }, + { orcid: user.orcid } + ] + }, + include: { node: true }, + }); + return contributions.reduce((acc, contributor) => { + acc[contributor.contributorId] = { + name: contributor.user?.name, + verified: !!contributor.verified, + userId: contributor.user?.id, + deleted: contributor.deleted, + deletedAt: contributor.deletedAt, + }; + return acc; + }, {}); + } + async verifyContribution(user: User, contributorId: string): Promise { if (!contributorId) throw Error('contributorId required'); const contribution = await prisma.nodeContribution.findUnique({ where: { contributorId } }); From 4547369626673be002e9af9ef8fde390fe28a1be Mon Sep 17 00:00:00 2001 From: kadami Date: Thu, 4 Apr 2024 22:22:56 +0700 Subject: [PATCH 044/141] reversion fix --- desci-server/src/routes/v1/nodes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/src/routes/v1/nodes.ts b/desci-server/src/routes/v1/nodes.ts index 472adf79d..07547e20f 100755 --- a/desci-server/src/routes/v1/nodes.ts +++ b/desci-server/src/routes/v1/nodes.ts @@ -68,7 +68,7 @@ router.get('/cover/:uuid/:version', [], getCoverImage); router.get('/documents/:uuid', [ensureUser, ensureNodeAccess], getNodeDocument); router.post('/documents/:uuid/actions', [ensureUser, ensureNodeAccess], dispatchDocumentChange); router.get('/thumbnails/:uuid/:manifestCid?', [attachUser], thumbnails); -router.get('/contributions/node/:uuid', [attachUser], getNodeContributions); +router.post('/contributions/node/:uuid', [attachUser], getNodeContributions); router.post('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], addContributor); router.patch('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], updateContributor); router.delete('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], deleteContributor); From da21bb1118064320262565490e6b0c57603e783f Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 4 Apr 2024 19:18:29 +0200 Subject: [PATCH 045/141] hook up bootstrapCeramic.sh to dockerDev.sh --- .env.example | 4 +- .gitignore | 3 +- bootstrapCeramic.sh | 63 ++++++++++++-------- desci-server/src/scripts/seed-social-data.ts | 2 +- dockerDev.sh | 4 ++ 5 files changed, 47 insertions(+), 29 deletions(-) diff --git a/.env.example b/.env.example index de0518537..883615140 100755 --- a/.env.example +++ b/.env.example @@ -93,8 +93,8 @@ ORCID_CLIENT_SECRET= REPO_SERVER_URL=http://host.docker.internal:5484 REPO_SERVICE_SECRET_KEY=secretrepo -# To run bootstrapCeramic.sh, clone `@desci-labs/desci-codex` and put the path here -CODEX_REPO_PATH= +# To run bootstrapCeramic.sh, you need the admin seed for the model IDs to be the same +CERAMIC_ADMIN_SEED= # ISOLATED MEDIA SERVER ISOLATED_MEDIA_SERVER_URL=http://media_isolated:7771 diff --git a/.gitignore b/.gitignore index c8e4c0707..9998940fb 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ ipfs-data/ local-data/ node-modules/ node_modules/* -.idea \ No newline at end of file +.idea +.composedbRuntimeDefinition.json diff --git a/bootstrapCeramic.sh b/bootstrapCeramic.sh index 5fb4a848e..6666334aa 100755 --- a/bootstrapCeramic.sh +++ b/bootstrapCeramic.sh @@ -15,7 +15,10 @@ CTX="[bootstrapCeramic.sh]" set -euo pipefail trap catch ERR catch() { - echo "$CTX script failed (are CODEX_REPO_PATH and TOGGLE_CERAMIC set in .env?)" + echo "$CTX script failed" + if [ "$WAS_RUNNING" -eq "0" ]; then + docker compose --project-name desci down + fi exit 1 } @@ -25,38 +28,48 @@ if [[ ! -f .env ]]; then exit 1 fi -# Assert desci-codex repo available -CODEX_REPO_PATH=$(grep "CODEX_REPO_PATH" .env | cut -d"=" -f2) -if [[ -z "$CODEX_REPO_PATH" ]]; then - echo "$CTX CODEX_REPO_PATH not set in .env, aborting!" +# Make sure we have the admin seed in env so modelIDs make sense +CERAMIC_ADMIN_SEED=$(grep "CERAMIC_ADMIN_SEED" .env | cut -d"=" -f2) +if [[ -z "$CERAMIC_ADMIN_SEED" ]]; then + echo "$CTX CERAMIC_ADMIN_SEED must be set in env, as the modelID's aren't deterministic otherwise." exit 1 -else - echo "$CTX Found codex repo path: $CODEX_REPO_PATH" fi -# Assert ceramic service is running +# Check if ceramic service is already running +WAS_RUNNING=0 RUNNING_SERVICES=$(docker compose --project-name desci ps --services) if ! grep -q ceramic <<<"$RUNNING_SERVICES"; then - echo "$CTX the ceramic compose service doesn't seem to be running, aborting!" - exit 1 + echo "$CTX the ceramic compose service doesn't seem to be running, starting..." + docker compose \ + -f docker-compose.dev.yml \ + -f docker-compose.yml \ + --project-name desci \ + up ceramic \ + --detach + sleep 5 +else + echo "$CTX Ceramic service already running, won't touch compose services..." + WAS_RUNNING=1 fi -# Setup desci-codex and deploy composites -pushd "$CODEX_REPO_PATH" +echo "$CTX Downloading the runtime definition file for the composeDB models..." +curl -L --output .composedbRuntimeDefinition.json \ + https://raw.githubusercontent.com/desci-labs/desci-codex/main/packages/composedb/src/__generated__/definition.json -# Check that the node admin secret is set up, otherwise the model ID's wont be correct -if [ ! -f "packages/composedb/admin_seed.txt" ]; then - echo "$CTX Composites need to be deployed with the ceramic node admin seed for the local node, as the model IDs aren't deterministic otherwise" - exit 1 -fi +echo "$CTX Deploying composites to ceramic node..." +npx --yes @composedb/cli composite:deploy \ + .composedbRuntimeDefinition.json \ + --ceramic-url="http://localhost:7007" \ + --did-private-key="$CERAMIC_ADMIN_SEED" -if [[ ! -d "node_modules" ]]; then - echo "$CTX installing deps desci-codex..." - npm ci -fi +sleep 5 +echo "$CTX Deployment all good, probably!" -echo "$CTX deploying composites..." -npm run --workspace packages/composedb deployComposites -popd +if [ "$WAS_RUNNING" -eq "0" ]; then + echo "$CTX Shutting down ceramic service..." + docker compose --project-name desci down +else + echo "$CTX Leaving compose services up as they were already running when we started." +fi -echo "$CTX Done! Re-run this script if local state is cleaned." +echo "$CTX Done! You need to run me again if local data is wiped." diff --git a/desci-server/src/scripts/seed-social-data.ts b/desci-server/src/scripts/seed-social-data.ts index 71e90f6de..9d0fe3a47 100644 --- a/desci-server/src/scripts/seed-social-data.ts +++ b/desci-server/src/scripts/seed-social-data.ts @@ -219,6 +219,6 @@ if (process.env.RUN) { .then(() => console.log('Communities and Attestations created/updated')) .catch((err) => console.log('Error running script ', err)); } else { - console.log('Must set RUN=1'); + console.log('Must set RUN=1 to activate seeding of social data, skipping...'); process.exit(0); } diff --git a/dockerDev.sh b/dockerDev.sh index 9183c0486..7913c9915 100755 --- a/dockerDev.sh +++ b/dockerDev.sh @@ -60,6 +60,10 @@ for volDir in $(grep -o "local-data/[a-z_]*" docker-compose.dev.yml); do mkdir -p "$volDir" done +# Start the ceramic service and it's dependencies to deploy models, before +# kicking off the rest of the cluster +./bootstrapCeramic.sh + # Default to empty if unset ADDITIONAL_FLAGS=${ADDITIONAL_FLAGS:-""} echo "[dockerDev] PWD=$PWD" From f8509a5776de0f517149b773168aa8bae7430770 Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 5 Apr 2024 02:00:41 +0700 Subject: [PATCH 046/141] build fix --- .../nodes/contributions/getUserContributionsAuthed.ts | 5 +++-- desci-server/src/services/Contributors.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts b/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts index e5fd5a221..64f897ce7 100644 --- a/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts +++ b/desci-server/src/controllers/nodes/contributions/getUserContributionsAuthed.ts @@ -1,8 +1,9 @@ import { Request, Response } from 'express'; import { logger as parentLogger } from '../../../logger.js'; -import { NodeContributorMap, UserContribution, contributorService } from '../../../services/Contributors.js'; -import { User } from '@sentry/node'; +import { NodeContributorMap, contributorService } from '../../../services/Contributors.js'; +import { User } from '@prisma/client'; + export type GetNodeContributionsAuthedRequest = Request & { user: User; // Added by the ensureUser middleware diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 864a2396a..ebe1c2b2c 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -207,7 +207,7 @@ class ContributorService { { orcid: user.orcid } ] }, - include: { node: true }, + include: { node: true, user: true }, }); return contributions.reduce((acc, contributor) => { acc[contributor.contributorId] = { From 5fec94e2f05b7840298393a68e2a8a2ce0d8cd3b Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 5 Apr 2024 02:48:46 +0700 Subject: [PATCH 047/141] fix verification logic to also allow verif via userid added --- desci-server/src/services/Contributors.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index ebe1c2b2c..c4dba9a66 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -226,7 +226,7 @@ class ContributorService { const contribution = await prisma.nodeContribution.findUnique({ where: { contributorId } }); if (!contribution) throw Error('Invalid contributorId'); - const contributionPointsToUser = contribution.email === user.email || contribution.orcid === user.orcid; + const contributionPointsToUser = contribution.email === user.email || contribution.orcid === user.orcid || contribution.userId === user.id; if (!contributionPointsToUser) throw Error('Unauthorized to verify contribution'); const userHasOrcidValidated = user.orcid !== undefined && user.orcid !== null; From 378b55397449fea317861eda6f2ea385d705dfa2 Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 5 Apr 2024 13:24:06 +0700 Subject: [PATCH 048/141] prevent route collision --- desci-server/src/routes/v1/nodes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/src/routes/v1/nodes.ts b/desci-server/src/routes/v1/nodes.ts index 07547e20f..00d843939 100755 --- a/desci-server/src/routes/v1/nodes.ts +++ b/desci-server/src/routes/v1/nodes.ts @@ -70,11 +70,11 @@ router.post('/documents/:uuid/actions', [ensureUser, ensureNodeAccess], dispatch router.get('/thumbnails/:uuid/:manifestCid?', [attachUser], thumbnails); router.post('/contributions/node/:uuid', [attachUser], getNodeContributions); router.post('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], addContributor); +router.patch('/contributions/verify', [ensureUser], verifyContribution); router.patch('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], updateContributor); router.delete('/contributions/:uuid', [ensureUser, ensureWriteNodeAccess], deleteContributor); router.get('/contributions/user/:userId', [], getUserContributions); router.get('/contributions/user', [ensureUser], getUserContributionsAuthed); -router.patch('/contributions/verify', [ensureUser], verifyContribution); router.delete('/:uuid', [ensureUser], deleteNode); From 378278a0349f89ad8918f0332baae4815dd7f67d Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 8 Apr 2024 14:53:16 +0200 Subject: [PATCH 049/141] contracts: fix npm package to allow use under node10 resolution in webpack --- desci-contracts/.gitignore | 1 + desci-contracts/index.ts | 16 ++++++++++++++++ desci-contracts/package.json | 9 +++++---- desci-contracts/tsconfig.json | 19 +++++++++++++++++++ 4 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 desci-contracts/index.ts create mode 100644 desci-contracts/tsconfig.json diff --git a/desci-contracts/.gitignore b/desci-contracts/.gitignore index 23b10a997..d3767f7da 100644 --- a/desci-contracts/.gitignore +++ b/desci-contracts/.gitignore @@ -11,3 +11,4 @@ build .openzeppelin/migration-complete.json *.dbg.json flat.sol +dist diff --git a/desci-contracts/index.ts b/desci-contracts/index.ts new file mode 100644 index 000000000..3a0f4b785 --- /dev/null +++ b/desci-contracts/index.ts @@ -0,0 +1,16 @@ +export * as typechain from "./typechain-types/index.js"; +import localRoInfo from "./.openzeppelin/unknown-research-object.json"; +import localDpidInfo from "./.openzeppelin/unknown-dpid.json"; +import devRoInfo from "./.openzeppelin/sepoliaDev-research-object.json"; +import devDpidInfo from "./.openzeppelin/sepoliaDev-dpid.json"; +import prodRoInfo from "./.openzeppelin/sepoliaProd-research-object.json"; +import prodDpidInfo from "./.openzeppelin/sepoliaProd-dpid.json"; + +export const contracts = { + localRoInfo, + localDpidInfo, + devRoInfo, + devDpidInfo, + prodRoInfo, + prodDpidInfo, +}; diff --git a/desci-contracts/package.json b/desci-contracts/package.json index bcacbd224..3b894c899 100644 --- a/desci-contracts/package.json +++ b/desci-contracts/package.json @@ -1,11 +1,11 @@ { "name": "@desci-labs/desci-contracts", "description": "Smart contracts implementing DeSci Nodes on-chain state and logic", - "version": "0.2.3-rc1", + "version": "0.2.3-rc3", "license": "MIT", "scripts": { "test": "hardhat clean && hardhat test", - "build": "hardhat compile --network ganache", + "build": "hardhat compile --network ganache && rm -rf dist && tsc && cp -r .openzeppelin dist", "docker:build": "docker build -t desci-hardhat-node .", "docker:push": "docker tag desci-hardhat-node:latest 523044037273.dkr.ecr.us-east-2.amazonaws.com/desci-hardhat-node:latest && docker push 523044037273.dkr.ecr.us-east-2.amazonaws.com/desci-hardhat-node:latest", "deploy:ganache": "yarn stubHardhatAnalytics && hardhat run scripts/deployResearchObject.js --network ganache", @@ -24,9 +24,10 @@ "flatten": "hardhat flatten > temp_flat.sol && awk '!/SPDX_License_Identifier/' temp_flat.sol > flat.sol && rm temp_flat.sol" }, "files": [ - "/.openzeppelin", - "/typechain-types" + "dist" ], + "main": "dist/index.js", + "types": "dist/index.d.ts", "devDependencies": { "@graphprotocol/graph-cli": "^0.59.0", "@graphprotocol/graph-ts": "^0.32.0", diff --git a/desci-contracts/tsconfig.json b/desci-contracts/tsconfig.json new file mode 100644 index 000000000..2551ad7c6 --- /dev/null +++ b/desci-contracts/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "module": "nodenext", + "target": "es2020", + "strict": true, + + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + + "outDir": "dist" + }, + "include": [ + "index.ts", + ".openzeppelin/*.json", + "typechain-types/**/*.ts" + ] +} From 7795cee55484c5bee4b0f2e8fc4cb925d24ef54a Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 8 Apr 2024 14:54:33 +0200 Subject: [PATCH 050/141] nodeslib: use new contract package --- nodes-lib/package-lock.json | 18 ++++++------- nodes-lib/package.json | 7 +++-- nodes-lib/src/config/chain.ts | 50 +++++++++++++---------------------- 3 files changed, 30 insertions(+), 45 deletions(-) diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json index 912891eb8..a82f98a3c 100644 --- a/nodes-lib/package-lock.json +++ b/nodes-lib/package-lock.json @@ -1,16 +1,16 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc3", + "version": "0.0.5-rc5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc3", + "version": "0.0.5-rc5", "license": "MIT", "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", - "@desci-labs/desci-contracts": "^0.2.3-rc1", + "@desci-labs/desci-contracts": "^0.2.3-rc3", "@desci-labs/desci-models": "^0.2.3-rc1", "@didtools/cacao": "^3.0.1", "@didtools/pkh-ethereum": "^0.5.0", @@ -1010,9 +1010,9 @@ } }, "node_modules/@desci-labs/desci-contracts": { - "version": "0.2.3-rc1", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc1.tgz", - "integrity": "sha512-rUFVQuebhh2i8HAt9Bxkk41rQ7wD1bBzRCSRg6u51knjnPnd4gf4WWjZJDkpZEvVBGWcBODN598WtOlT8JGPhg==" + "version": "0.2.3-rc3", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc3.tgz", + "integrity": "sha512-3OmnrMa+L9qK/iNkuPS2HS/ihsNFKly3X8vjQK0cHhTH2qh6/FBbcIK77uOF9yi0ldOm+VfPSL2p7s8BC+bKow==" }, "node_modules/@desci-labs/desci-models": { "version": "0.2.3-rc1", @@ -11011,9 +11011,9 @@ } }, "@desci-labs/desci-contracts": { - "version": "0.2.3-rc1", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc1.tgz", - "integrity": "sha512-rUFVQuebhh2i8HAt9Bxkk41rQ7wD1bBzRCSRg6u51knjnPnd4gf4WWjZJDkpZEvVBGWcBODN598WtOlT8JGPhg==" + "version": "0.2.3-rc3", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-contracts/-/desci-contracts-0.2.3-rc3.tgz", + "integrity": "sha512-3OmnrMa+L9qK/iNkuPS2HS/ihsNFKly3X8vjQK0cHhTH2qh6/FBbcIK77uOF9yi0ldOm+VfPSL2p7s8BC+bKow==" }, "@desci-labs/desci-models": { "version": "0.2.3-rc1", diff --git a/nodes-lib/package.json b/nodes-lib/package.json index 968dd39bf..ad1e1bb67 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc4", + "version": "0.0.5-rc6", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { @@ -16,8 +16,7 @@ "types": "dist/index.d.ts", "type": "module", "files": [ - "/dist", - "/.env.example" + "dist" ], "scripts": { "build": "rm -r dist; tsc --project tsconfig.build.json", @@ -28,7 +27,7 @@ }, "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", - "@desci-labs/desci-contracts": "^0.2.3-rc1", + "@desci-labs/desci-contracts": "^0.2.3-rc3", "@desci-labs/desci-models": "^0.2.3-rc1", "@didtools/cacao": "^3.0.1", "@didtools/pkh-ethereum": "^0.5.0", diff --git a/nodes-lib/src/config/chain.ts b/nodes-lib/src/config/chain.ts index 852579643..627d3bd5e 100644 --- a/nodes-lib/src/config/chain.ts +++ b/nodes-lib/src/config/chain.ts @@ -1,65 +1,51 @@ -import { - DpidRegistry, - DpidRegistry__factory, - ResearchObject, - ResearchObjectV2, - ResearchObjectV2__factory, - ResearchObject__factory -} from "@desci-labs/desci-contracts/typechain-types/index.js"; +import { contracts, typechain as tc } from "@desci-labs/desci-contracts"; import { Signer, providers } from "ethers"; import { type NodesEnv } from "./index.js"; -import localRoInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-research-object.json" assert { type: "json"}; -import localDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/unknown-dpid.json" assert { type: "json"}; -import devRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-research-object.json" assert { type: "json"}; -import devDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaDev-dpid.json" assert { type: "json"}; -import prodRoInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-research-object.json" assert { type: "json"}; -import prodDpidInfo from "@desci-labs/desci-contracts/.openzeppelin/sepoliaProd-dpid.json" assert { type: "json"}; - export type NodesContract = - | ResearchObject - | ResearchObjectV2 - | DpidRegistry; + | tc.ResearchObject + | tc.ResearchObjectV2 + | tc.DpidRegistry; export type ContractConnector = (signerOrProvider: Signer | providers.Provider) => T; export type ChainConfig = { rpcUrl: string, - researchObjectConnector: ContractConnector, - dpidRegistryConnector: ContractConnector, + researchObjectConnector: ContractConnector, + dpidRegistryConnector: ContractConnector, }; export const CHAIN_CONFIGS = { local: { rpcUrl: "http://localhost:8545", - researchObjectConnector: signerOrProvider => ResearchObject__factory.connect( - localRoInfo.proxies.at(0)!.address, + researchObjectConnector: signerOrProvider => tc.ResearchObject__factory.connect( + contracts.localRoInfo.proxies.at(0)!.address, signerOrProvider ), - dpidRegistryConnector: signerOrProvider => DpidRegistry__factory.connect( - localDpidInfo.proxies.at(0)!.address, + dpidRegistryConnector: signerOrProvider => tc.DpidRegistry__factory.connect( + contracts.localDpidInfo.proxies.at(0)!.address, signerOrProvider ), }, dev: { rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", - researchObjectConnector: signerOrProvider => ResearchObjectV2__factory.connect( - devRoInfo.proxies.at(0)!.address, + researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( + contracts.devRoInfo.proxies.at(0)!.address, signerOrProvider ), - dpidRegistryConnector: signerOrProvider => DpidRegistry__factory.connect( - devDpidInfo.proxies.at(0)!.address, + dpidRegistryConnector: signerOrProvider => tc.DpidRegistry__factory.connect( + contracts.devDpidInfo.proxies.at(0)!.address, signerOrProvider ), }, prod: { rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", - researchObjectConnector: signerOrProvider => ResearchObjectV2__factory.connect( - prodRoInfo.proxies.at(0)!.address, + researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( + contracts.prodRoInfo.proxies.at(0)!.address, signerOrProvider ), - dpidRegistryConnector: signerOrProvider => DpidRegistry__factory.connect( - prodDpidInfo.proxies.at(0)!.address, + dpidRegistryConnector: signerOrProvider => tc.DpidRegistry__factory.connect( + contracts.prodDpidInfo.proxies.at(0)!.address, signerOrProvider ), }, From 417c504ea56752ea2dd140956c7fca6fa7e1ed7e Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 8 Apr 2024 17:40:47 +0200 Subject: [PATCH 051/141] nicer warning on env misconfiguration in bootstrapCeramic.sh --- bootstrapCeramic.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bootstrapCeramic.sh b/bootstrapCeramic.sh index 6666334aa..04debf3ee 100755 --- a/bootstrapCeramic.sh +++ b/bootstrapCeramic.sh @@ -10,12 +10,14 @@ # There is no damage trying to run this multiple times in a row; it's # idempotent. +set -euo pipefail + CTX="[bootstrapCeramic.sh]" +WAS_RUNNING=0 -set -euo pipefail trap catch ERR catch() { - echo "$CTX script failed" + echo "$CTX script failed! Have you set CERAMIC_ADMIN_SEED in .env?" if [ "$WAS_RUNNING" -eq "0" ]; then docker compose --project-name desci down fi From ef11457f2097d08f534b6959acb50cbccfe64d00 Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 8 Apr 2024 17:41:24 +0200 Subject: [PATCH 052/141] nodeslib: try to pull auth token from localstorage if running in browser setting --- nodes-lib/package.json | 2 +- nodes-lib/src/routes.ts | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/nodes-lib/package.json b/nodes-lib/package.json index ad1e1bb67..30806c79f 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc6", + "version": "0.0.5-rc8", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { diff --git a/nodes-lib/src/routes.ts b/nodes-lib/src/routes.ts index ddafc2b1a..e49322144 100644 --- a/nodes-lib/src/routes.ts +++ b/nodes-lib/src/routes.ts @@ -1,4 +1,4 @@ -import axios, { AxiosError, AxiosResponse } from "axios"; +import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from "axios"; import { ENDPOINTS } from "./api.js"; import { getNodesLibInternalConfig } from "./config/index.js"; @@ -36,17 +36,26 @@ export async function makeRequest< ): Promise { const url = getNodesLibInternalConfig().apiUrl + endpoint.route + (routeTail ?? ""); let res: AxiosResponse; + const config: AxiosRequestConfig = { + headers, + withCredentials: true, + }; + + if (window !== undefined && localStorage.getItem("auth")) { + config.headers!.Authorization = `Bearer ${localStorage.getItem("auth")}`; + }; + // post is the only method that takes a data payload - if ( endpoint.method === "post") { + if (endpoint.method === "post") { res = await axios[endpoint.method]( url, payload, - { headers, withCredentials: true }, + config, ); } else { res = await axios[endpoint.method]( url, - { headers, withCredentials: true }, + config, ); }; return res.data; From 8b137a5aee59377cb94a776fe5a5695add1e4356 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 9 Apr 2024 08:34:53 +0200 Subject: [PATCH 053/141] contracts: split package build and contract compilation for CI, tidy readme --- desci-contracts/README.md | 63 +++++++++++++++++------------------- desci-contracts/package.json | 3 +- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/desci-contracts/README.md b/desci-contracts/README.md index 49dac41ce..430464c92 100644 --- a/desci-contracts/README.md +++ b/desci-contracts/README.md @@ -1,36 +1,15 @@ -# Migrating from goerli to local and sepolia - -``` -# Perform DPID migration to LOCALHOST (ganache) -npx hardhat run scripts/migrateToNewContract.js --network ganache - -# Deploy to SEPOLIA. Ensure PRIVATE_KEY is set with wallet containing enough sepolia eth -npx hardhat run scripts/migrateToNewContract.js --network sepoliaDev -``` +# DeSci Labs smart contract suite +This package holds the contracts backing DeSci Nodes and the dPID protocol. # Running Locally -====================== - -# Step 1: Start local chain (Only if making contract changes locally, otherwise you can point to Kovan testnet) - -======================================================== - -# Run local Optimism Docker (network: optimistic) +*Note: all of the steps below are performed automatically as part of the local development cluster setup in the monorepo root, `dockerDev.sh`.* -Make sure local Docker Desktop app is running -Instructions: https://community.optimism.io/docs/developers/build/dev-node/ +# Step 1: Start local chain -``` -# the command to start (in the optimism/ops folder) -docker-compose -f docker-compose-nobuild.yml up - -# in separate tab (in the optimism/ops folder) -scripts/wait-for-sequencer.sh && echo "System is ready to accept transactions" -``` +In the main docker compose dev cluster we use Ganache, and some deployment scripts may assume keys and addresses based off those assumptions. -L1 (Ethereum) node: http://localhost:9545 -L2 (Optimism) node: http://localhost:8545 +Ethereum node: http://localhost:8545 # Step 2: Deploy new version of contracts locally @@ -42,8 +21,8 @@ npx hardhat run scripts/deployResearchObject.js --network ganache npx hardhat run scripts/upgradeResearchObject.js --network ganache ``` -Contract addresses are stored in .openzeppelin/unknown-CHAINID.json (or mainnet.json for known chains) -ABIs are stored in artifacts/ResearchObject.sol/ResearchObject.json +Contract addresses are stored in `.openzeppelin/unknown-CHAINID.json` (or `mainnet.json` for known chains) +ABIs are stored in `artifacts/ResearchObject.sol/ResearchObject.json`. # Step 3 (Optional): Deploy to staging (running our own private test chain) @@ -63,12 +42,28 @@ npx hardhat flatten # TypeScript / TypeChain -``` -npx hardhat typechain +To compile contracts and generate typechain outputs, run the `build` script: + +```shell +npm run build ``` -You should see TypeScript support for the contracts (i.e. ResearchObject, etc) for Hardhat Tests and anywhere the contract is called (desci-dapp, desci-server, contract tests) +You should see TypeScript support for the contracts (i.e. ResearchObject & dPID Registry) for Hardhat Tests and anywhere the contract is called (desci-dapp, desci-server, contract tests) To support IDE autocompletion of smart contract calls from TypeScript we use TypeChain to generate types -These types are shipped to desci-contracts/typechain-types as specified in hardhat.config.ts +These types are shipped to desci-contracts/typechain-types as specified in hardhat.config.ts. + +Because the local deployment files are only present locally, building the [npm package](https://www.npmjs.com/package/@desci-labs/desci-contracts) is done with a separate command: + +```shell +npm run makePackage +``` + +# Migrating from goerli to local and sepolia -TODO: desci-dapp expects these types in desci-dapp/src/hardhat/@types. You may need to manually copy these types to desci-dapp and desci-server, or wherever the types are used +``` +# Perform DPID migration to LOCALHOST (ganache) +npx hardhat run scripts/migrateToNewContract.js --network ganache + +# Deploy to SEPOLIA. Ensure PRIVATE_KEY is set with wallet containing enough sepolia eth +npx hardhat run scripts/migrateToNewContract.js --network sepoliaDev +``` diff --git a/desci-contracts/package.json b/desci-contracts/package.json index 3b894c899..d52bbebf3 100644 --- a/desci-contracts/package.json +++ b/desci-contracts/package.json @@ -5,7 +5,8 @@ "license": "MIT", "scripts": { "test": "hardhat clean && hardhat test", - "build": "hardhat compile --network ganache && rm -rf dist && tsc && cp -r .openzeppelin dist", + "build": "hardhat compile --network ganache", + "makePackage": "rm -rf dist && tsc && cp -r .openzeppelin dist", "docker:build": "docker build -t desci-hardhat-node .", "docker:push": "docker tag desci-hardhat-node:latest 523044037273.dkr.ecr.us-east-2.amazonaws.com/desci-hardhat-node:latest && docker push 523044037273.dkr.ecr.us-east-2.amazonaws.com/desci-hardhat-node:latest", "deploy:ganache": "yarn stubHardhatAnalytics && hardhat run scripts/deployResearchObject.js --network ganache", From 2282cd377fe8bf63c1156fcfc2b32db7f0533d23 Mon Sep 17 00:00:00 2001 From: kadami Date: Wed, 10 Apr 2024 20:16:06 +0000 Subject: [PATCH 054/141] local dep fixes --- desci-server/scripts/be-node-dev.sh | 2 +- docker-compose.dev.yml | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index f01296753..3a7941689 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -4,7 +4,7 @@ apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 73c0a8ba2..a3d5e1766 100755 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -72,9 +72,6 @@ services: volumes: - ./local-data/yarn_cache:/root/.yarn # mem_limit: 2g #uncomment to test large data with limited memory - networks: - - default - - isolated block_explorer_dev: image: sinaiman/expedition-dev:latest @@ -211,8 +208,6 @@ services: ports: - "9777:9777" # debugger # - "7771:7771" # Uncomment if you want to test the media server from the host machine - networks: - - isolated # desci_nodes_backend_test: # container_name: 'be_test_boilerplate' @@ -229,7 +224,3 @@ services: # volumes: # - .:/app/ # - /app/node_modules - -networks: - isolated: - driver: bridge From 771d6ffe55eb39af2f4d02d433a134316e17e0d3 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 11 Apr 2024 12:59:27 +0200 Subject: [PATCH 055/141] enhance publish worker logs and add new env for MAX_LOCK_TIME --- .env.example | 5 ++- desci-server/kubernetes/deployment_dev.yaml | 1 + desci-server/kubernetes/deployment_prod.yaml | 1 + .../kubernetes/deployment_staging.yaml | 1 + desci-server/src/redisClient.ts | 9 ++++- desci-server/src/types/ProcessEnv.d.ts | 1 + desci-server/src/workers/publish.ts | 37 +++++++------------ 7 files changed, 29 insertions(+), 26 deletions(-) diff --git a/.env.example b/.env.example index cc22a2643..86bb421bf 100755 --- a/.env.example +++ b/.env.example @@ -117,4 +117,7 @@ ETHEREUM_RPC_URL=http://host.docker.internal:8545 # Use this for Sepolia testnet # ETHEREUM_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/demo -DPID_URL_OVERRIDE=https://dev-beta.dpid.org \ No newline at end of file +DPID_URL_OVERRIDE=https://dev-beta.dpid.org + +# SingleNodeLockServce +MAX_LOCK_TIME=3600 # 1 hour \ No newline at end of file diff --git a/desci-server/kubernetes/deployment_dev.yaml b/desci-server/kubernetes/deployment_dev.yaml index 4349fc742..57f8255c2 100644 --- a/desci-server/kubernetes/deployment_dev.yaml +++ b/desci-server/kubernetes/deployment_dev.yaml @@ -79,6 +79,7 @@ spec: export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} export DEBUG_TEST=0; + export MAX_LOCK_TIME={{ .Data.MAX_LOCK_TIME }} echo "appfinish"; {{- end -}} labels: diff --git a/desci-server/kubernetes/deployment_prod.yaml b/desci-server/kubernetes/deployment_prod.yaml index 8cc357a22..dee79ae93 100755 --- a/desci-server/kubernetes/deployment_prod.yaml +++ b/desci-server/kubernetes/deployment_prod.yaml @@ -80,6 +80,7 @@ spec: export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} export IGNORE_LINE=0; export DEBUG_TEST=0; + export MAX_LOCK_TIME={{ .Data.MAX_LOCK_TIME }} echo "appfinish"; {{- end -}} labels: diff --git a/desci-server/kubernetes/deployment_staging.yaml b/desci-server/kubernetes/deployment_staging.yaml index 10b77a57b..ab436aaa4 100644 --- a/desci-server/kubernetes/deployment_staging.yaml +++ b/desci-server/kubernetes/deployment_staging.yaml @@ -91,6 +91,7 @@ spec: export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} export DEBUG_TEST=0; + export MAX_LOCK_TIME={{ .Data.MAX_LOCK_TIME }} echo "appfinish"; {{- end -}} labels: diff --git a/desci-server/src/redisClient.ts b/desci-server/src/redisClient.ts index 9d604c883..8486e21ef 100644 --- a/desci-server/src/redisClient.ts +++ b/desci-server/src/redisClient.ts @@ -1,8 +1,13 @@ +import os from 'os'; + import { createClient } from 'redis'; import { logger as parentLogger } from './logger.js'; + +const hostname = os.hostname(); const logger = parentLogger.child({ module: 'RedisClient', + hostname, }); const redisClient = createClient({ @@ -99,7 +104,7 @@ export async function getOrCache(key: string, fn: () => Promise, ttl = DEF class SingleNodeLockService { private isReady: boolean; - private MAX_LOCK_TIME = 60 * 60; // 1 hour + private MAX_LOCK_TIME = process.env.MAX_LOCK_TIME ? parseInt(process.env.MAX_LOCK_TIME) : 60 * 60; // 1 hour private activeLocks: Set; constructor() { @@ -119,7 +124,7 @@ class SingleNodeLockService { logger.info({ ready: this.isReady, open: redisClient.isOpen }, 'START ACQUIRE LOCK'); if (!this.isReady) return false; const result = await redisClient.set(key, 'true', { NX: true, EX: lockTime }); - logger.info({ result, key }, ' END ACQUIRE LOCK'); + logger.info({ result, key }, 'END ACQUIRE LOCK'); if (result) { this.activeLocks.add(key); return true; diff --git a/desci-server/src/types/ProcessEnv.d.ts b/desci-server/src/types/ProcessEnv.d.ts index 8c3403c80..1baa0a7f6 100755 --- a/desci-server/src/types/ProcessEnv.d.ts +++ b/desci-server/src/types/ProcessEnv.d.ts @@ -9,5 +9,6 @@ declare namespace NodeJS { POSTGRES_DB: string; JWT_SECRET: string; JWT_EXPIRATION: string; + MAX_LOCK_TIME: string; } } diff --git a/desci-server/src/workers/publish.ts b/desci-server/src/workers/publish.ts index 806cfa5f9..9fe5785c9 100644 --- a/desci-server/src/workers/publish.ts +++ b/desci-server/src/workers/publish.ts @@ -1,3 +1,5 @@ +import os from 'os'; + import { PublishTaskQueue, PublishTaskQueueStatus } from '@prisma/client'; import { ethers } from 'ethers'; @@ -5,7 +7,6 @@ import { prisma } from '../client.js'; import { publishHandler } from '../controllers/nodes/publish.js'; import { logger as parentLogger } from '../logger.js'; import { lockService } from '../redisClient.js'; -import { randomUUID64 } from '../utils.js'; enum ProcessOutcome { EmptyQueue, @@ -17,27 +18,19 @@ const ETHEREUM_RPC_URL = process.env.ETHEREUM_RPC_URL || 'http://host.docker.int if (!ETHEREUM_RPC_URL) throw new Error('Env var` ETHEREUM_RPC_URL` not set'); -const logger = parentLogger.child({ module: 'PUBLISH WORKER ' }); +const hostname = os.hostname(); +const logger = parentLogger.child({ module: 'PUBLISH WORKER', hostname }); const checkTransaction = async (transactionId: string, uuid: string) => { const provider = ethers.getDefaultProvider(ETHEREUM_RPC_URL); - logger.info( - { - uuid, - transactionId, - ETHEREUM_RPC_URL, - }, - 'TX::check transaction', - ); - console.log('NETWORK', await provider.getNetwork()); const tx = await provider.getTransactionReceipt(transactionId); - console.log('TX::Receipt', { tx }); + logger.info({ tx, uuid, transactionId, ETHEREUM_RPC_URL, network: await provider.getNetwork() }, 'TX::Receipt'); return tx?.status; }; -async function processPublishQueue(workerId = '') { - const task = await dequeueTask(workerId); +async function processPublishQueue() { + const task = await dequeueTask(); if (!task) return ProcessOutcome.EmptyQueue; try { @@ -63,7 +56,7 @@ async function processPublishQueue(workerId = '') { data: { status: PublishTaskQueueStatus.PENDING }, }); lockService.freeLock(task.transactionId); - logger.info({ txStatus }, 'PUBLISH TX Might be stuck'); + logger.info({ txStatus, task }, 'PUBLISH TX STILL PENDING'); } return ProcessOutcome.TaskCompleted; } catch (err) { @@ -74,22 +67,22 @@ async function processPublishQueue(workerId = '') { } } -const dequeueTask = async (workerId = '') => { +const dequeueTask = async () => { let nextTask: PublishTaskQueue; let tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.WAITING }, take: 5 }); if (!tasks.length) { tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.PENDING }, take: 5 }); } - logger.info({ tasks, workerId }, 'TASKS'); + logger.info({ tasks }, 'TASKS'); for (const task of tasks) { const taskLock = await lockService.aquireLock(task.transactionId); - logger.info({ taskLock, task, workerId }, 'ATTEMPT TO ACQUIRE LOCK'); + logger.info({ taskLock, task }, 'ATTEMPT TO ACQUIRE LOCK'); if (taskLock) { nextTask = task; break; } } - logger.info({ nextTask, workerId }, 'DEQUEUE TASK'); + logger.info({ nextTask }, 'DEQUEUE TASK'); return nextTask; }; @@ -98,11 +91,9 @@ const delay = async (timeMs: number) => { }; export async function runWorkerUntilStopped() { - // TODO: use server instance k8s pod id - const workerId = randomUUID64(); while (true) { - const outcome = await processPublishQueue(workerId); - logger.info({ outcome, workerId }, 'Processed Queue'); + const outcome = await processPublishQueue(); + logger.info({ outcome }, 'Processed Queue'); switch (outcome) { case ProcessOutcome.EmptyQueue: await delay(10000); From 882713f7dca746fb58ca51e5208bcf315be88520 Mon Sep 17 00:00:00 2001 From: kadami Date: Thu, 11 Apr 2024 19:51:47 +0000 Subject: [PATCH 056/141] add env to mute publish worker logs --- .env.example | 5 ++++- desci-server/src/workers/publish.ts | 27 ++++++++++++++------------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/.env.example b/.env.example index cc22a2643..da73353ad 100755 --- a/.env.example +++ b/.env.example @@ -117,4 +117,7 @@ ETHEREUM_RPC_URL=http://host.docker.internal:8545 # Use this for Sepolia testnet # ETHEREUM_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/demo -DPID_URL_OVERRIDE=https://dev-beta.dpid.org \ No newline at end of file +DPID_URL_OVERRIDE=https://dev-beta.dpid.org + +# Set to true if you want to mute the publish worker in local dev +MUTE_PUBLISH_WORKER=false \ No newline at end of file diff --git a/desci-server/src/workers/publish.ts b/desci-server/src/workers/publish.ts index 806cfa5f9..a02008b61 100644 --- a/desci-server/src/workers/publish.ts +++ b/desci-server/src/workers/publish.ts @@ -21,14 +21,15 @@ const logger = parentLogger.child({ module: 'PUBLISH WORKER ' }); const checkTransaction = async (transactionId: string, uuid: string) => { const provider = ethers.getDefaultProvider(ETHEREUM_RPC_URL); - logger.info( - { - uuid, - transactionId, - ETHEREUM_RPC_URL, - }, - 'TX::check transaction', - ); + if (!process.env.MUTE_PUBLISH_WORKER) + logger.info( + { + uuid, + transactionId, + ETHEREUM_RPC_URL, + }, + 'TX::check transaction', + ); console.log('NETWORK', await provider.getNetwork()); const tx = await provider.getTransactionReceipt(transactionId); @@ -45,7 +46,7 @@ async function processPublishQueue(workerId = '') { if (txStatus === 1) { publishHandler(task) .then(async (published) => { - logger.info({ task, published }, 'PUBLISH HANDLER SUCCESS'); + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ task, published }, 'PUBLISH HANDLER SUCCESS'); lockService.freeLock(task.transactionId); }) .catch((err) => { @@ -56,7 +57,7 @@ async function processPublishQueue(workerId = '') { } else if (txStatus === 0) { await prisma.publishTaskQueue.update({ where: { id: task.id }, data: { status: PublishTaskQueueStatus.FAILED } }); lockService.freeLock(task.transactionId); - logger.info({ txStatus }, 'PUBLISH TX FAILED'); + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ txStatus }, 'PUBLISH TX FAILED'); } else { await prisma.publishTaskQueue.update({ where: { id: task.id }, @@ -80,7 +81,7 @@ const dequeueTask = async (workerId = '') => { if (!tasks.length) { tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.PENDING }, take: 5 }); } - logger.info({ tasks, workerId }, 'TASKS'); + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ tasks, workerId }, 'TASKS'); for (const task of tasks) { const taskLock = await lockService.aquireLock(task.transactionId); logger.info({ taskLock, task, workerId }, 'ATTEMPT TO ACQUIRE LOCK'); @@ -89,7 +90,7 @@ const dequeueTask = async (workerId = '') => { break; } } - logger.info({ nextTask, workerId }, 'DEQUEUE TASK'); + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ nextTask, workerId }, 'DEQUEUE TASK'); return nextTask; }; @@ -102,7 +103,7 @@ export async function runWorkerUntilStopped() { const workerId = randomUUID64(); while (true) { const outcome = await processPublishQueue(workerId); - logger.info({ outcome, workerId }, 'Processed Queue'); + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ outcome, workerId }, 'Processed Queue'); switch (outcome) { case ProcessOutcome.EmptyQueue: await delay(10000); From afb5b93ce5fe1630d8611794bbc3cacd7fae9f9c Mon Sep 17 00:00:00 2001 From: kadami Date: Thu, 11 Apr 2024 21:13:22 +0000 Subject: [PATCH 057/141] wip fix update --- desci-server/src/services/Contributors.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index c4dba9a66..4bc8360d2 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -94,13 +94,15 @@ class ContributorService { let registeredContributor; if (email) registeredContributor = await prisma.user.findUnique({ where: { email } }); if (orcid) registeredContributor = await prisma.user.findUnique({ where: { orcid } }); - if (userId !== undefined || userId !== null) - registeredContributor = await prisma.user.findUnique({ where: { id: userId } }); + debugger; + if (userId) registeredContributor = await prisma.user.findUnique({ where: { id: userId } }); const existingContribution = await prisma.nodeContribution.findFirst({ where: { contributorId, nodeId: node.id }, }); - if (!existingContribution) throw Error('Contribution not found'); + if (!existingContribution) { + return this.addNodeContribution({ node, nodeOwner, contributorId, email, orcid, userId }); + } const currentContributorEmail = existingContribution.email; if (currentContributorEmail !== email) { // Revoke priv share link for old email @@ -201,11 +203,7 @@ class ContributorService { async retrieveUserContributionMap(user: User): Promise { const contributions = await prisma.nodeContribution.findMany({ where: { - OR: [ - { userId: user.id }, - { email: user.email }, - { orcid: user.orcid } - ] + OR: [{ userId: user.id }, { email: user.email }, { orcid: user.orcid }], }, include: { node: true, user: true }, }); @@ -226,7 +224,8 @@ class ContributorService { const contribution = await prisma.nodeContribution.findUnique({ where: { contributorId } }); if (!contribution) throw Error('Invalid contributorId'); - const contributionPointsToUser = contribution.email === user.email || contribution.orcid === user.orcid || contribution.userId === user.id; + const contributionPointsToUser = + contribution.email === user.email || contribution.orcid === user.orcid || contribution.userId === user.id; if (!contributionPointsToUser) throw Error('Unauthorized to verify contribution'); const userHasOrcidValidated = user.orcid !== undefined && user.orcid !== null; From cb090050450ef8e5ef2f28513a0bec5111429b1a Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 12 Apr 2024 09:42:19 +0000 Subject: [PATCH 058/141] fix handling of processes to terminate correctly and allow proper signal transmission for graceful shutdowns --- desci-repo/nodemon.json | 5 +++-- desci-server/nodemon.json | 16 +++++++++++----- desci-server/src/redisClient.ts | 31 ++++++++++++++++++++++++------- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/desci-repo/nodemon.json b/desci-repo/nodemon.json index a1ef42433..3a613cbde 100644 --- a/desci-repo/nodemon.json +++ b/desci-repo/nodemon.json @@ -7,6 +7,7 @@ "log/server.log" ], "verbose": true, - "exec": "npx kill-port 5484 9232; sleep 5; node -r ts-node/register --inspect=0.0.0.0:9232", - "delay": 300 + "exec": "node -r ts-node/register --inspect=0.0.0.0:9232", + "delay": 300, + "signal": "SIGTERM" } \ No newline at end of file diff --git a/desci-server/nodemon.json b/desci-server/nodemon.json index ff4d090d7..efe6946ff 100644 --- a/desci-server/nodemon.json +++ b/desci-server/nodemon.json @@ -1,8 +1,14 @@ { - "watch": ["."], + "watch": [ + "." + ], "ext": ".ts,.js,*", - "ignore": ["log/server.log"], + "ignore": [ + "log/server.log" + ], "verbose": true, - "exec": "npx kill-port 5420 9229; sleep 5; node -r ts-node/register --inspect=0.0.0.0", - "delay": 300 -} + "exec": "node -r ts-node/register --inspect=0.0.0.0", + "delay": 300, + "signal": "SIGTERM", + "exitcrash": true +} \ No newline at end of file diff --git a/desci-server/src/redisClient.ts b/desci-server/src/redisClient.ts index 9d604c883..0b0b31337 100644 --- a/desci-server/src/redisClient.ts +++ b/desci-server/src/redisClient.ts @@ -142,23 +142,40 @@ class SingleNodeLockService { export const lockService = new SingleNodeLockService(); process.on('exit', () => { + logger.info('Process caught exit'); lockService.freeLocks(); redisClient.quit(); }); // catches ctrl+c event process.on('SIGINT', () => { - lockService.freeLocks(); + logger.info('Process caught SIGINT'); + process.exit(1); }); -// catches "kill pid" (for example: nodemon restart) -process.on('SIGUSR1', () => { - lockService.freeLocks(); +process.on('SIGTERM', () => { + logger.info('Process caught SIGTERM'); + process.exit(1); }); + +// probably not used since its normally starting node debugger +// process.on('SIGUSR1', () => { +// logger.info('Process caught SIGUSR1'); +// // process.exit(1); +// }); + +// default kill signal for nodemon process.on('SIGUSR2', () => { - lockService.freeLocks(); + logger.info('Process caught SIGUSR2'); + process.exit(1); }); -process.on('uncaughtException', () => { - lockService.freeLocks(); +process.on('uncaughtException', (err) => { + logger.info({ errMsg: err.message, err }, 'Process caught uncaughtException'); + process.exit(1); +}); + +process.on('unhandledRejection', (reason, promise) => { + logger.info({ promise, reason }, 'Process caught unhandledRejection'); + process.exit(1); }); From 968a69dfd8871c1dbb550c8f5d5e56ec82d2a8d5 Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 12 Apr 2024 10:00:01 +0000 Subject: [PATCH 059/141] dont terminate on exceptions --- desci-server/nodemon.json | 3 +-- desci-server/src/redisClient.ts | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/desci-server/nodemon.json b/desci-server/nodemon.json index efe6946ff..b343dff99 100644 --- a/desci-server/nodemon.json +++ b/desci-server/nodemon.json @@ -9,6 +9,5 @@ "verbose": true, "exec": "node -r ts-node/register --inspect=0.0.0.0", "delay": 300, - "signal": "SIGTERM", - "exitcrash": true + "signal": "SIGTERM" } \ No newline at end of file diff --git a/desci-server/src/redisClient.ts b/desci-server/src/redisClient.ts index 0b0b31337..91be7a380 100644 --- a/desci-server/src/redisClient.ts +++ b/desci-server/src/redisClient.ts @@ -172,10 +172,10 @@ process.on('SIGUSR2', () => { process.on('uncaughtException', (err) => { logger.info({ errMsg: err.message, err }, 'Process caught uncaughtException'); - process.exit(1); + // process.exit(1); }); process.on('unhandledRejection', (reason, promise) => { logger.info({ promise, reason }, 'Process caught unhandledRejection'); - process.exit(1); + // process.exit(1); }); From 8ca17bdd571e601c7518f5ed5688b7d3ef65062c Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 12 Apr 2024 12:13:24 +0200 Subject: [PATCH 060/141] lib: enable early exit from publishing if signer address is wrong --- nodes-lib/package-lock.json | 5 ++-- nodes-lib/package.json | 3 ++- nodes-lib/src/api.ts | 2 ++ nodes-lib/src/chain.ts | 49 ++++++++++++++++++++++++++++------- nodes-lib/src/config/chain.ts | 12 +++++++++ nodes-lib/src/errors.ts | 18 +++++++------ nodes-lib/src/index.ts | 1 + nodes-lib/src/publish.ts | 29 ++++++--------------- 8 files changed, 78 insertions(+), 41 deletions(-) diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json index a82f98a3c..5be63d781 100644 --- a/nodes-lib/package-lock.json +++ b/nodes-lib/package-lock.json @@ -1,12 +1,12 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc5", + "version": "0.0.5-rc9", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc5", + "version": "0.0.5-rc9", "license": "MIT", "dependencies": { "@desci-labs/desci-codex-lib": "^1.1.7-rc0", @@ -27,6 +27,7 @@ "devDependencies": { "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", + "dids": "^5.0.2", "typedoc": "^0.25.8", "typescript": "^5.3.3", "vitest": "^1.2.1", diff --git a/nodes-lib/package.json b/nodes-lib/package.json index 30806c79f..e2ecb9408 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc8", + "version": "0.0.5-rc9", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { @@ -44,6 +44,7 @@ "devDependencies": { "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", + "dids": "^5.0.2", "typedoc": "^0.25.8", "typescript": "^5.3.3", "vitest": "^1.2.1", diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts index 8b70a7cf7..911107d58 100644 --- a/nodes-lib/src/api.ts +++ b/nodes-lib/src/api.ts @@ -332,6 +332,8 @@ export type PublishResponse = { * * @param uuid - UUID of node to publish * @param signer - Signer to use for publish, if not set with env + * @throws (@link WrongOwnerError) if signer address isn't research object token owner + * @throws (@link DpidPublishError) if dPID couldnt be registered or updated */ export const publishDraftNode = async ( uuid: string, diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts index 34a0932b3..7d7f232d5 100644 --- a/nodes-lib/src/chain.ts +++ b/nodes-lib/src/chain.ts @@ -1,8 +1,9 @@ -import { BigNumber, ContractReceipt, Signer, providers } from "ethers"; +import { BigNumber, ContractReceipt, Signer } from "ethers"; import { convertUUIDToHex, convertCidTo0xHex} from "./util/converting.js"; import { changeManifest, prePublishDraftNode, type PrepublishResponse } from "./api.js" import { getNodesLibInternalConfig } from "./config/index.js"; import { formatBytes32String } from "ethers/lib/utils.js"; +import { DpidRegistrationError, DpidUpdateError, WrongOwnerError } from "./errors.js"; const LOG_CTX = "[nodes-lib::chain]" @@ -22,6 +23,9 @@ export type DpidPublishResult = { /** * Publish a node to the dPID registry contract. + * + * @throws (@link WrongOwnerError) if signer address isn't token owner + * @throws (@link DpidPublishError) if dPID couldnt be registered or updated */ export const dpidPublish = async ( uuid: string, @@ -30,15 +34,32 @@ export const dpidPublish = async ( ): Promise => { let reciept: ContractReceipt; let prepubResult: PrepublishResponse; + if (dpidExists) { - console.log(`${LOG_CTX} dpid exists for ${uuid}, updating`); + console.log(`${LOG_CTX} dpid exists for ${uuid}, checking token ownership`); + const signingAddress = (await signer.getAddress()).toLowerCase(); + const researchObjectOwner = await getResearchObjectOwner(uuid, signer); + + if (signingAddress !== researchObjectOwner) { + throw new WrongOwnerError({ + name: "WRONG_OWNER_ERROR", + message: "Credentials do not match the research object token owner", + cause: { expected: researchObjectOwner, actual: signingAddress }, + }); + }; + + console.log(`${LOG_CTX} owner looks OK, trying to update dpid`); try { prepubResult = await prePublishDraftNode(uuid); reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid, signer); } catch(e) { - const err = e as Error; - console.log(`${LOG_CTX} Failed updating dpid for uuid ${uuid}: ${err.message}`); - throw err; + const cause = e as Error; + console.log(`${LOG_CTX} Failed updating dpid for uuid ${uuid}: ${JSON.stringify(cause, undefined, 2)}`); + throw new DpidUpdateError({ + name: "DPID_UPDATE_ERROR", + message: "dPID update failed", + cause, + }); }; } else { console.log(`${LOG_CTX} no dpid found for ${uuid}, registering new`); @@ -47,9 +68,13 @@ export const dpidPublish = async ( reciept = registrationResult.reciept; prepubResult = registrationResult.prepubResult; } catch (e) { - const err = e as Error; - console.log(`${LOG_CTX} Failed registering new dpid for uuid ${uuid}: ${err.message}`); - throw err; + const cause = e as Error; + console.log(`${LOG_CTX} Failed registering new dpid for uuid ${uuid}: ${JSON.stringify(cause, undefined, 2)}`); + throw new DpidRegistrationError({ + name: "DPID_REGISTRATION_ERROR", + message: "dPID registration failed", + cause, + }); }; }; return { prepubResult, reciept }; @@ -131,6 +156,12 @@ const getPreliminaryDpid = async ( export const hasDpid = async ( uuid: string, - signer: Signer + signer: Signer, ): Promise => await researchObjectContract(signer).exists(convertUUIDToHex(uuid)); + +export const getResearchObjectOwner = async ( + uuid: string, + signer: Signer, +): Promise => + (await researchObjectContract(signer).ownerOf(convertUUIDToHex(uuid))).toLowerCase();; diff --git a/nodes-lib/src/config/chain.ts b/nodes-lib/src/config/chain.ts index 627d3bd5e..05802d130 100644 --- a/nodes-lib/src/config/chain.ts +++ b/nodes-lib/src/config/chain.ts @@ -9,14 +9,24 @@ export type NodesContract = export type ContractConnector = (signerOrProvider: Signer | providers.Provider) => T; +export type ChainID = + | "1337" + | "11155111"; + export type ChainConfig = { + /** Decimal chain ID */ + chainId: ChainID, + /** RPC URL to use for communication */ rpcUrl: string, + /** Given a signer or provider, create a contract instance */ researchObjectConnector: ContractConnector, + /** Given a signer or provider, create a contract instance */ dpidRegistryConnector: ContractConnector, }; export const CHAIN_CONFIGS = { local: { + chainId: "1337", rpcUrl: "http://localhost:8545", researchObjectConnector: signerOrProvider => tc.ResearchObject__factory.connect( contracts.localRoInfo.proxies.at(0)!.address, @@ -28,6 +38,7 @@ export const CHAIN_CONFIGS = { ), }, dev: { + chainId: "11155111", rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( contracts.devRoInfo.proxies.at(0)!.address, @@ -39,6 +50,7 @@ export const CHAIN_CONFIGS = { ), }, prod: { + chainId: "11155111", rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( contracts.prodRoInfo.proxies.at(0)!.address, diff --git a/nodes-lib/src/errors.ts b/nodes-lib/src/errors.ts index 9eb511591..fc8f7dc46 100644 --- a/nodes-lib/src/errors.ts +++ b/nodes-lib/src/errors.ts @@ -1,16 +1,14 @@ - - -export class BaseError extends Error { - name: T; +class BaseError extends Error { + name: Name; message: string; - cause: any; + cause: Cause; constructor({ name, message, cause }: { - name: T, + name: Name, message: string, - cause?: any, + cause: Cause, }) { super(); this.name = name; @@ -19,4 +17,8 @@ export class BaseError extends Error { }; }; -export class PublishError extends BaseError<"DPID_PUBLISH_ERROR"> {}; +export class DpidUpdateError extends BaseError<"DPID_UPDATE_ERROR", Error> {}; +export class DpidRegistrationError extends BaseError<"DPID_REGISTRATION_ERROR", Error> {}; +export class WrongOwnerError extends BaseError< + "WRONG_OWNER_ERROR", { expected: string, actual: string } +> {}; diff --git a/nodes-lib/src/index.ts b/nodes-lib/src/index.ts index 45a19155a..c50b1f285 100644 --- a/nodes-lib/src/index.ts +++ b/nodes-lib/src/index.ts @@ -1,2 +1,3 @@ export * from "./api.js" export * from "./config/index.js"; +export * from "./errors.js"; diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts index b0506a3b0..827e9ed8e 100644 --- a/nodes-lib/src/publish.ts +++ b/nodes-lib/src/publish.ts @@ -1,37 +1,24 @@ import { type NodeIDs } from "@desci-labs/desci-codex-lib"; import { getDpidHistory } from "./api.js"; -import { dpidPublish, hasDpid, type DpidPublishResult } from "./chain.js"; +import { dpidPublish, hasDpid } from "./chain.js"; import { codexPublish } from "./codex.js"; -import { PublishError } from "./errors.js"; -import { Signer, providers } from "ethers"; +import { Signer } from "ethers"; /** * The complete publish flow, including both the dPID registry and Codex. + * + * @throws (@link WrongOwnerError) if signer address isn't token owner + * @throws (@link DpidPublishError) if dPID couldnt be registered or updated */ export const publish = async ( uuid: string, provider: Signer, skipCodex: boolean = false, ) => { - let chainPubResponse: DpidPublishResult; - let preexistingDpid: boolean; - preexistingDpid = await hasDpid(uuid, provider); - try { - chainPubResponse = await dpidPublish(uuid, preexistingDpid, provider); - } catch (e) { - /** - * dPID registry operations failed. Since we can't know if the prepublish - * results will be the same next time around, skip doing ceramic publish - * to avoid historical drift. - */ - const err = e as Error; - throw new PublishError({ - name: "DPID_PUBLISH_ERROR", - message: "dPID registration failed", - cause: JSON.stringify(err, undefined, 2), - }); - }; + const preexistingDpid = await hasDpid(uuid, provider); + // Throws on ownership check or dpid publish/update failure + const chainPubResponse = await dpidPublish(uuid, preexistingDpid, provider); const dpidResult = { manifest: chainPubResponse.prepubResult.updatedManifest, cid: chainPubResponse.prepubResult.updatedManifestCid, From 73919c97132290f76a5afe7e8868b67909edbaed Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 12 Apr 2024 10:17:21 +0000 Subject: [PATCH 061/141] fix update contributors endpoint, disable sending of emails in local dev --- .../src/controllers/nodes/contributions/create.ts | 9 ++++++++- .../src/controllers/nodes/contributions/update.ts | 10 ++++++++-- desci-server/src/services/Contributors.ts | 5 ++--- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/desci-server/src/controllers/nodes/contributions/create.ts b/desci-server/src/controllers/nodes/contributions/create.ts index bcdb11c60..3b6d23cb7 100644 --- a/desci-server/src/controllers/nodes/contributions/create.ts +++ b/desci-server/src/controllers/nodes/contributions/create.ts @@ -98,7 +98,14 @@ export const addContributor = async (req: AddContributorRequest, res: Response) => { const node = req.node; const user = req.user; - if (!node || !user) throw Error('Middleware not properly setup for addContributor controller, requires req.node and req.user'); @@ -101,7 +100,14 @@ export const updateContributor = async (req: UpdateContributorRequest, res: Resp html: emailHtml, }; - sgMail.send(emailMsg); + if (process.env.NODE_ENV === 'production') { + sgMail.send(emailMsg); + } else { + logger.info( + { nodeEnv: process.env.NODE_ENV }, + 'Skipping update contributor email send in non-production environment', + ); + } } return res.status(200).json({ ok: true, message: 'Contributor updated successfully' }); } diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 4bc8360d2..8d8351c64 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -59,8 +59,8 @@ class ContributorService { let registeredContributor; if (email) registeredContributor = await prisma.user.findUnique({ where: { email } }); if (orcid) registeredContributor = await prisma.user.findUnique({ where: { orcid } }); - if (userId !== undefined || userId !== null) - registeredContributor = await prisma.user.findUnique({ where: { id: userId } }); + // debugger; + if (userId) registeredContributor = await prisma.user.findUnique({ where: { id: userId } }); const userHasOrcidValidated = nodeOwner.orcid !== undefined && nodeOwner.orcid !== null; const contributionOrcidMatchesUser = userHasOrcidValidated && orcid === nodeOwner.orcid; @@ -94,7 +94,6 @@ class ContributorService { let registeredContributor; if (email) registeredContributor = await prisma.user.findUnique({ where: { email } }); if (orcid) registeredContributor = await prisma.user.findUnique({ where: { orcid } }); - debugger; if (userId) registeredContributor = await prisma.user.findUnique({ where: { id: userId } }); const existingContribution = await prisma.nodeContribution.findFirst({ From 708c226137cf58e64b9e64f56b3d2b18e27dcd20 Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 12 Apr 2024 12:25:10 +0200 Subject: [PATCH 062/141] lib: enable ceramic auth directly with authenticated DID session --- nodes-lib/src/api.ts | 5 +++-- nodes-lib/src/codex.ts | 32 +++++++++++++++++++++----------- nodes-lib/src/publish.ts | 19 ++++++++++--------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts index 911107d58..a8965a2e3 100644 --- a/nodes-lib/src/api.ts +++ b/nodes-lib/src/api.ts @@ -28,6 +28,7 @@ import { randomUUID } from "crypto"; import { getNodesLibInternalConfig } from "./config/index.js"; import { makeRequest } from "./routes.js"; import { Signer } from "ethers"; +import { type DID } from "dids"; export const ENDPOINTS = { deleteData: { @@ -338,9 +339,9 @@ export type PublishResponse = { export const publishDraftNode = async ( uuid: string, signer: Signer, - skipCodex = false, + did?: DID, ): Promise => { - const publishResult = await publish(uuid, signer, skipCodex); + const publishResult = await publish(uuid, signer, did); const pubParams: PublishParams = { uuid, diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index 0d3ab5540..881f37f46 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -13,6 +13,7 @@ import { convert0xHexToCid } from "./util/converting.js"; import { getNodesLibInternalConfig } from "./config/index.js"; import { Signer } from "ethers"; import { authorizedSessionDidFromSigner } from "./util/signing.js"; +import { type DID } from"dids"; const LOG_CTX = "[nodes-lib::codex]"; /** @@ -22,14 +23,14 @@ const LOG_CTX = "[nodes-lib::codex]"; * it's backfilled onto a new one. * * @param prepublishResult - The new modification to publish - * @param versions - Previous versions of the object, to potentially migrate - * @param existingStream - A known stream for this object + * @param dpidHistory - Previous versions of the object, to potentially migrate + * @param didOrSigner - A DID from an authenticated DIDSession, or a signer. * @returns the stream ID of the object */ export const codexPublish = async ( prepublishResult: PrepublishResponse, dpidHistory: IndexedNodeVersion[], - signer: Signer, + didOrSigner: DID | Signer, ): Promise => { const nodeUrl = getNodesLibInternalConfig().ceramicNodeUrl; console.log(LOG_CTX, `starting publish with node ${nodeUrl}...`); @@ -37,9 +38,14 @@ export const codexPublish = async ( const ceramic = newCeramicClient(nodeUrl); const compose = newComposeClient({ ceramic }); - // Wrangle a DID out of the signer for Ceramic auth - const did = await authorizedSessionDidFromSigner(signer, compose.resources); - compose.setDID(did); + if (didOrSigner instanceof Signer) { + compose.setDID( + // Wrangle a DID out of the signer for Ceramic auth + await authorizedSessionDidFromSigner(didOrSigner, compose.resources) + ); + } else { + compose.setDID(didOrSigner); + }; // If we know about a stream already, let's assume we backfilled it initially if (prepublishResult.ceramicStream) { @@ -73,12 +79,16 @@ export const codexPublish = async ( console.log(LOG_CTX, "backfilling new stream to mirror history..."); const streamID = await backfillNewStream(compose, dpidHistory); - console.log(LOG_CTX, "backfill done, recursing to append latest event..."); - return await codexPublish( - { ...prepublishResult, ceramicStream: streamID }, - dpidHistory, - signer, + console.log(LOG_CTX, "backfill done, appending latest event..."); + const ro = await updateResearchObject(compose, { + id: streamID, + title: prepublishResult.updatedManifest.title, + manifest: prepublishResult.updatedManifestCid, + }); + console.log( + `[nodes-lib::codex] successfully updated ${ro.streamID} with commit ${ro.commitID}` ); + return { streamID: ro.streamID, commitID: ro.commitID }; }; }; diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts index 827e9ed8e..2b00e1e6b 100644 --- a/nodes-lib/src/publish.ts +++ b/nodes-lib/src/publish.ts @@ -3,22 +3,27 @@ import { getDpidHistory } from "./api.js"; import { dpidPublish, hasDpid } from "./chain.js"; import { codexPublish } from "./codex.js"; import { Signer } from "ethers"; +import { type DID } from "dids"; /** * The complete publish flow, including both the dPID registry and Codex. + * + * @param uuid - Node to publish + * @param signer - Used to sign TXs for chain, and a SIWE CACAO for ceramic if did argument is not present + * @param did - An authenticated DID from a DIDSession, better UX as it has a signing capability already * * @throws (@link WrongOwnerError) if signer address isn't token owner * @throws (@link DpidPublishError) if dPID couldnt be registered or updated */ export const publish = async ( uuid: string, - provider: Signer, - skipCodex: boolean = false, + signer: Signer, + did?: DID, ) => { - const preexistingDpid = await hasDpid(uuid, provider); + const preexistingDpid = await hasDpid(uuid, signer); // Throws on ownership check or dpid publish/update failure - const chainPubResponse = await dpidPublish(uuid, preexistingDpid, provider); + const chainPubResponse = await dpidPublish(uuid, preexistingDpid, signer); const dpidResult = { manifest: chainPubResponse.prepubResult.updatedManifest, cid: chainPubResponse.prepubResult.updatedManifestCid, @@ -26,17 +31,13 @@ export const publish = async ( ceramicIDs: undefined, }; - if (skipCodex) { - return dpidResult; - }; - let ceramicIDs: NodeIDs | undefined; try { // If the dPID is new, skip checking for history to potentially backfill const publishHistory = preexistingDpid ? (await getDpidHistory(uuid)).versions : []; - ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory, provider); + ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory, did ?? signer); } catch (e) { const err = e as Error; console.log("Codex publish failed:", err); From 4112080f8b0fc8adcec288048c02d61fe646013e Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 12 Apr 2024 11:44:33 +0000 Subject: [PATCH 063/141] merge resolutions --- desci-server/src/workers/publish.ts | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/desci-server/src/workers/publish.ts b/desci-server/src/workers/publish.ts index ad7a2d5ac..06f6c1e23 100644 --- a/desci-server/src/workers/publish.ts +++ b/desci-server/src/workers/publish.ts @@ -82,11 +82,7 @@ const dequeueTask = async () => { if (!tasks.length) { tasks = await prisma.publishTaskQueue.findMany({ where: { status: PublishTaskQueueStatus.PENDING }, take: 5 }); } -<<<<<<< HEAD - if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ tasks, workerId }, 'TASKS'); -======= - logger.info({ tasks }, 'TASKS'); ->>>>>>> b16b8f8d574c613e0c0fb620c9d101b6ac8ddded + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ tasks }, 'TASKS'); for (const task of tasks) { const taskLock = await lockService.aquireLock(task.transactionId); logger.info({ taskLock, task }, 'ATTEMPT TO ACQUIRE LOCK'); @@ -95,11 +91,7 @@ const dequeueTask = async () => { break; } } -<<<<<<< HEAD - if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ nextTask, workerId }, 'DEQUEUE TASK'); -======= - logger.info({ nextTask }, 'DEQUEUE TASK'); ->>>>>>> b16b8f8d574c613e0c0fb620c9d101b6ac8ddded + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ nextTask }, 'DEQUEUE TASK'); return nextTask; }; @@ -109,13 +101,8 @@ const delay = async (timeMs: number) => { export async function runWorkerUntilStopped() { while (true) { -<<<<<<< HEAD - const outcome = await processPublishQueue(workerId); - if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ outcome, workerId }, 'Processed Queue'); -======= const outcome = await processPublishQueue(); - logger.info({ outcome }, 'Processed Queue'); ->>>>>>> b16b8f8d574c613e0c0fb620c9d101b6ac8ddded + if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ outcome }, 'Processed Queue'); switch (outcome) { case ProcessOutcome.EmptyQueue: await delay(10000); From e390a994f7702cae9b909f7dada84f4fe334ce4e Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 12 Apr 2024 16:12:39 +0200 Subject: [PATCH 064/141] lib: fix failing tests and browser detection --- nodes-lib/src/codex.ts | 11 +++++++++++ nodes-lib/src/routes.ts | 3 ++- nodes-lib/test/root.spec.ts | 21 ++++++++++++++++----- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index 881f37f46..7435c5752 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -7,6 +7,7 @@ import { queryResearchObject, resolveHistory, newCeramicClient, + streams, } from "@desci-labs/desci-codex-lib"; import type { IndexedNodeVersion, PrepublishResponse } from "./api.js"; import { convert0xHexToCid } from "./util/converting.js"; @@ -161,3 +162,13 @@ export const getCodexHistory = async ( const ceramic = newCeramicClient(getNodesLibInternalConfig().ceramicNodeUrl); return await resolveHistory(ceramic, streamID); }; + +/** + * Get the raw stream state for a streamID. +*/ +export const getRawState = async ( + streamID: string +) => { + const ceramic = newCeramicClient(getNodesLibInternalConfig().ceramicNodeUrl); + return await streams.loadID(ceramic, streamID); +}; diff --git a/nodes-lib/src/routes.ts b/nodes-lib/src/routes.ts index e49322144..6f6eea408 100644 --- a/nodes-lib/src/routes.ts +++ b/nodes-lib/src/routes.ts @@ -41,7 +41,8 @@ export async function makeRequest< withCredentials: true, }; - if (window !== undefined && localStorage.getItem("auth")) { + // Can't check against undefined if variable doesn't exist + if (typeof window !== "undefined" && localStorage.getItem("auth")) { config.headers!.Authorization = `Bearer ${localStorage.getItem("auth")}`; }; diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts index 4d584f719..e7f51e56b 100644 --- a/nodes-lib/test/root.spec.ts +++ b/nodes-lib/test/root.spec.ts @@ -15,7 +15,7 @@ import { removeContributor, addExternalCid, updateCoverImage, } from "../src/api.js"; import axios from "axios"; -import { getCodexHistory, getPublishedFromCodex } from "../src/codex.js"; +import { getCodexHistory, getPublishedFromCodex, getRawState } from "../src/codex.js"; import { dpidPublish } from "../src/chain.js"; import { sleep } from "./util.js"; import { convert0xHexToCid } from "../src/util/converting.js"; @@ -30,8 +30,9 @@ import { ResearchObjectComponentType, ResearchObjectComponentDataSubtype } from "@desci-labs/desci-models"; -import { signerFromPkey } from "../src/util/signing.js"; +import { authorizedSessionDidFromSigner, signerFromPkey } from "../src/util/signing.js"; import { NODESLIB_CONFIGS, getNodesLibInternalConfig, setApiKey, setNodesLibConfig } from "../src/index.js"; +import { newComposeClient, getResources } from "@desci-labs/desci-codex-lib"; // Pre-funded ganache account const TEST_PKEY = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; @@ -270,11 +271,12 @@ describe("nodes-lib", () => { describe("publishing ", async () => { let uuid: string; let publishResult: PublishResponse; + const did = await authorizedSessionDidFromSigner(testSigner, getResources()); beforeAll(async () => { const { node } = await createBoilerplateNode(); uuid = node.uuid; - publishResult = await publishDraftNode(uuid, testSigner); + publishResult = await publishDraftNode(uuid, testSigner, did); }); describe("new node", async () => { @@ -299,13 +301,22 @@ describe("nodes-lib", () => { const ceramicObject = await getPublishedFromCodex(publishResult.ceramicIDs!.streamID); expect(ceramicObject?.manifest).toEqual(publishResult.updatedManifestCid); }); + + test("has a CACAO from the passed DID", async () => { + const streamState = await getRawState(publishResult.ceramicIDs!.streamID); + const controller = streamState.state.metadata.controllers.at(0); + const signerAddress = (await testSigner.getAddress()).toLowerCase(); + + expect(controller).toEqual(did.parent); + expect(controller!.replace("did:pkh:eip155:1337:", "")).toEqual(signerAddress); + }); }); describe("node update", async () => { beforeAll(async () => { // async publish errors on re-publish before it finishes await sleep(5_000); - await publishDraftNode(uuid, testSigner); + await publishDraftNode(uuid, testSigner, did); // Allow graph node to index await sleep(1_500); }); @@ -338,7 +349,7 @@ describe("nodes-lib", () => { await sleep(1_500); // make a regular publish - const pubResult = await publishDraftNode(uuid, testSigner); + const pubResult = await publishDraftNode(uuid, testSigner, did); // Allow graph node to index await sleep(1_500); From 609f73ef8faf70c67f5e302869633a99473120b9 Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 12 Apr 2024 16:21:09 +0200 Subject: [PATCH 065/141] lib: test did derivation from signer, fix flaky test --- nodes-lib/test/root.spec.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts index e7f51e56b..b80de5089 100644 --- a/nodes-lib/test/root.spec.ts +++ b/nodes-lib/test/root.spec.ts @@ -310,6 +310,15 @@ describe("nodes-lib", () => { expect(controller).toEqual(did.parent); expect(controller!.replace("did:pkh:eip155:1337:", "")).toEqual(signerAddress); }); + + test("can optionally derive DID from just a signer", async () => { + const { node } = await createBoilerplateNode(); + const result = await publishDraftNode(node.uuid, testSigner); + const streamState = await getRawState(result.ceramicIDs!.streamID); + const controller = streamState.state.metadata.controllers.at(0); + const signerAddress = (await testSigner.getAddress()).toLowerCase(); + expect(controller!.replace("did:pkh:eip155:1337:", "")).toEqual(signerAddress); + }); }); describe("node update", async () => { @@ -346,7 +355,7 @@ describe("nodes-lib", () => { await dpidPublish(uuid, false, testSigner); // Allow graph node to index - await sleep(1_500); + await sleep(2_500); // make a regular publish const pubResult = await publishDraftNode(uuid, testSigner, did); From 3dd117b81811989debbaf6ee3b96a7024cb6e24b Mon Sep 17 00:00:00 2001 From: m0ar Date: Fri, 12 Apr 2024 17:27:59 +0200 Subject: [PATCH 066/141] lib: re-export resource getter from codex-lib --- nodes-lib/package-lock.json | 450 +++++----------------------------- nodes-lib/package.json | 5 +- nodes-lib/src/codex.ts | 2 +- nodes-lib/src/config/index.ts | 3 + nodes-lib/test/root.spec.ts | 2 +- 5 files changed, 75 insertions(+), 387 deletions(-) diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json index 5be63d781..f45c6184c 100644 --- a/nodes-lib/package-lock.json +++ b/nodes-lib/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.5-rc9", "license": "MIT", "dependencies": { - "@desci-labs/desci-codex-lib": "^1.1.7-rc0", + "@desci-labs/desci-codex-lib": "^1.1.7", "@desci-labs/desci-contracts": "^0.2.3-rc3", "@desci-labs/desci-models": "^0.2.3-rc1", "@didtools/cacao": "^3.0.1", @@ -27,7 +27,6 @@ "devDependencies": { "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", - "dids": "^5.0.2", "typedoc": "^0.25.8", "typescript": "^5.3.3", "vitest": "^1.2.1", @@ -988,25 +987,25 @@ } }, "node_modules/@desci-labs/desci-codex-composedb": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-composedb/-/desci-codex-composedb-2.0.0.tgz", - "integrity": "sha512-OygjqzwJ4jjHuKg+MDfJmil7+67mhdO6041usZAbdT5iLoQB9Jl4XSJo/l/GXrHRwmbW/LbXcEij+Aa0abLlOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-composedb/-/desci-codex-composedb-2.0.1.tgz", + "integrity": "sha512-ahtxnsX/bQ52X2fPgRZisx7cdhX7b2nEj+d+PY0q33+qDzVHPeAd6Gi3Er2h9djX6bDRmH5X5kpr46v/XTOPMg==", "dependencies": { "@composedb/types": "^0.7.1" } }, "node_modules/@desci-labs/desci-codex-lib": { - "version": "1.1.7-rc0", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.7-rc0.tgz", - "integrity": "sha512-IFz3ApgI3Ya8RtRtaUknT3Gh8UPF1fkGvnkzXktTUo/T32UxUR2x+e00NheBfeXuaek6LQzogBOMooVDBKmscA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.7.tgz", + "integrity": "sha512-Z06qpACxorVPn4tp35XHro2KTqvp0rVoaMkxwGssVM+4DqeuV3jEudyrSIZTc0A2BJ2SuqMYC9WtBdbq6/Py1w==", "dependencies": { "@composedb/client": "^0.7.1", - "@desci-labs/desci-codex-composedb": "^2.0.0", + "@desci-labs/desci-codex-composedb": "^2.0.1", "dids": "^5.0.2", "gql-query-builder": "^3.8.0", "graphql": "^16.8.0", - "key-did-provider-ed25519": "^3.0.2", - "key-did-resolver": "^3.0.0", + "key-did-provider-ed25519": "^4.0.2", + "key-did-resolver": "^4.0.0", "uint8arrays": "^4.0.6" } }, @@ -4341,14 +4340,6 @@ "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", "integrity": "sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw==" }, - "node_modules/bigint-mod-arith": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.3.1.tgz", - "integrity": "sha512-pX/cYW3dCa87Jrzv6DAr8ivbbJRzEX5yGhdt8IutnX/PCIXfpx+mabWNK/M8qqh+zQ0J3thftUBHW0ByuUlG0w==", - "engines": { - "node": ">=10.4.0" - } - }, "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -5178,36 +5169,6 @@ "node": ">=14.14" } }, - "node_modules/did-session/node_modules/key-did-provider-ed25519": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-4.0.2.tgz", - "integrity": "sha512-bnnRGuuUtylKGMVmgXVSoGccBg87roFi6xy5dQmTgNqnCmrxBBUatYoVimcnA+SGCFqi2qk6B9dD10Ed4rTZPg==", - "dependencies": { - "@noble/curves": "^1.3.0", - "did-jwt": "^7.4.7", - "dids": "^5.0.2", - "fast-json-stable-stringify": "^2.1.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/did-session/node_modules/key-did-resolver": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-4.0.0.tgz", - "integrity": "sha512-+U2nd/0rjO4Yqe2hnHBD7ygcLRfT43Oje9IIjv1BlBi0lopwxZpIFQ7GekguOHK02r+JGdl8mpJVNHs5lvXVOA==", - "dependencies": { - "@noble/curves": "^1.2.0", - "multiformats": "^13.0.0", - "uint8arrays": "^5.0.1", - "varint": "^6.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/did-session/node_modules/uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -6818,160 +6779,49 @@ } }, "node_modules/key-did-provider-ed25519": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-3.0.2.tgz", - "integrity": "sha512-4Yw0CeO1hKRaUsh9NIz4tn4Ysr09CdoJItyT0vHjd5iedJ+FvVt7pTbNr7IY0/+8mWvYslutAK5LFrwu5agpsA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-4.0.2.tgz", + "integrity": "sha512-bnnRGuuUtylKGMVmgXVSoGccBg87roFi6xy5dQmTgNqnCmrxBBUatYoVimcnA+SGCFqi2qk6B9dD10Ed4rTZPg==", "dependencies": { - "@noble/curves": "^1.1.0", - "did-jwt": "^7.2.0", - "dids": "^4.0.4", + "@noble/curves": "^1.3.0", + "did-jwt": "^7.4.7", + "dids": "^5.0.2", "fast-json-stable-stringify": "^2.1.0", "rpc-utils": "^0.6.2", - "uint8arrays": "^4.0.3" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/@didtools/cacao": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", - "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", - "dependencies": { - "@didtools/codecs": "^1.0.1", - "@didtools/siwx": "1.0.0", - "@ipld/dag-cbor": "^9.0.1", - "caip": "^1.1.0", - "multiformats": "^11.0.2", - "uint8arrays": "^4.0.3" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/@didtools/codecs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", - "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", - "dependencies": { - "codeco": "^1.1.0", - "multiformats": "^11.0.1", - "uint8arrays": "^4.0.3" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/@didtools/pkh-ethereum": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", - "integrity": "sha512-oE5bbyTauJ/WddaWnDK7bWns2E2LG4Ut33ICEcEQdlMoXM0902/vnGm8+6QE/yuLOyAllgf7DnDKvERF5IY6uQ==", - "dependencies": { - "@didtools/cacao": "^2.1.0", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/@didtools/siwx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", - "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", - "dependencies": { - "codeco": "^1.1.0" + "uint8arrays": "^5.0.1" }, "engines": { "node": ">=14.14" } }, - "node_modules/key-did-provider-ed25519/node_modules/cborg": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", - "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==", - "bin": { - "cborg": "cli.js" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/dag-jose-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-3.0.0.tgz", - "integrity": "sha512-gu+XutOTy3kD8fDcA1SMjZ2U0mUOb/hxoRVZaMCizXN7Ssbc5dKOzeXQ4GquV4BdQzs3w5Y7irOpn2plFPIJfg==", - "dependencies": { - "@ipld/dag-cbor": "^7.0.1", - "multiformats": "^11.0.1" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/dag-jose-utils/node_modules/@ipld/dag-cbor": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", - "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", - "dependencies": { - "cborg": "^1.6.0", - "multiformats": "^9.5.4" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/dag-jose-utils/node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - }, - "node_modules/key-did-provider-ed25519/node_modules/dids": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/dids/-/dids-4.0.4.tgz", - "integrity": "sha512-PKxQP0QFqgeMe0dbL7LCRdPJVhZU2ejj8RWCfJ6vro3a+o5o32cWNM1X6YXpdIWq6G5fTJw9KO2dHj2ZzYDc7w==", + "node_modules/key-did-provider-ed25519/node_modules/uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "dependencies": { - "@didtools/cacao": "^2.1.0", - "@didtools/codecs": "^1.0.1", - "@didtools/pkh-ethereum": "^0.4.1", - "@stablelib/random": "^1.0.1", - "codeco": "^1.1.0", - "dag-jose-utils": "^3.0.0", - "did-jwt": "^7.2.0", - "did-resolver": "^4.1.0", - "multiformats": "^11.0.2", - "rpc-utils": "^0.6.1", - "uint8arrays": "^4.0.3" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/key-did-provider-ed25519/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "multiformats": "^13.0.0" } }, "node_modules/key-did-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-3.0.0.tgz", - "integrity": "sha512-IyEq64AdS6lUwtn3YSvGpu7KAGA2x5+fjRCUIa8+ccSLmWrODV/ICM5aa6hHV/19EPWef8/e322r9sQJJ6/3qA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-4.0.0.tgz", + "integrity": "sha512-+U2nd/0rjO4Yqe2hnHBD7ygcLRfT43Oje9IIjv1BlBi0lopwxZpIFQ7GekguOHK02r+JGdl8mpJVNHs5lvXVOA==", "dependencies": { - "@stablelib/ed25519": "^1.0.2", - "bigint-mod-arith": "^3.1.0", - "multiformats": "^11.0.1", - "nist-weierstrauss": "^1.6.1", - "uint8arrays": "^4.0.3", + "@noble/curves": "^1.2.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", "varint": "^6.0.0" }, "engines": { "node": ">=14.14" } }, - "node_modules/key-did-resolver/node_modules/multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" + "node_modules/key-did-resolver/node_modules/uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", + "dependencies": { + "multiformats": "^13.0.0" } }, "node_modules/knex": { @@ -7897,28 +7747,6 @@ "node": ">= 0.6" } }, - "node_modules/nist-weierstrauss": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/nist-weierstrauss/-/nist-weierstrauss-1.6.1.tgz", - "integrity": "sha512-FpjCOnPV/s3ZVIkeldCVSml2K4lruabPbBgoEitpCK1JL0KTVoWb56CFTU6rZn5i6VqAjdwcOp0FDwJACPmeFA==", - "dependencies": { - "multiformats": "^9.6.5", - "uint8arrays": "^2.1.4" - } - }, - "node_modules/nist-weierstrauss/node_modules/multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - }, - "node_modules/nist-weierstrauss/node_modules/uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "dependencies": { - "multiformats": "^9.4.2" - } - }, "node_modules/node-abi": { "version": "3.56.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", @@ -10989,25 +10817,25 @@ } }, "@desci-labs/desci-codex-composedb": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-composedb/-/desci-codex-composedb-2.0.0.tgz", - "integrity": "sha512-OygjqzwJ4jjHuKg+MDfJmil7+67mhdO6041usZAbdT5iLoQB9Jl4XSJo/l/GXrHRwmbW/LbXcEij+Aa0abLlOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-composedb/-/desci-codex-composedb-2.0.1.tgz", + "integrity": "sha512-ahtxnsX/bQ52X2fPgRZisx7cdhX7b2nEj+d+PY0q33+qDzVHPeAd6Gi3Er2h9djX6bDRmH5X5kpr46v/XTOPMg==", "requires": { "@composedb/types": "^0.7.1" } }, "@desci-labs/desci-codex-lib": { - "version": "1.1.7-rc0", - "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.7-rc0.tgz", - "integrity": "sha512-IFz3ApgI3Ya8RtRtaUknT3Gh8UPF1fkGvnkzXktTUo/T32UxUR2x+e00NheBfeXuaek6LQzogBOMooVDBKmscA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.1.7.tgz", + "integrity": "sha512-Z06qpACxorVPn4tp35XHro2KTqvp0rVoaMkxwGssVM+4DqeuV3jEudyrSIZTc0A2BJ2SuqMYC9WtBdbq6/Py1w==", "requires": { "@composedb/client": "^0.7.1", - "@desci-labs/desci-codex-composedb": "^2.0.0", + "@desci-labs/desci-codex-composedb": "^2.0.1", "dids": "^5.0.2", "gql-query-builder": "^3.8.0", "graphql": "^16.8.0", - "key-did-provider-ed25519": "^3.0.2", - "key-did-resolver": "^3.0.0", + "key-did-provider-ed25519": "^4.0.2", + "key-did-resolver": "^4.0.0", "uint8arrays": "^4.0.6" } }, @@ -13331,11 +13159,6 @@ "resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz", "integrity": "sha512-ddkU+dFIuEIW8lE7ZwdIAf2UPoM90eaprg5m3YXAVVTmKlqV/9BX4A2M8BOK2yOq6/VgZFVhK6QAxJebhlbhzw==" }, - "bigint-mod-arith": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.3.1.tgz", - "integrity": "sha512-pX/cYW3dCa87Jrzv6DAr8ivbbJRzEX5yGhdt8IutnX/PCIXfpx+mabWNK/M8qqh+zQ0J3thftUBHW0ByuUlG0w==" - }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", @@ -14018,30 +13841,6 @@ "uint8arrays": "^5.0.1" }, "dependencies": { - "key-did-provider-ed25519": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-4.0.2.tgz", - "integrity": "sha512-bnnRGuuUtylKGMVmgXVSoGccBg87roFi6xy5dQmTgNqnCmrxBBUatYoVimcnA+SGCFqi2qk6B9dD10Ed4rTZPg==", - "requires": { - "@noble/curves": "^1.3.0", - "did-jwt": "^7.4.7", - "dids": "^5.0.2", - "fast-json-stable-stringify": "^2.1.0", - "rpc-utils": "^0.6.2", - "uint8arrays": "^5.0.1" - } - }, - "key-did-resolver": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-4.0.0.tgz", - "integrity": "sha512-+U2nd/0rjO4Yqe2hnHBD7ygcLRfT43Oje9IIjv1BlBi0lopwxZpIFQ7GekguOHK02r+JGdl8mpJVNHs5lvXVOA==", - "requires": { - "@noble/curves": "^1.2.0", - "multiformats": "^13.0.0", - "uint8arrays": "^5.0.1", - "varint": "^6.0.0" - } - }, "uint8arrays": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", @@ -15321,135 +15120,46 @@ } }, "key-did-provider-ed25519": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-3.0.2.tgz", - "integrity": "sha512-4Yw0CeO1hKRaUsh9NIz4tn4Ysr09CdoJItyT0vHjd5iedJ+FvVt7pTbNr7IY0/+8mWvYslutAK5LFrwu5agpsA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/key-did-provider-ed25519/-/key-did-provider-ed25519-4.0.2.tgz", + "integrity": "sha512-bnnRGuuUtylKGMVmgXVSoGccBg87roFi6xy5dQmTgNqnCmrxBBUatYoVimcnA+SGCFqi2qk6B9dD10Ed4rTZPg==", "requires": { - "@noble/curves": "^1.1.0", - "did-jwt": "^7.2.0", - "dids": "^4.0.4", + "@noble/curves": "^1.3.0", + "did-jwt": "^7.4.7", + "dids": "^5.0.2", "fast-json-stable-stringify": "^2.1.0", "rpc-utils": "^0.6.2", - "uint8arrays": "^4.0.3" + "uint8arrays": "^5.0.1" }, "dependencies": { - "@didtools/cacao": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-2.1.0.tgz", - "integrity": "sha512-35gopj+mOmAlA3nHoHiYMvNMXJtbJDJnVpIlCf/Wf/+/x+uG9aIQefXfF35D6JuaTCZ0apabjpT2umL5h3EXcw==", - "requires": { - "@didtools/codecs": "^1.0.1", - "@didtools/siwx": "1.0.0", - "@ipld/dag-cbor": "^9.0.1", - "caip": "^1.1.0", - "multiformats": "^11.0.2", - "uint8arrays": "^4.0.3" - } - }, - "@didtools/codecs": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-1.0.1.tgz", - "integrity": "sha512-6PYXOCX7mwVWUcudKQ3eW5LtI8v5esozazbf2q2F01PE+LoeEvTytvgU9FEspj4pATpq3hPx1eenX2uLirDJ8w==", - "requires": { - "codeco": "^1.1.0", - "multiformats": "^11.0.1", - "uint8arrays": "^4.0.3" - } - }, - "@didtools/pkh-ethereum": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@didtools/pkh-ethereum/-/pkh-ethereum-0.4.1.tgz", - "integrity": "sha512-oE5bbyTauJ/WddaWnDK7bWns2E2LG4Ut33ICEcEQdlMoXM0902/vnGm8+6QE/yuLOyAllgf7DnDKvERF5IY6uQ==", - "requires": { - "@didtools/cacao": "^2.1.0", - "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", - "@stablelib/random": "^1.0.2", - "caip": "^1.1.0" - } - }, - "@didtools/siwx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-1.0.0.tgz", - "integrity": "sha512-b7sPDTNHdySoJ+Rp2p06x3rg1iTxI4yPTTA3PrPh40xcvFJ0K/YhdIb/Rzff13t92arcJ+VYGFhqtJorauV91g==", - "requires": { - "codeco": "^1.1.0" - } - }, - "cborg": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", - "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" - }, - "dag-jose-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dag-jose-utils/-/dag-jose-utils-3.0.0.tgz", - "integrity": "sha512-gu+XutOTy3kD8fDcA1SMjZ2U0mUOb/hxoRVZaMCizXN7Ssbc5dKOzeXQ4GquV4BdQzs3w5Y7irOpn2plFPIJfg==", - "requires": { - "@ipld/dag-cbor": "^7.0.1", - "multiformats": "^11.0.1" - }, - "dependencies": { - "@ipld/dag-cbor": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-7.0.3.tgz", - "integrity": "sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==", - "requires": { - "cborg": "^1.6.0", - "multiformats": "^9.5.4" - }, - "dependencies": { - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - } - } - } - } - }, - "dids": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/dids/-/dids-4.0.4.tgz", - "integrity": "sha512-PKxQP0QFqgeMe0dbL7LCRdPJVhZU2ejj8RWCfJ6vro3a+o5o32cWNM1X6YXpdIWq6G5fTJw9KO2dHj2ZzYDc7w==", + "uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", "requires": { - "@didtools/cacao": "^2.1.0", - "@didtools/codecs": "^1.0.1", - "@didtools/pkh-ethereum": "^0.4.1", - "@stablelib/random": "^1.0.1", - "codeco": "^1.1.0", - "dag-jose-utils": "^3.0.0", - "did-jwt": "^7.2.0", - "did-resolver": "^4.1.0", - "multiformats": "^11.0.2", - "rpc-utils": "^0.6.1", - "uint8arrays": "^4.0.3" + "multiformats": "^13.0.0" } - }, - "multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" } } }, "key-did-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-3.0.0.tgz", - "integrity": "sha512-IyEq64AdS6lUwtn3YSvGpu7KAGA2x5+fjRCUIa8+ccSLmWrODV/ICM5aa6hHV/19EPWef8/e322r9sQJJ6/3qA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/key-did-resolver/-/key-did-resolver-4.0.0.tgz", + "integrity": "sha512-+U2nd/0rjO4Yqe2hnHBD7ygcLRfT43Oje9IIjv1BlBi0lopwxZpIFQ7GekguOHK02r+JGdl8mpJVNHs5lvXVOA==", "requires": { - "@stablelib/ed25519": "^1.0.2", - "bigint-mod-arith": "^3.1.0", - "multiformats": "^11.0.1", - "nist-weierstrauss": "^1.6.1", - "uint8arrays": "^4.0.3", + "@noble/curves": "^1.2.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", "varint": "^6.0.0" }, "dependencies": { - "multiformats": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", - "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" + "uint8arrays": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.3.tgz", + "integrity": "sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==", + "requires": { + "multiformats": "^13.0.0" + } } } }, @@ -16146,30 +15856,6 @@ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "optional": true }, - "nist-weierstrauss": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/nist-weierstrauss/-/nist-weierstrauss-1.6.1.tgz", - "integrity": "sha512-FpjCOnPV/s3ZVIkeldCVSml2K4lruabPbBgoEitpCK1JL0KTVoWb56CFTU6rZn5i6VqAjdwcOp0FDwJACPmeFA==", - "requires": { - "multiformats": "^9.6.5", - "uint8arrays": "^2.1.4" - }, - "dependencies": { - "multiformats": { - "version": "9.9.0", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" - }, - "uint8arrays": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-2.1.10.tgz", - "integrity": "sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A==", - "requires": { - "multiformats": "^9.4.2" - } - } - } - }, "node-abi": { "version": "3.56.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", diff --git a/nodes-lib/package.json b/nodes-lib/package.json index e2ecb9408..84897ea0c 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5-rc9", + "version": "0.0.5", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { @@ -26,7 +26,7 @@ "docs": "typedoc src/index.ts" }, "dependencies": { - "@desci-labs/desci-codex-lib": "^1.1.7-rc0", + "@desci-labs/desci-codex-lib": "^1.1.7", "@desci-labs/desci-contracts": "^0.2.3-rc3", "@desci-labs/desci-models": "^0.2.3-rc1", "@didtools/cacao": "^3.0.1", @@ -44,7 +44,6 @@ "devDependencies": { "@types/mime-types": "^2.1.4", "@types/node": "^20.11.5", - "dids": "^5.0.2", "typedoc": "^0.25.8", "typescript": "^5.3.3", "vitest": "^1.2.1", diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts index 7435c5752..896c81ae3 100644 --- a/nodes-lib/src/codex.ts +++ b/nodes-lib/src/codex.ts @@ -170,5 +170,5 @@ export const getRawState = async ( streamID: string ) => { const ceramic = newCeramicClient(getNodesLibInternalConfig().ceramicNodeUrl); - return await streams.loadID(ceramic, streamID); + return await streams.loadID(ceramic, streams.StreamID.fromString(streamID)); }; diff --git a/nodes-lib/src/config/index.ts b/nodes-lib/src/config/index.ts index 25e21984e..1cdcd3dd4 100644 --- a/nodes-lib/src/config/index.ts +++ b/nodes-lib/src/config/index.ts @@ -1,3 +1,4 @@ +import { getResources } from "@desci-labs/desci-codex-lib"; import { CHAIN_CONFIGS, ChainConfig } from "./chain.js"; export type NodesEnv = @@ -76,3 +77,5 @@ export const setNodesLibConfig = (newConfig: Config): void => { export const getNodesLibInternalConfig = () => { return config as Required; }; + +export { getResources }; diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts index b80de5089..b099c38fc 100644 --- a/nodes-lib/test/root.spec.ts +++ b/nodes-lib/test/root.spec.ts @@ -32,7 +32,7 @@ import { } from "@desci-labs/desci-models"; import { authorizedSessionDidFromSigner, signerFromPkey } from "../src/util/signing.js"; import { NODESLIB_CONFIGS, getNodesLibInternalConfig, setApiKey, setNodesLibConfig } from "../src/index.js"; -import { newComposeClient, getResources } from "@desci-labs/desci-codex-lib"; +import { getResources } from "@desci-labs/desci-codex-lib"; // Pre-funded ganache account const TEST_PKEY = "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"; From 1086552e5bd36236a5840323a27efe24b00f792b Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 15 Apr 2024 12:14:02 +0200 Subject: [PATCH 067/141] ceramic: prod node deployment --- ceramic-k8s/ceramic_deployment_prod.yaml | 100 +++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 ceramic-k8s/ceramic_deployment_prod.yaml diff --git a/ceramic-k8s/ceramic_deployment_prod.yaml b/ceramic-k8s/ceramic_deployment_prod.yaml new file mode 100644 index 000000000..19b657139 --- /dev/null +++ b/ceramic-k8s/ceramic_deployment_prod.yaml @@ -0,0 +1,100 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: js-ceramic-prod + labels: + App: JsCeramicProd +spec: + replicas: 1 + revisionHistoryLimit: 8 + selector: + matchLabels: + App: JsCeramicProd + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + annotations: + vault.hashicorp.com/agent-inject: "true" + vault.hashicorp.com/agent-inject-status: "update" + vault.hashicorp.com/role: app-vault-reader + vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/production/db + vault.hashicorp.com/agent-inject-template-config: | + {{- with secret "secrets/desci-server/production/db" -}} + echo "{\"anchor\":{\"auth-method\":\"did\",\"ethereum-rpc-url\":\"{{ .Data.ceramic_rpc }}\"},\"node\":{\"privateSeedUrl\":\"inplace:ed25519#{{ .Data.ceramic_cas_pkey }}\"},\"http-api\":{\"cors-allowed-origins\":[\".*\"],\"admin-dids\":[\"did:key:z6MktbKJrMnhVJ37QFTo12911ycm2juKDUzWHDVETu9s5a9T\"]},\"ipfs\":{\"mode\":\"remote\",\"host\":\"http://public-ceramic-ipfs-prod-service-internal.default.svc.cluster.local:5001\"},\"logger\":{\"log-level\":0},\"metrics\":{\"metrics-exporter-enabled\":false,\"metrics-port\":9090},\"network\":{\"name\":\"mainnet\"},\"state-store\":{\"mode\":\"fs\",\"local-directory\":\"/root/.ceramic/statestore\"},\"indexing\":{\"db\":\"{{ .Data.ceramic_url }}\",\"allow-queries-before-historical-sync\":true,\"models\":[]}}" > daemon.config.json + export NODE_ENV=production + echo "envset"; + {{- end -}} + labels: + App: JsCeramicProd + spec: + containers: + - image: ceramicnetwork/js-ceramic:5.3.0 + name: js-ceramic-prod + command: ["/bin/bash", "-c"] + args: + - echo "SOURCING ENV"; source /vault/secrets/config; ./packages/cli/bin/ceramic.js daemon --config daemon.config.json; + ports: + - containerPort: 7007 + name: http-api + resources: + limits: + cpu: "0.7" + memory: 4Gi + requests: + cpu: "0.6" + memory: 4Gi + # # restart pod after failureThreshold*periodSeconds total seconds + livenessProbe: + httpGet: + path: /api/v0/node/healthcheck + port: http-api + failureThreshold: 10 + periodSeconds: 5 + # # wait for pod to start for failureThreshold*periodSeconds total seconds + startupProbe: + httpGet: + path: /api/v0/node/healthcheck + port: http-api + failureThreshold: 60 + periodSeconds: 1 + + serviceAccountName: "vault-auth" +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ceramic-prod-ingress + annotations: + kubernetes.io/ingress.class: "nginx" +spec: + rules: + - host: ceramic-prod.desci.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: public-js-ceramic-prod-service + port: + number: 80 +--- +apiVersion: v1 +kind: Service +metadata: + name: public-js-ceramic-prod-service + labels: + App: JsCeramicProd +spec: + type: LoadBalancer + selector: + App: JsCeramicProd + ports: + - protocol: TCP + name: http + port: 80 + targetPort: 7007 From db08e348776549d0312783057d439218ca4b9bfd Mon Sep 17 00:00:00 2001 From: m0ar Date: Mon, 15 Apr 2024 12:17:27 +0200 Subject: [PATCH 068/141] ceramic: add health probes to dev node --- ceramic-k8s/ceramic_deployment_dev.yaml | 31 ++++++++++--------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/ceramic-k8s/ceramic_deployment_dev.yaml b/ceramic-k8s/ceramic_deployment_dev.yaml index 5d0db197f..90606ab87 100644 --- a/ceramic-k8s/ceramic_deployment_dev.yaml +++ b/ceramic-k8s/ceramic_deployment_dev.yaml @@ -48,26 +48,19 @@ spec: cpu: "0.6" memory: 4Gi # # restart pod after failureThreshold*periodSeconds total seconds - # livenessProbe: - # httpGet: - # path: / - # port: server-api - # failureThreshold: 80 - # periodSeconds: 3 - # # temporarily stop sending traffic to pod after failureThreshold*periodSeconds total seconds - # readinessProbe: - # httpGet: - # path: / - # port: server-api - # failureThreshold: 3 - # periodSeconds: 1 + livenessProbe: + httpGet: + path: /api/v0/node/healthcheck + port: http-api + failureThreshold: 10 + periodSeconds: 5 # # wait for pod to start for failureThreshold*periodSeconds total seconds - # startupProbe: - # httpGet: - # path: / - # port: server-api - # failureThreshold: 200 - # periodSeconds: 1 + startupProbe: + httpGet: + path: /api/v0/node/healthcheck + port: http-api + failureThreshold: 60 + periodSeconds: 1 serviceAccountName: "vault-auth" --- From 75aa48fc75dbbad4dc5931b936e66e297023c3db Mon Sep 17 00:00:00 2001 From: kadami Date: Mon, 15 Apr 2024 21:59:39 +0700 Subject: [PATCH 069/141] revert nodemon desci-repo config --- desci-repo/nodemon.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/desci-repo/nodemon.json b/desci-repo/nodemon.json index 3a613cbde..a1ef42433 100644 --- a/desci-repo/nodemon.json +++ b/desci-repo/nodemon.json @@ -7,7 +7,6 @@ "log/server.log" ], "verbose": true, - "exec": "node -r ts-node/register --inspect=0.0.0.0:9232", - "delay": 300, - "signal": "SIGTERM" + "exec": "npx kill-port 5484 9232; sleep 5; node -r ts-node/register --inspect=0.0.0.0:9232", + "delay": 300 } \ No newline at end of file From 66c1a9a892ddc5363b20f0adb18bfb5a0ba2bbc7 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 9 Apr 2024 13:21:02 +0200 Subject: [PATCH 070/141] Add reverse-proxy-service for hiding sensitive endpoints --- .../workflows/build-reverse-proxy-service.yml | 93 + reverse-proxy-service/.gitignore | 2 + reverse-proxy-service/Dockerfile | 34 + reverse-proxy-service/README.md | 33 + reverse-proxy-service/package-lock.json | 2576 +++++++++++++++++ reverse-proxy-service/package.json | 35 + reverse-proxy-service/src/index.ts | 76 + reverse-proxy-service/tsconfig.json | 19 + 8 files changed, 2868 insertions(+) create mode 100644 .github/workflows/build-reverse-proxy-service.yml create mode 100644 reverse-proxy-service/.gitignore create mode 100644 reverse-proxy-service/Dockerfile create mode 100644 reverse-proxy-service/README.md create mode 100644 reverse-proxy-service/package-lock.json create mode 100644 reverse-proxy-service/package.json create mode 100644 reverse-proxy-service/src/index.ts create mode 100644 reverse-proxy-service/tsconfig.json diff --git a/.github/workflows/build-reverse-proxy-service.yml b/.github/workflows/build-reverse-proxy-service.yml new file mode 100644 index 000000000..5cf44be30 --- /dev/null +++ b/.github/workflows/build-reverse-proxy-service.yml @@ -0,0 +1,93 @@ +# build.yml +on: + workflow_dispatch: # This line enables manual triggers + push: + paths: + - reverse-proxy-service/** + branches: # array of glob patterns matching against refs/heads. Optional; defaults to all + - develop + - main + +# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html +env: + AWS_DEFAULT_REGION: us-east-2 + AWS_DEFAULT_OUTPUT: json + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + CONTAINER_IMAGE: reverse-proxy-service + DOCKER_BUILDKIT: 1 + +jobs: + build-and-push: + name: Build and deploy + runs-on: ubuntu-latest + steps: + - uses: hashicorp/setup-terraform@v1 + - name: Checkout + uses: actions/checkout@v4 + + # Add steps here like linting, testing, minification, etc. + - id: install-aws-cli + uses: unfor19/install-aws-cli-action@v1 + with: + version: 1 + + - uses: prepor/action-aws-iam-authenticator@master + - run: aws-iam-authenticator version + + - name: Install Kubectl + run: | + #$(curl -Ls https://dl.k8s.io/release/stable.txt) + version=v1.23.6 + echo "using kubectl@$version" + curl -sLO "https://dl.k8s.io/release/$version/bin/linux/amd64/kubectl" -o kubectl + chmod +x kubectl + mv kubectl /usr/local/bin + mkdir $HOME/.kube + sudo apt-get update + sudo apt-get install less + echo ${{ secrets.KUBE_CONFIG_DATA }} | base64 --decode > $HOME/.kube/config + aws sts get-caller-identity + kubectl describe deployments + + - name: Build and tag the image (DEV) + if: github.ref == 'refs/heads/develop' + run: | + # Build and tag the image + docker build \ + --target production -t $CONTAINER_IMAGE-dev:production \ + --target production -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev \ + ./$CONTAINER_IMAGE + + - name: Build and tag the image (PROD) + if: github.ref == 'refs/heads/main' + run: | + # Build and tag the image + docker build \ + --target production -t $CONTAINER_IMAGE-prod:production \ + --target production -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE \ + ./$CONTAINER_IMAGE + + # Only push to registry on master + - name: Push (DEV) + if: github.ref == 'refs/heads/develop' + run: | + # Push image to AWS ECR + aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + docker tag $CONTAINER_IMAGE-dev:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} + docker tag $CONTAINER_IMAGE-dev:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:production + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:production + + - name: Push (PROD) + if: github.ref == 'refs/heads/main' + run: | + # Push image to AWS ECR + aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + docker tag $CONTAINER_IMAGE-prod:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} + docker tag $CONTAINER_IMAGE-prod:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:production + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:production + + # TODO: deploy where? diff --git a/reverse-proxy-service/.gitignore b/reverse-proxy-service/.gitignore new file mode 100644 index 000000000..f06235c46 --- /dev/null +++ b/reverse-proxy-service/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/reverse-proxy-service/Dockerfile b/reverse-proxy-service/Dockerfile new file mode 100644 index 000000000..86d60f5c2 --- /dev/null +++ b/reverse-proxy-service/Dockerfile @@ -0,0 +1,34 @@ +FROM node:20.12.1-alpine3.18 AS base + +RUN apk update && apk add --no-cache dumb-init + +WORKDIR /usr/src/app + +COPY package*.json . + +#################### +FROM base as builder + +RUN --mount=type=cache,target=/usr/src/app/.npm \ + npm set cache /usr/src/app/.npm && \ + npm ci + +COPY . . + +RUN npm run build + +####################### +FROM base AS production + +RUN --mount=type=cache,target=/usr/src/app/.npm \ + npm set cache /usr/src/app/.npm && \ + npm ci --only=production + +ENV NODE_ENV production +USER node + +COPY --chown=node:node ./dist/ . + +EXPOSE 5555 + +CMD [ "dumb-init", "node", "dist/index.js"] diff --git a/reverse-proxy-service/README.md b/reverse-proxy-service/README.md new file mode 100644 index 000000000..f13702a24 --- /dev/null +++ b/reverse-proxy-service/README.md @@ -0,0 +1,33 @@ +# Reverse Proxy Service +Allows mapping paths to other URLs, useful for hiding target services. In particular, where the target URL contains authentication information which might otherwise leak. + +## Configuration +Set one or more environment variables matching this pattern, where `EXAMPLE` is the path that will redirect to the target URL: + +```shell +PROXY_MAPPING_EXAMPLE=https://example.com +``` + +So, in general, the pattern is `PROXY_MAPPING_[redirect key]=[redirect target]`. The redirect key is removed from the request, but the rest stays. Here are some examples of that that means in practice: + +| Path | Resolves to | +|-----------------|--------------------------| +| `/example` | https://example.com | +| `/example/cats` | https://example.com/cats | + +## Running +Run in development mode: +```shell +PROXY_MAPPING_EXAMPLE=https://example.com npm run dev +``` + +Run in docker: +```shell +docker build . -t proxy-service +docker run --network=host -e PROXY_MAPPING_EXAMPLE="https://example.com" proxy-service +``` + +Regardless of which mode, the service listens on port 5555. It can be tested by sending a request: +```shell +curl http://localhost:5555/example +``` diff --git a/reverse-proxy-service/package-lock.json b/reverse-proxy-service/package-lock.json new file mode 100644 index 000000000..fe6c33b2b --- /dev/null +++ b/reverse-proxy-service/package-lock.json @@ -0,0 +1,2576 @@ +{ + "name": "reverse-proxy-service", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "reverse-proxy-service", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "express": "^4.19.2", + "http-proxy-middleware": "^3.0.0" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.12.6", + "eslint": "^9.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "prettier": "^3.2.5", + "tsx": "^4.7.2", + "typescript": "^5.4.4" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.0.2.tgz", + "integrity": "sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.0.0.tgz", + "integrity": "sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.12.3.tgz", + "integrity": "sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz", + "integrity": "sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.12.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.6.tgz", + "integrity": "sha512-3KurE8taB8GCvZBPngVbp0lk5CKi8M9f9k1rsADh0Evdz5SzJ+Q+Hx9uHoFGsLnLnd1xmkDQr2hVhlA0Mn0lKQ==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/qs": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.0.0.tgz", + "integrity": "sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^3.0.2", + "@eslint/js": "9.0.0", + "@humanwhocodes/config-array": "^0.12.3", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", + "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tsx": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.7.2.tgz", + "integrity": "sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==", + "dev": true, + "dependencies": { + "esbuild": "~0.19.10", + "get-tsconfig": "^4.7.2" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/reverse-proxy-service/package.json b/reverse-proxy-service/package.json new file mode 100644 index 000000000..a4801d6ff --- /dev/null +++ b/reverse-proxy-service/package.json @@ -0,0 +1,35 @@ +{ + "name": "reverse-proxy-service", + "version": "0.0.1", + "description": "Hide private URLs by proxying routes to secret destinations", + "repository": { + "type": "git", + "url": "git+https://github.com/desci-labs/nodes.git" + }, + "type": "module", + "main": "dist/index.js", + "scripts": { + "dev": "tsx src/index.ts", + "build": "rm -rf dist && tsc" + }, + "devDependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.12.6", + "eslint": "^9.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "prettier": "^3.2.5", + "tsx": "^4.7.2", + "typescript": "^5.4.4" + }, + "homepage": "https://github.com/desci-labs/nodes#readme", + "author": "Edvard Hübinette", + "license": "MIT", + "bugs": { + "url": "https://github.com/desci-labs/nodes/issues" + }, + "dependencies": { + "express": "^4.19.2", + "http-proxy-middleware": "^3.0.0" + } +} diff --git a/reverse-proxy-service/src/index.ts b/reverse-proxy-service/src/index.ts new file mode 100644 index 000000000..1e28ba78c --- /dev/null +++ b/reverse-proxy-service/src/index.ts @@ -0,0 +1,76 @@ +import express from 'express'; +import { ServerResponse } from 'http'; +import { createProxyMiddleware } from 'http-proxy-middleware'; + +const SENSIBLE_KEY_REGEX = '^\/[a-zA-Z0-9_-]+'; +const rSensibleKey = RegExp(SENSIBLE_KEY_REGEX); + +type Mapping = Record; + +const mapping: Mapping = Object.fromEntries( + Object.entries(process.env as { [s:string]: string } ) + .filter(([k, _]) => k.startsWith("PROXY_MAPPING_")) + .map(([k, v]) => [k.replace("PROXY_MAPPING_", ""), v]) + .map(([k, v]) => ["/" + k.toLowerCase(), v]) +); + +console.log( + "Raw mapping configuration loaded:\n", + JSON.stringify(mapping, undefined, 2) +); + +/** + * Checks that a single mapping has a sensible key and that the + * target is a valid URL. +*/ +const assertValidMapping = ( + [key, target]: [string, string] +): void => { + if (!rSensibleKey.test(key)) { + throw new Error(`Invalid mapping key: ${key}`); + }; + + try { + new URL(target); + } catch { + throw new Error(`Invalid URL in target: ${target}`); + }; +}; + +console.log("Asserting valid keys and targets...") +Object.entries(mapping).forEach(assertValidMapping); +console.log("All good. Starting proxy...") + +const createProxy = (target: string) => createProxyMiddleware({ + target, + // Enables successful TLS handshake + changeOrigin: true, + // Cut the key so it doesn't get applied to target URL + pathRewrite: { [SENSIBLE_KEY_REGEX]: "" }, + // Log each proxy call to console + logger: console, + on: { + error: (_err, _req, res) => { + if (res instanceof ServerResponse) { + res.writeHead(500, { + 'Content-Type': 'text/plain', + }); + res.end('Something went wrong while proxying the request'); + }; + }, + } +}); + +const app = express(); + +Object.entries(mapping) + .forEach(([alias, target]) => app.use(alias, createProxy(target))); + +app.use( + (req, res) => { + console.log(`Got request for unmapped path ${req.url}, responding 404.`); + return res.status(404).json(`No route found for ${req.url}`) + } +); + +app.listen(5555); diff --git a/reverse-proxy-service/tsconfig.json b/reverse-proxy-service/tsconfig.json new file mode 100644 index 000000000..ed3151c33 --- /dev/null +++ b/reverse-proxy-service/tsconfig.json @@ -0,0 +1,19 @@ +{ + /** https://www.typescriptlang.org/docs/handbook/modules/guides/choosing-compiler-options.html */ + "compilerOptions": { + /** Maximise compatibility with ESM/cjs and importer `moduleResolution: bundler` setting */ + "module": "nodenext", + /** Without strict, we'd error when imported into a project with `strict` */ + "strict": true, + /** Prevent misbehaving import/export statements */ + "verbatimModuleSyntax": true, + /** Misbehaving deps: @ceramicnetwork/{codecs,common}, @didtools/{cacao,codecs}, codeco, ipfs-core-types */ + // "skipLibCheck": true, + + /** Import friendliness */ + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "outDir": "dist" + } +} From c13f960a175487b6a042caf246ded8a7e434e7aa Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 9 Apr 2024 15:40:26 +0200 Subject: [PATCH 071/141] reverse-proxy: mini tsconfig fix --- reverse-proxy-service/tsconfig.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/reverse-proxy-service/tsconfig.json b/reverse-proxy-service/tsconfig.json index ed3151c33..0362e0f98 100644 --- a/reverse-proxy-service/tsconfig.json +++ b/reverse-proxy-service/tsconfig.json @@ -7,13 +7,10 @@ "strict": true, /** Prevent misbehaving import/export statements */ "verbatimModuleSyntax": true, - /** Misbehaving deps: @ceramicnetwork/{codecs,common}, @didtools/{cacao,codecs}, codeco, ipfs-core-types */ - // "skipLibCheck": true, /** Import friendliness */ "declaration": true, "sourceMap": true, - "declarationMap": true, "outDir": "dist" } } From a8d3c5a9e7e7d77c48221eaf19b4ebd9dc1d4678 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 9 Apr 2024 16:29:20 +0200 Subject: [PATCH 072/141] reverse-proxy: change to unused port, add single env kubernetes deployment --- .../workflows/build-reverse-proxy-service.yml | 43 +++++------- reverse-proxy-service/Dockerfile | 2 +- reverse-proxy-service/README.md | 4 +- reverse-proxy-service/deployment.yml | 65 +++++++++++++++++++ reverse-proxy-service/src/index.ts | 2 +- 5 files changed, 85 insertions(+), 31 deletions(-) create mode 100755 reverse-proxy-service/deployment.yml diff --git a/.github/workflows/build-reverse-proxy-service.yml b/.github/workflows/build-reverse-proxy-service.yml index 5cf44be30..b4aebd948 100644 --- a/.github/workflows/build-reverse-proxy-service.yml +++ b/.github/workflows/build-reverse-proxy-service.yml @@ -1,10 +1,10 @@ # build.yml on: - workflow_dispatch: # This line enables manual triggers + workflow_dispatch: push: paths: - reverse-proxy-service/** - branches: # array of glob patterns matching against refs/heads. Optional; defaults to all + branches: - develop - main @@ -56,38 +56,27 @@ jobs: run: | # Build and tag the image docker build \ - --target production -t $CONTAINER_IMAGE-dev:production \ - --target production -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev \ - ./$CONTAINER_IMAGE - - - name: Build and tag the image (PROD) - if: github.ref == 'refs/heads/main' - run: | - # Build and tag the image - docker build \ - --target production -t $CONTAINER_IMAGE-prod:production \ + --target production -t $CONTAINER_IMAGE:production \ --target production -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE \ ./$CONTAINER_IMAGE - # Only push to registry on master - name: Push (DEV) if: github.ref == 'refs/heads/develop' run: | # Push image to AWS ECR aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - docker tag $CONTAINER_IMAGE-dev:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} - docker tag $CONTAINER_IMAGE-dev:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:production - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:production + docker tag $CONTAINER_IMAGE:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:${{ github.sha }} + docker tag $CONTAINER_IMAGE:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:production + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:${{ github.sha }} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:production - - name: Push (PROD) - if: github.ref == 'refs/heads/main' - run: | - # Push image to AWS ECR - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - docker tag $CONTAINER_IMAGE-prod:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} - docker tag $CONTAINER_IMAGE-prod:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:production - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:production + - name: Deploy to EKS (DEV) + if: github.ref == 'refs/heads/develop' + run: | # defaults to latest kubectl binary version + kubectl apply -f $CONTAINER_IMAGE/deployment.yaml + kubectl set image deployment/reverse-proxy-service reverse-proxy-service=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:${{ github.sha }} --record - # TODO: deploy where? + - name: Verify EKS Deployment (DEV) + if: github.ref == 'refs/heads/develop' + run: | + kubectl rollout status deployment/reverse-proxy-service diff --git a/reverse-proxy-service/Dockerfile b/reverse-proxy-service/Dockerfile index 86d60f5c2..549c3dfea 100644 --- a/reverse-proxy-service/Dockerfile +++ b/reverse-proxy-service/Dockerfile @@ -29,6 +29,6 @@ USER node COPY --chown=node:node ./dist/ . -EXPOSE 5555 +EXPOSE 5678 CMD [ "dumb-init", "node", "dist/index.js"] diff --git a/reverse-proxy-service/README.md b/reverse-proxy-service/README.md index f13702a24..d5a314a06 100644 --- a/reverse-proxy-service/README.md +++ b/reverse-proxy-service/README.md @@ -27,7 +27,7 @@ docker build . -t proxy-service docker run --network=host -e PROXY_MAPPING_EXAMPLE="https://example.com" proxy-service ``` -Regardless of which mode, the service listens on port 5555. It can be tested by sending a request: +Regardless of which mode, the service listens on port 5678. It can be tested by sending a request: ```shell -curl http://localhost:5555/example +curl http://localhost:5678/example ``` diff --git a/reverse-proxy-service/deployment.yml b/reverse-proxy-service/deployment.yml new file mode 100755 index 000000000..437829110 --- /dev/null +++ b/reverse-proxy-service/deployment.yml @@ -0,0 +1,65 @@ +apiVersion: v1 +kind: Service +metadata: + name: reverse-proxy-service + labels: + App: ReverseProxyService +spec: + type: ClusterIP + selector: + App: ReverseProxyService + ports: + - name: api + port: 5678 + targetPort: 5678 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: reverse-proxy-service + labels: + App: ReverseProxyService +spec: + replicas: 1 + revisionHistoryLimit: 2 + selector: + matchLabels: + App: ReverseProxyService + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + annotations: + vault.hashicorp.com/agent-inject: 'true' + vault.hashicorp.com/agent-inject-status: 'update' + vault.hashicorp.com/role: app-vault-reader + vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/production/db + vault.hashicorp.com/agent-inject-template-config: | + {{- with secret "secrets/desci-server/production/" -}} + echo "sourcing"; + export PROXY_MAPPING_SEPOLIA={{ .Data.PROXY_MAPPING_SEPOLIA }} + + {{- end -}} + labels: + App: ReverseProxyService + spec: + containers: + - image: 523044037273.dkr.ecr.us-east-2.amazonaws.com/reverse-proxy-service:latest + name: reverse-proxy-service + command: ['/bin/bash', '-c'] + args: + - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; + ports: + - containerPort: 5678 + name: api + resources: + limits: + cpu: '2' + memory: 16Gi + requests: + cpu: '1' + memory: 8Gi + serviceAccountName: 'vault-auth' diff --git a/reverse-proxy-service/src/index.ts b/reverse-proxy-service/src/index.ts index 1e28ba78c..a397bf05c 100644 --- a/reverse-proxy-service/src/index.ts +++ b/reverse-proxy-service/src/index.ts @@ -73,4 +73,4 @@ app.use( } ); -app.listen(5555); +app.listen(5678); From 34140956fc97a5f22309b1d8b5230825e712e3b1 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 9 Apr 2024 16:33:56 +0200 Subject: [PATCH 073/141] reverse-proxy: add to root readme --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 06781b23a..5ad13ddaf 100644 --- a/README.md +++ b/README.md @@ -77,9 +77,13 @@ This is a NodeJS backend that manages draft Nodes. It maintains a user auth, ver ## **nodes-lib** -A library for programmatically interacting with Nodes, basically allowing automation of actions possible in the webapp. See separate documentation in the [README](./nodes-lib/README.md) +A library for programmatically interacting with Nodes, basically allowing automation of actions possible in the webapp. See separate documentation in the [README](./nodes-lib/README.md).

+## **reverse-proxy-service** + +A tiny service for proxying route segments to given target URL's, allowing hiding many target destinations under aliases on one domain. See docs in [README](./reverse-proxy-service/README.md). + ## **desci-art-viewer** Nobody knows why this is still here, but it implements a React+Three.js 3d torus that plays [Conway's Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) on the surface of the torus. We were totally inspired by [this gif on Wikipedia](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life#/media/File:Trefoil_knot_conways_game_of_life.gif) and it only seems to work on Mac/Linux right now, YMMV. From 22aa3914c4369bb18dc91946896b042ddbca69d0 Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 9 Apr 2024 16:50:12 +0200 Subject: [PATCH 074/141] reverse-proxy: fix bug on cleanbuild in dockerfile prod stage --- reverse-proxy-service/Dockerfile | 2 +- reverse-proxy-service/deployment.yml | 30 ++++++++++++++++++++++++---- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/reverse-proxy-service/Dockerfile b/reverse-proxy-service/Dockerfile index 549c3dfea..1db76bb14 100644 --- a/reverse-proxy-service/Dockerfile +++ b/reverse-proxy-service/Dockerfile @@ -27,7 +27,7 @@ RUN --mount=type=cache,target=/usr/src/app/.npm \ ENV NODE_ENV production USER node -COPY --chown=node:node ./dist/ . +COPY --chown=node:node --from=builder /usr/src/app/dist ./dist EXPOSE 5678 diff --git a/reverse-proxy-service/deployment.yml b/reverse-proxy-service/deployment.yml index 437829110..9d726aab1 100755 --- a/reverse-proxy-service/deployment.yml +++ b/reverse-proxy-service/deployment.yml @@ -20,7 +20,7 @@ metadata: labels: App: ReverseProxyService spec: - replicas: 1 + replicas: 2 revisionHistoryLimit: 2 selector: matchLabels: @@ -57,9 +57,31 @@ spec: name: api resources: limits: - cpu: '2' - memory: 16Gi + cpu: '1' + memory: 2Gi requests: cpu: '1' - memory: 8Gi + memory: 2Gi + # restart pod after failureThreshold*periodSeconds total seconds + livenessProbe: + httpGet: + path: / + port: server-api + failureThreshold: 80 + periodSeconds: 3 + # temporarily stop sending traffic to pod after failureThreshold*periodSeconds total seconds + readinessProbe: + httpGet: + path: / + port: server-api + failureThreshold: 3 + periodSeconds: 1 + # wait for pod to start for failureThreshold*periodSeconds total seconds + startupProbe: + httpGet: + path: / + port: server-api + failureThreshold: 200 + periodSeconds: 1 + serviceAccountName: 'vault-auth' From 631fd5e04c75ecf5e7fb27ff2fb33be3bd5a40bc Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 16 Apr 2024 10:22:27 +0200 Subject: [PATCH 075/141] reverse-proxy: build & deploy for dev/staging/prod --- .../workflows/build-reverse-proxy-service.yml | 82 ------------- .github/workflows/build-reverse-proxy.yaml | 112 ++++++++++++++++++ .../workflows/deploy-staging-services.yaml | 58 +++++++++ .../.gitignore | 0 .../Dockerfile | 0 .../README.md | 0 reverse-proxy/kubernetes/deployment_dev.yaml | 93 +++++++++++++++ .../kubernetes/deployment_prod.yaml | 70 ++++++----- .../kubernetes/deployment_staging.yaml | 93 +++++++++++++++ .../package-lock.json | 0 .../package.json | 0 .../src/index.ts | 4 + .../tsconfig.json | 0 13 files changed, 398 insertions(+), 114 deletions(-) delete mode 100644 .github/workflows/build-reverse-proxy-service.yml create mode 100644 .github/workflows/build-reverse-proxy.yaml rename {reverse-proxy-service => reverse-proxy}/.gitignore (100%) rename {reverse-proxy-service => reverse-proxy}/Dockerfile (100%) rename {reverse-proxy-service => reverse-proxy}/README.md (100%) create mode 100755 reverse-proxy/kubernetes/deployment_dev.yaml rename reverse-proxy-service/deployment.yml => reverse-proxy/kubernetes/deployment_prod.yaml (58%) create mode 100755 reverse-proxy/kubernetes/deployment_staging.yaml rename {reverse-proxy-service => reverse-proxy}/package-lock.json (100%) rename {reverse-proxy-service => reverse-proxy}/package.json (100%) rename {reverse-proxy-service => reverse-proxy}/src/index.ts (96%) rename {reverse-proxy-service => reverse-proxy}/tsconfig.json (100%) diff --git a/.github/workflows/build-reverse-proxy-service.yml b/.github/workflows/build-reverse-proxy-service.yml deleted file mode 100644 index b4aebd948..000000000 --- a/.github/workflows/build-reverse-proxy-service.yml +++ /dev/null @@ -1,82 +0,0 @@ -# build.yml -on: - workflow_dispatch: - push: - paths: - - reverse-proxy-service/** - branches: - - develop - - main - -# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html -env: - AWS_DEFAULT_REGION: us-east-2 - AWS_DEFAULT_OUTPUT: json - AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - CONTAINER_IMAGE: reverse-proxy-service - DOCKER_BUILDKIT: 1 - -jobs: - build-and-push: - name: Build and deploy - runs-on: ubuntu-latest - steps: - - uses: hashicorp/setup-terraform@v1 - - name: Checkout - uses: actions/checkout@v4 - - # Add steps here like linting, testing, minification, etc. - - id: install-aws-cli - uses: unfor19/install-aws-cli-action@v1 - with: - version: 1 - - - uses: prepor/action-aws-iam-authenticator@master - - run: aws-iam-authenticator version - - - name: Install Kubectl - run: | - #$(curl -Ls https://dl.k8s.io/release/stable.txt) - version=v1.23.6 - echo "using kubectl@$version" - curl -sLO "https://dl.k8s.io/release/$version/bin/linux/amd64/kubectl" -o kubectl - chmod +x kubectl - mv kubectl /usr/local/bin - mkdir $HOME/.kube - sudo apt-get update - sudo apt-get install less - echo ${{ secrets.KUBE_CONFIG_DATA }} | base64 --decode > $HOME/.kube/config - aws sts get-caller-identity - kubectl describe deployments - - - name: Build and tag the image (DEV) - if: github.ref == 'refs/heads/develop' - run: | - # Build and tag the image - docker build \ - --target production -t $CONTAINER_IMAGE:production \ - --target production -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE \ - ./$CONTAINER_IMAGE - - - name: Push (DEV) - if: github.ref == 'refs/heads/develop' - run: | - # Push image to AWS ECR - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - docker tag $CONTAINER_IMAGE:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:${{ github.sha }} - docker tag $CONTAINER_IMAGE:production $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:production - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:${{ github.sha }} - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:production - - - name: Deploy to EKS (DEV) - if: github.ref == 'refs/heads/develop' - run: | # defaults to latest kubectl binary version - kubectl apply -f $CONTAINER_IMAGE/deployment.yaml - kubectl set image deployment/reverse-proxy-service reverse-proxy-service=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE:${{ github.sha }} --record - - - name: Verify EKS Deployment (DEV) - if: github.ref == 'refs/heads/develop' - run: | - kubectl rollout status deployment/reverse-proxy-service diff --git a/.github/workflows/build-reverse-proxy.yaml b/.github/workflows/build-reverse-proxy.yaml new file mode 100644 index 000000000..60e127325 --- /dev/null +++ b/.github/workflows/build-reverse-proxy.yaml @@ -0,0 +1,112 @@ +# build.yml +on: + workflow_dispatch: + push: + paths: + - reverse-proxy-service/** + branches: + - develop + - main + +# https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html +env: + AWS_DEFAULT_REGION: us-east-2 + AWS_DEFAULT_OUTPUT: json + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + CONTAINER_IMAGE: reverse-proxy + DOCKER_BUILDKIT: 1 + +jobs: + build-and-push: + name: Build and deploy + runs-on: ubuntu-latest + steps: + - uses: hashicorp/setup-terraform@v1 + - name: Checkout + uses: actions/checkout@v4 + + # Add steps here like linting, testing, minification, etc. + - id: install-aws-cli + uses: unfor19/install-aws-cli-action@v1 + with: + version: 1 + + - uses: prepor/action-aws-iam-authenticator@master + - run: aws-iam-authenticator version + + - name: Install Kubectl + run: | + #$(curl -Ls https://dl.k8s.io/release/stable.txt) + version=v1.23.6 + echo "using kubectl@$version" + curl -sLO "https://dl.k8s.io/release/$version/bin/linux/amd64/kubectl" -o kubectl + chmod +x kubectl + mv kubectl /usr/local/bin + mkdir $HOME/.kube + sudo apt-get update + sudo apt-get install less + echo ${{ secrets.KUBE_CONFIG_DATA }} | base64 --decode > $HOME/.kube/config + aws sts get-caller-identity + kubectl describe deployments + + - name: Build and tag the image (DEV) + if: github.ref == 'refs/heads/develop' + run: | + # Build and tag the image + docker build \ + -t $CONTAINER_IMAGE-dev:latest \ + -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev \ + ./$CONTAINER_IMAGE + + - name: Build and tag the image (PROD) + if: github.ref == 'refs/heads/main' + run: | + # Build and tag the image + docker build \ + -t $CONTAINER_IMAGE-production:latest \ + -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod \ + ./$CONTAINER_IMAGE + + - name: Push (DEV) + if: github.ref == 'refs/heads/develop' + run: | + # Push image to AWS ECR + aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + docker tag $CONTAINER_IMAGE-dev:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} + docker tag $CONTAINER_IMAGE-dev:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:latest + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:latest + + - name: Push (PROD) + if: github.ref == 'refs/heads/main' + run: | + # Push image to AWS ECR + aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + docker tag $CONTAINER_IMAGE-prod:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} + docker tag $CONTAINER_IMAGE-prod:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:latest + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:latest + + - name: Deploy to EKS (DEV) + if: github.ref == 'refs/heads/develop' + run: | # defaults to latest kubectl binary version + kubectl apply -f $CONTAINER_IMAGE/kubernetes/deployment_dev.yaml + kubectl set image deployment/reverse-proxy-dev reverse-proxy-dev=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-dev:${{ github.sha }} --record + + - name: Deploy to EKS (PROD) + if: github.ref == 'refs/heads/main' + run: | # defaults to latest kubectl binary version + kubectl apply -f $CONTAINER_IMAGE/kubernetes/deployment_prod.yaml + kubectl set image deployment/reverse-proxy-prod reverse-proxy-prod=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod:${{ github.sha }} --record + + - name: Verify EKS Deployment (DEV) + if: github.ref == 'refs/heads/develop' + run: | + kubectl rollout status deployment/reverse-proxy-dev + + - name: Verify EKS Deployment (PROD) + if: github.ref == 'refs/heads/main' + run: | + kubectl rollout status deployment/reverse-proxy-prod diff --git a/.github/workflows/deploy-staging-services.yaml b/.github/workflows/deploy-staging-services.yaml index 55feedae3..5dba2ae82 100644 --- a/.github/workflows/deploy-staging-services.yaml +++ b/.github/workflows/deploy-staging-services.yaml @@ -257,3 +257,61 @@ jobs: - name: Verify EKS Deployment (STAGING)' run: | kubectl rollout status deployment/desci-server-staging + + build-reverse-proxy: + name: Build and deploy reverse-proxy STAGING + runs-on: ubuntu-latest + steps: + - uses: hashicorp/setup-terraform@v1 + - name: Checkout + uses: actions/checkout@v4 + + # Add steps here like linting, testing, minification, etc. + - id: install-aws-cli + uses: unfor19/install-aws-cli-action@v1 + with: + version: 1 + + - uses: prepor/action-aws-iam-authenticator@master + - run: aws-iam-authenticator version + + - name: Install Kubectl + run: | + #$(curl -Ls https://dl.k8s.io/release/stable.txt) + version=v1.23.6 + echo "using kubectl@$version" + curl -sLO "https://dl.k8s.io/release/$version/bin/linux/amd64/kubectl" -o kubectl + chmod +x kubectl + mv kubectl /usr/local/bin + mkdir $HOME/.kube + sudo apt-get update + sudo apt-get install less + echo ${{ secrets.KUBE_CONFIG_DATA }} | base64 --decode > $HOME/.kube/config + aws sts get-caller-identity + kubectl describe deployments + + - name: Build and tag the image (STAGING) + run: | + # Build and tag the image + docker build \ + -t $CONTAINER_IMAGE-staging:latest \ + -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging \ + ./$CONTAINER_IMAGE + + - name: Push (STAGING) + run: | + # Push image to AWS ECR + aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com + docker tag $CONTAINER_IMAGE-staging:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:${{ github.sha }} + docker tag $CONTAINER_IMAGE-staging:latest $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:latest + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:${{ github.sha }} + docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:latest + + - name: Deploy to EKS (STAGING) + run: | # defaults to latest kubectl binary version + kubectl apply -f $CONTAINER_IMAGE/deployment.yaml + kubectl set image deployment/reverse-proxy-staging reverse-proxy-staging=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-staging:${{ github.sha }} --record + + - name: Verify EKS Deployment (STAGING) + run: | + kubectl rollout status deployment/reverse-proxy-staging diff --git a/reverse-proxy-service/.gitignore b/reverse-proxy/.gitignore similarity index 100% rename from reverse-proxy-service/.gitignore rename to reverse-proxy/.gitignore diff --git a/reverse-proxy-service/Dockerfile b/reverse-proxy/Dockerfile similarity index 100% rename from reverse-proxy-service/Dockerfile rename to reverse-proxy/Dockerfile diff --git a/reverse-proxy-service/README.md b/reverse-proxy/README.md similarity index 100% rename from reverse-proxy-service/README.md rename to reverse-proxy/README.md diff --git a/reverse-proxy/kubernetes/deployment_dev.yaml b/reverse-proxy/kubernetes/deployment_dev.yaml new file mode 100755 index 000000000..df37a668d --- /dev/null +++ b/reverse-proxy/kubernetes/deployment_dev.yaml @@ -0,0 +1,93 @@ +apiVersion: v1 +kind: Service +metadata: + name: public-reverse-proxy-dev-service + labels: + App: ReverseProxyDev +spec: + type: LoadBalancer + selector: + App: ReverseProxyDev + ports: + - protocol: TCP + name: api + port: 80 + targetPort: 5678 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: reverse-proxy-dev-ingress + annotations: + kubernetes.io/ingress.class: "nginx" +spec: + rules: + - host: reverse-proxy-dev.desci.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: public-reverse-proxy-dev + port: + number: 80 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: reverse-proxy-dev + labels: + App: ReverseProxyDev +spec: + replicas: 2 + revisionHistoryLimit: 2 + selector: + matchLabels: + App: ReverseProxyDev + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + annotations: + vault.hashicorp.com/agent-inject: 'true' + vault.hashicorp.com/agent-inject-status: 'update' + vault.hashicorp.com/role: app-vault-reader + vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/dev/db + vault.hashicorp.com/agent-inject-template-config: | + {{- with secret "secrets/desci-server/dev/" -}} + echo "sourcing"; + export PROXY_MAPPING_RPC_SEPOLIA={{ .Data.PROXY_MAPPING_RPC_SEPOLIA }} + export PROXY_MAPPING_RPC_MAINNET={{ .Data.PROXY_MAPPING_RPC_MAINNET }} + + {{- end -}} + labels: + App: ReverseProxyDev + spec: + containers: + - image: 523044037273.dkr.ecr.us-east-2.amazonaws.com/reverse-proxy-dev:latest + name: reverse-proxy-dev + command: ['/bin/bash', '-c'] + args: + - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; + ports: + - containerPort: 5678 + name: api + resources: + limits: + cpu: '1' + memory: 2Gi + requests: + cpu: '1' + memory: 2Gi + # restart pod after failureThreshold*periodSeconds total seconds + livenessProbe: + httpGet: + path: /healthcheck + port: api + failureThreshold: 10 + periodSeconds: 3 + serviceAccountName: 'vault-auth' diff --git a/reverse-proxy-service/deployment.yml b/reverse-proxy/kubernetes/deployment_prod.yaml similarity index 58% rename from reverse-proxy-service/deployment.yml rename to reverse-proxy/kubernetes/deployment_prod.yaml index 9d726aab1..72263fbae 100755 --- a/reverse-proxy-service/deployment.yml +++ b/reverse-proxy/kubernetes/deployment_prod.yaml @@ -1,30 +1,50 @@ apiVersion: v1 kind: Service metadata: - name: reverse-proxy-service + name: public-reverse-proxy-prod-service labels: - App: ReverseProxyService + App: ReverseProxyProd spec: - type: ClusterIP + type: LoadBalancer selector: - App: ReverseProxyService + App: ReverseProxyProd ports: - - name: api - port: 5678 + - protocol: TCP + name: api + port: 80 targetPort: 5678 --- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: reverse-proxy-prod-ingress + annotations: + kubernetes.io/ingress.class: "nginx" +spec: + rules: + - host: reverse-proxy-prod.desci.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: public-reverse-proxy-prod + port: + number: 80 +--- apiVersion: apps/v1 kind: Deployment metadata: - name: reverse-proxy-service + name: reverse-proxy-prod labels: - App: ReverseProxyService + App: ReverseProxyProd spec: replicas: 2 revisionHistoryLimit: 2 selector: matchLabels: - App: ReverseProxyService + App: ReverseProxyProd strategy: rollingUpdate: maxSurge: 25% @@ -39,16 +59,17 @@ spec: vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/production/db vault.hashicorp.com/agent-inject-template-config: | {{- with secret "secrets/desci-server/production/" -}} - echo "sourcing"; - export PROXY_MAPPING_SEPOLIA={{ .Data.PROXY_MAPPING_SEPOLIA }} + echo "sourcing"; + export PROXY_MAPPING_RPC_SEPOLIA={{ .Data.PROXY_MAPPING_RPC_SEPOLIA }} + export PROXY_MAPPING_RPC_MAINNET={{ .Data.PROXY_MAPPING_RPC_MAINNET }} {{- end -}} labels: - App: ReverseProxyService + App: ReverseProxyProd spec: containers: - - image: 523044037273.dkr.ecr.us-east-2.amazonaws.com/reverse-proxy-service:latest - name: reverse-proxy-service + - image: 523044037273.dkr.ecr.us-east-2.amazonaws.com/reverse-proxy-prod:latest + name: reverse-proxy-prod command: ['/bin/bash', '-c'] args: - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; @@ -65,23 +86,8 @@ spec: # restart pod after failureThreshold*periodSeconds total seconds livenessProbe: httpGet: - path: / - port: server-api - failureThreshold: 80 + path: /healthcheck + port: api + failureThreshold: 10 periodSeconds: 3 - # temporarily stop sending traffic to pod after failureThreshold*periodSeconds total seconds - readinessProbe: - httpGet: - path: / - port: server-api - failureThreshold: 3 - periodSeconds: 1 - # wait for pod to start for failureThreshold*periodSeconds total seconds - startupProbe: - httpGet: - path: / - port: server-api - failureThreshold: 200 - periodSeconds: 1 - serviceAccountName: 'vault-auth' diff --git a/reverse-proxy/kubernetes/deployment_staging.yaml b/reverse-proxy/kubernetes/deployment_staging.yaml new file mode 100755 index 000000000..25ae713fc --- /dev/null +++ b/reverse-proxy/kubernetes/deployment_staging.yaml @@ -0,0 +1,93 @@ +apiVersion: v1 +kind: Service +metadata: + name: public-reverse-proxy-staging-service + labels: + App: ReverseProxyStaging +spec: + type: LoadBalancer + selector: + App: ReverseProxyStaging + ports: + - protocol: TCP + name: api + port: 80 + targetPort: 5678 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: reverse-proxy-staging-ingress + annotations: + kubernetes.io/ingress.class: "nginx" +spec: + rules: + - host: reverse-proxy-staging.desci.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: public-reverse-proxy-staging + port: + number: 80 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: reverse-proxy-staging + labels: + App: ReverseProxyStaging +spec: + replicas: 2 + revisionHistoryLimit: 2 + selector: + matchLabels: + App: ReverseProxyStaging + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + annotations: + vault.hashicorp.com/agent-inject: 'true' + vault.hashicorp.com/agent-inject-status: 'update' + vault.hashicorp.com/role: app-vault-reader + vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/staging/db + vault.hashicorp.com/agent-inject-template-config: | + {{- with secret "secrets/desci-server/staging/" -}} + echo "sourcing"; + export PROXY_MAPPING_RPC_SEPOLIA={{ .Data.PROXY_MAPPING_RPC_SEPOLIA }} + export PROXY_MAPPING_RPC_MAINNET={{ .Data.PROXY_MAPPING_RPC_MAINNET }} + + {{- end -}} + labels: + App: ReverseProxyStaging + spec: + containers: + - image: 523044037273.dkr.ecr.us-east-2.amazonaws.com/reverse-proxy-staging:latest + name: reverse-proxy-staging + command: ['/bin/bash', '-c'] + args: + - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; + ports: + - containerPort: 5678 + name: api + resources: + limits: + cpu: '1' + memory: 2Gi + requests: + cpu: '1' + memory: 2Gi + # restart pod after failureThreshold*periodSeconds total seconds + livenessProbe: + httpGet: + path: /healthcheck + port: api + failureThreshold: 10 + periodSeconds: 3 + serviceAccountName: 'vault-auth' diff --git a/reverse-proxy-service/package-lock.json b/reverse-proxy/package-lock.json similarity index 100% rename from reverse-proxy-service/package-lock.json rename to reverse-proxy/package-lock.json diff --git a/reverse-proxy-service/package.json b/reverse-proxy/package.json similarity index 100% rename from reverse-proxy-service/package.json rename to reverse-proxy/package.json diff --git a/reverse-proxy-service/src/index.ts b/reverse-proxy/src/index.ts similarity index 96% rename from reverse-proxy-service/src/index.ts rename to reverse-proxy/src/index.ts index a397bf05c..9e0fc4ac6 100644 --- a/reverse-proxy-service/src/index.ts +++ b/reverse-proxy/src/index.ts @@ -66,6 +66,10 @@ const app = express(); Object.entries(mapping) .forEach(([alias, target]) => app.use(alias, createProxy(target))); +app.use("/healthcheck", (_req, res) => { + res.send("I'm doing OK"); +}); + app.use( (req, res) => { console.log(`Got request for unmapped path ${req.url}, responding 404.`); diff --git a/reverse-proxy-service/tsconfig.json b/reverse-proxy/tsconfig.json similarity index 100% rename from reverse-proxy-service/tsconfig.json rename to reverse-proxy/tsconfig.json From 72fab4ad443b1168383f301adf7be1234f4b834a Mon Sep 17 00:00:00 2001 From: m0ar Date: Tue, 16 Apr 2024 10:56:01 +0200 Subject: [PATCH 076/141] reverse-proxy: nerf to 1 replica in dev/staging --- reverse-proxy/kubernetes/deployment_dev.yaml | 2 +- reverse-proxy/kubernetes/deployment_staging.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reverse-proxy/kubernetes/deployment_dev.yaml b/reverse-proxy/kubernetes/deployment_dev.yaml index df37a668d..bd1d5e254 100755 --- a/reverse-proxy/kubernetes/deployment_dev.yaml +++ b/reverse-proxy/kubernetes/deployment_dev.yaml @@ -40,7 +40,7 @@ metadata: labels: App: ReverseProxyDev spec: - replicas: 2 + replicas: 1 revisionHistoryLimit: 2 selector: matchLabels: diff --git a/reverse-proxy/kubernetes/deployment_staging.yaml b/reverse-proxy/kubernetes/deployment_staging.yaml index 25ae713fc..d7b3f906d 100755 --- a/reverse-proxy/kubernetes/deployment_staging.yaml +++ b/reverse-proxy/kubernetes/deployment_staging.yaml @@ -40,7 +40,7 @@ metadata: labels: App: ReverseProxyStaging spec: - replicas: 2 + replicas: 1 revisionHistoryLimit: 2 selector: matchLabels: From 0cefed1af2701bf16e72192fd0545c2cee549c5e Mon Sep 17 00:00:00 2001 From: kadami Date: Wed, 17 Apr 2024 04:35:41 +0700 Subject: [PATCH 077/141] enrich fetching users collabed nodes endpoint to return more data --- desci-server/src/services/Contributors.ts | 43 +++++++++++++++++------ 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 8d8351c64..96c469d2b 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -1,5 +1,6 @@ import { format } from 'path'; +import { IpldUrl, ResearchObjectV1Dpid } from '@desci-labs/desci-models'; import { Node, NodeContribution, User } from '@prisma/client'; import ShortUniqueId from 'short-unique-id'; @@ -8,6 +9,8 @@ import { logger as parentLogger } from '../logger.js'; import { getIndexedResearchObjects } from '../theGraph.js'; import { formatOrcidString, hexToCid } from '../utils.js'; +import { getManifestByCid } from './data/processing.js'; + type ContributorId = string; export type NodeContributorMap = Record; @@ -24,7 +27,15 @@ export interface NodeContributorAuthed extends NodeContributor { orcid?: string; } -export type UserContribution = { uuid: string; manifestCid: string }; +export type UserContribution = { + uuid: string; + manifestCid: string; + title: string; + versions: number; + coverImageCid: string | IpldUrl; + dpid: ResearchObjectV1Dpid; + publishDate: string; +}; export type Contribution = { nodeUuid: string; @@ -184,16 +195,28 @@ class ContributorService { const nodeUuids = contributions.map((contribution) => contribution.node.uuid); // Filter out for published works const { researchObjects } = await getIndexedResearchObjects(nodeUuids); - const NodesWithManifestCids = researchObjects.map((ro) => { - // convert hex string to integer - const nodeUuidInt = Buffer.from(ro.id.substring(2), 'hex'); - // convert integer to hex - const nodeUuid = nodeUuidInt.toString('base64url'); - - return { uuid: nodeUuid, manifestCid: hexToCid(ro.recentCid) }; - }); + const filledContributions = await Promise.all( + researchObjects.map(async (ro) => { + // convert hex string to integer + const nodeUuidInt = Buffer.from(ro.id.substring(2), 'hex'); + // convert integer to hex + const nodeUuid = nodeUuidInt.toString('base64url'); + const manifestCid = hexToCid(ro.recentCid); + const latestManifest = await getManifestByCid(manifestCid); + + return { + uuid: nodeUuid, + manifestCid, + title: latestManifest.title, + versions: ro.versions.length, + coverImageCid: latestManifest.coverImage, + dpid: latestManifest.dpid, + publishDate: ro.versions[0].time, + }; + }), + ); // debugger; - return NodesWithManifestCids || []; + return filledContributions || []; } /** From 10e041938a3602cdbf3b2a7c9fa9c1e39e887d63 Mon Sep 17 00:00:00 2001 From: kadami Date: Wed, 17 Apr 2024 05:14:46 +0700 Subject: [PATCH 078/141] type fixes --- desci-server/src/services/Contributors.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 96c469d2b..55b9e72a3 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -30,10 +30,10 @@ export interface NodeContributorAuthed extends NodeContributor { export type UserContribution = { uuid: string; manifestCid: string; - title: string; + title?: string; versions: number; - coverImageCid: string | IpldUrl; - dpid: ResearchObjectV1Dpid; + coverImageCid?: string | IpldUrl; + dpid?: ResearchObjectV1Dpid; publishDate: string; }; From 058f41221669d5ed89ba87ca95581cab11290c6f Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 17 Apr 2024 10:44:11 +0200 Subject: [PATCH 079/141] reverse-proxy: typo in workflow container tag --- .github/workflows/build-reverse-proxy.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-reverse-proxy.yaml b/.github/workflows/build-reverse-proxy.yaml index 60e127325..9cfcb68bd 100644 --- a/.github/workflows/build-reverse-proxy.yaml +++ b/.github/workflows/build-reverse-proxy.yaml @@ -3,7 +3,7 @@ on: workflow_dispatch: push: paths: - - reverse-proxy-service/** + - reverse-proxy/** branches: - develop - main @@ -65,7 +65,7 @@ jobs: run: | # Build and tag the image docker build \ - -t $CONTAINER_IMAGE-production:latest \ + -t $CONTAINER_IMAGE-prod:latest \ -t $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$CONTAINER_IMAGE-prod \ ./$CONTAINER_IMAGE From c3bc8b4ccbac516677f435f2c082df8ef80502f6 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 14:06:32 +0200 Subject: [PATCH 080/141] wip: protected attestations feature --- .../migration.sql | 2 + desci-server/prisma/schema.prisma | 1 + desci-server/scripts/be-node-dev.sh | 2 +- .../attestations/recommendations.ts | 14 ++ .../controllers/attestations/verification.ts | 2 - desci-server/src/data/communities.json | 102 ++++++++-- .../src/routes/v1/communities/index.ts | 8 + desci-server/src/scripts/seed-social-data.ts | 2 + desci-server/src/services/Attestation.ts | 12 ++ desci-server/src/services/Communities.ts | 13 +- .../test/integration/Attestation.test.ts | 175 +++++++++++++++++- .../test/integration/community.test.ts | 48 ++++- 12 files changed, 345 insertions(+), 36 deletions(-) create mode 100644 desci-server/prisma/migrations/20240417110758_add_protected_column_to_attestations_table/migration.sql diff --git a/desci-server/prisma/migrations/20240417110758_add_protected_column_to_attestations_table/migration.sql b/desci-server/prisma/migrations/20240417110758_add_protected_column_to_attestations_table/migration.sql new file mode 100644 index 000000000..a5188eb57 --- /dev/null +++ b/desci-server/prisma/migrations/20240417110758_add_protected_column_to_attestations_table/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Attestation" ADD COLUMN "protected" BOOLEAN NOT NULL DEFAULT false; diff --git a/desci-server/prisma/schema.prisma b/desci-server/prisma/schema.prisma index 9a6880371..52039376a 100755 --- a/desci-server/prisma/schema.prisma +++ b/desci-server/prisma/schema.prisma @@ -668,6 +668,7 @@ model Attestation { description String image_url String templateId Int? + protected Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt community DesciCommunity @relation(fields: [communityId], references: [id]) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index 3a7941689..f01296753 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -4,7 +4,7 @@ apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run diff --git a/desci-server/src/controllers/attestations/recommendations.ts b/desci-server/src/controllers/attestations/recommendations.ts index ed4d89653..8847fa18a 100644 --- a/desci-server/src/controllers/attestations/recommendations.ts +++ b/desci-server/src/controllers/attestations/recommendations.ts @@ -54,3 +54,17 @@ export const getCommunityRecommendations = async (req: Request, res: Response, _ logger.info({ attestations: attestations.length, communityName }, 'GetCommunityRecommendations'); return new SuccessResponse(attestations).send(res); }; + +export const getValidatedAttestations = async (req: Request, res: Response, _next: NextFunction) => { + const { communityName } = req.params; + logger.info({ communityName }); + const community = await communityService.findCommunityByNameOrSlug(communityName); + if (!community) throw new NotFoundError('Community not found'); + logger.info({ community }); + + const attestations = await attestationService.getCommunityAttestations({ + communityId: community.id, + protected: true, + }); + return new SuccessResponse(attestations).send(res); +}; diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index 02f1d80ce..c3550ddee 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -73,8 +73,6 @@ export const addVerification = async ( }); logger.trace(`addVerification`); - if (!claimId) throw new BadRequestError('Claim ID is required'); - await attestationService.verifyClaim(parseInt(claimId), user.id); return new SuccessMessageResponse().send(res); }; diff --git a/desci-server/src/data/communities.json b/desci-server/src/data/communities.json index 04ce6e77d..f7056cfe6 100644 --- a/desci-server/src/data/communities.json +++ b/desci-server/src/data/communities.json @@ -15,18 +15,36 @@ ], "image_url": "https://pub.desci.com/ipfs/bafkreie7kxhzpzhsbywcrpgyv5yvy3qxcjsibuxsnsh5olaztl2uvnrzx4", "slug": "gridcoin", - "requiredAttestations": ["Reproducibility Enabled", "Used BOINC", "Used Folding@home"], - "members": ["Gridcoin Network"], - "links": ["https://gridcoin.us", "https://boinc.berkeley.edu"] + "requiredAttestations": [ + "Reproducibility Enabled", + "Used BOINC", + "Used Folding@home" + ], + "members": [ + "Gridcoin Network" + ], + "links": [ + "https://gridcoin.us", + "https://boinc.berkeley.edu" + ] }, { "name": "Longevist", "subtitle": "Curating the world's most exciting longevity research", - "keywords": ["Longevity", "Biomedicine", "Aging", "Healthspan"], + "keywords": [ + "Longevity", + "Biomedicine", + "Aging", + "Healthspan" + ], "description": "Supporting VitaDAO's mission to improve healthspan, we endeavour to spotlight the most groundbreaking longevity studies each quarter. Our editorial team utilises a combination of social listening tools, AI, and an expansive network to forge a shortlist of preprint contenders. Our expert panel of Longevist Curators then vote in a quarterly battle royale to establish the cream of the crop.\n\nPreprints have revolutionised scientific publishing by enabling researchers to share their discoveries with the world immediately. However, the sheer volume of preprints being published on a daily basis results in an overwhelming landscape for those eager to keep up with the cutting edge of science.\n\nThis is where The Longevist steps in.\n\nIn addition to curation, The Longevist fosters a space for collaborative discourse, through our peer review platform - The Longevity Decentralised Review - to seamlessly blend expert insights with user-friendly, advanced technology.\n\nWe invite you to join this vibrant community. Dive deep into the latest in longevity science and play a pivotal role in shaping the future narrative of this fascinating field.", "image_url": "https://pub.desci.com/ipfs/bafkreiexlcnfxgmyc23dhgvh4xcuuq62awioqkwcdxqdfk65si6ohr3nty", "slug": "longevist", - "requiredAttestations": ["Scientific Manuscript", "Longevity Research", "Commercializable"], + "requiredAttestations": [ + "Scientific Manuscript", + "Longevity Research", + "Commercializable" + ], "members": [ "Andrea Maier", "Matthew Kaeberlein", @@ -57,7 +75,10 @@ "Jan Gruber", "Julien Cherfils" ], - "links": ["https://longevist.xyz", "https://vitadao.com"] + "links": [ + "https://longevist.xyz", + "https://vitadao.com" + ] }, { "name": "MoonDAO", @@ -100,18 +121,40 @@ ], "image_url": "https://pub.desci.com/ipfs/bafkreibpwn3s6e3ftj7sd57x4oe5hkddlzboo7t6a4lh4aarsezq37nsfu", "slug": "moondao", - "requiredAttestations": ["Open Data", "Open Code", "Big if True", "Advances Space Travel"], - "members": ["Philip Linden", "Pablo Moncada-Larrotiz", "Carla Ostmann", "@Royalty"], - "links": ["https://moondao.com", "https://twitter.com/OfficialMoonDAO"] + "requiredAttestations": [ + "Open Data", + "Open Code", + "Big if True", + "Advances Space Travel" + ], + "members": [ + "Philip Linden", + "Pablo Moncada-Larrotiz", + "Carla Ostmann", + "@Royalty" + ], + "links": [ + "https://moondao.com", + "https://twitter.com/OfficialMoonDAO" + ] }, { "name": "DeSci Foundation", "subtitle": "Scientific Advances", - "keywords": ["Original Research", "Open Science", "Reproducibility", "Metascience", "Interdisciplinary"], + "keywords": [ + "Original Research", + "Open Science", + "Reproducibility", + "Metascience", + "Interdisciplinary" + ], "description": "All selected contributions can participate in the [DeSci Fund for Scientific Innovation](https://help.artizen.fund/en/articles/8387161-desci-fund-for-scientific-innovation). Outstanding contributions that demonstrate or advance best open science practices are eligible to compete for the DeSci Foundation Open Science Award.\n\n## Aims and Scope\n\nCurated by the DeSci Foundation, our feed provides a platform for disseminating high-quality research. We select original empirical research, theoretical and methodological contributions, as well as high-quality reviews, perspectives, comments, educational materials and correspondence related to the robustness and trustworthiness of the scientific record.\n\nWe welcome contributions emphasising open science practices, such as open data, open code, preregistered analysis plans, computational reproducibility, and replication studies. We prioritise rigor and transparency in scientific inquiry, aiming to shift the focus from subjective novelty claims or statistical significance to the robustness and reliability of research methodologies.\n\n### Emphasis on Replicability, Robustness, and Transparency\n\n- Manuscripts reporting empirical research results should prioritize sharing data and code to the extent possible, actively facilitating readers' ability to reproduce and validate results independently.\n- Authors are encouraged to utilize the versionability of DeSci Nodes to enhance transparency throughout the research process, incorporating best practices such as commencing a research project with a detailed analysis plan.\n\n### Cross and interdisciplinary\n\n- We welcome contributions from all scientific disciplines and encourage interdisciplinary collaborations, fostering the exchange of open-science practices across fields.\n\n### Metascience\n\n- Contributions utilizing scientific methodology to study science itself, including replication studies, mechanism design, or philosophy of science, are strongly encouraged.\n\nBy prioritizing open science practices, our feed aims to contribute to a culture of transparency, collaboration, and continuous improvement in scientific research. We believe that this approach will not only enhance the credibility of published research but also foster a community dedicated to advancing the reliability and reproducibility of scientific knowledge.\n\n## Prizes\n\nOutstanding scientific advances that demonstrate or advance best open science practices are eligible to compete for our annual Open Science Award ($3000).\n\nIn addition, the DeSci Foundation has partnered with [Artizen.Fund](https://www.artizen.fund/) to provide $10,000 of matched funding to support scientists’ innovative research via the [DeSci Fund for Scientific Innovation](https://help.artizen.fund/en/articles/8387161-desci-fund-for-scientific-innovation). All contributions selected by this feed are eligible to apply. To participate, create a visual representation of your research called an [Artifact](https://help.artizen.fund/en/articles/6604052-what-are-artifacts). Your Artifact can be any image, video, or gif that captures the spark of inspiration behind your work. Submit your Artifact and project description to https://vote.artizen.fund/submit. Selected contributions will be highlighted with an open-edition NFT. The proceeds from NFT sales and matched funding will be paid to the authors.\n\n## About Us\n\nThe DeSci Foundation is a non-profit organization registered in Geneva, Switzerland. Led by leading scientists and entrepreneurs, our mission is to explore and support improvements in the scientific ecosystem based on insights from meta-science and new opportunities afforded by cutting-edge technologies.", "image_url": "https://pub.desci.com/ipfs/bafkreidw7vyhsqss7fdf4f5mxacjj3kcq3uymfxsec7z7kypxxdus62nr4", "slug": "desci-foundation", - "requiredAttestations": ["Scientific Manuscript", "DeSci Fund for Scientific Innovation Eligibility"], + "requiredAttestations": [ + "Scientific Manuscript", + "DeSci Fund for Scientific Innovation Eligibility" + ], "members": [ "Philipp Koellinger", "Chris Hill", @@ -122,16 +165,26 @@ "James Boyd", "Andre Vacha" ], - "links": ["https://descifoundation.org", "https://twitter.com/DeSciFoundation"] + "links": [ + "https://descifoundation.org", + "https://twitter.com/DeSciFoundation" + ] }, { "name": "DeSci Labs", "subtitle": "Building tools to grow open science", - "keywords": ["Engineering", "Metascience", "Open Source"], + "keywords": [ + "Engineering", + "Metascience", + "Open Source" + ], "description": "DeSci Labs is a technology company focused on building open-source tools for the scientific community.", "image_url": "https://pub.desci.com/ipfs/bafkreia64zheao4kyaxi64gw4uwnmckmu3g5ybjyszkwdwgobs3wucxyye", "slug": "desci-labs", - "requiredAttestations": ["Open Code", "Open Data"], + "requiredAttestations": [ + "Open Code", + "Open Data" + ], "members": [ "Philipp Koellinger", "Chris Hill", @@ -142,7 +195,10 @@ "Andre Vacha", "Sina Iman" ], - "links": ["https://desci.com", "https://twitter.com/DeSciLabs"], + "links": [ + "https://desci.com", + "https://twitter.com/DeSciLabs" + ], "hidden": true } ], @@ -230,6 +286,20 @@ "description": "The [DeSci Fund for Scientific Innovation](https://help.artizen.fund/en/articles/8387161-desci-fund-for-scientific-innovation) is dedicated to advancing the future of science through the power of decentralized infrastructure. By participating in this competition, authors can earn financial rewards. Emphasizing the importance of open access and collaboration, this fund supports projects that utilize DeSci Nodes to share original scientific research with the world. We aim to empower both established researchers and citizen scientists in their endeavors, fostering an ecosystem where scientific discovery is transparent, reproducible, and accessible to all. By backing initiatives that harness DeSci Nodes for everything from hypothesis registration to data sharing and manuscript publication, we’re not just funding projects; we’re investing in a more open, collaborative, and efficient scientific future.\n\n## Eligibility Requirements\n\nTo qualify for the DeSci Fund, your project must adhere to the following criteria:\n\n- _DeSci Nodes Usage_: Projects must actively utilize DeSci Nodes for sharing research results and artifacts publicly, including a scientific manuscript that was written and submitted by the original authors. Manuscripts can be as long or short as appropriate, but they must be a PDF file containing a title on the first page, author names listed right below the title on a separate line, an abstract, a main text body, and a bibliography section titled “References” or “Bibliography” at the end. These formatting guidelines are required to enable Google Scholar to index your work. Submissions from all fields of science are welcome.\n\n- _Open Science Emphasis_: Projects should follow best open science practices to the best of their ability, including sharing artifacts such as data and code alongside manuscript, conducting research based on pre-registered analysis plans, full transparency about methods used, and making active efforts to enable the reproducibility of the reported results as much as possible. \n\n- _Innovative Research Focus_: Preference is given to projects offering novel, ambitious scientific research or technology.\n\n## Participation\n\nTo participate, create a visual representation of your research called an Artifact. Your Artifact can be any image, video, or gif that captures the spark of inspiration behind your work. Submit your Artifact and project description to [https://vote.artizen.fund/submit](https://vote.artizen.fund/submit). Selected contributions will be highlighted with an open-edition NFT. The proceeds from NFT sales and matched funding will be paid to the authors.", "image_url": "https://pub.desci.com/ipfs/bafkreihd6qhs445uq3tlool44h3lhcoan2cexa3y3ivk7pkrd4rjeheiye", "communityName": "DeSci Labs" + }, + { + "name": "Open Code", + "description": "Digitally-shareable code is available in this research object.\n\nThe code must be provided in a format that is time-stamped, immutable, and permanent. It must also have associated persistent identifiers.\n\nBy publishing your code with default licensing via DeSci Nodes, you automatically satisfy this requirement.\n\nThe code has an open license allowing others to copy, distribute, and make use of the code while allowing the licensor to retain credit and copyright as applicable.\n\nSufficient explanation is present for an independent researcher to understand how the code is used and relates to the reported methodology, including information about versions of software, systems, and packages.", + "image_url": "https://pub.desci.com/ipfs/bafkreif64vgztwiq2xfebdgzkkca34kt2k675l5ejmx42qa4fyb622yh3q", + "communityName": "DeSci Foundation", + "protected": true + }, + { + "name": "Open Data", + "description": "Digitally-shareable code is available in this research object. The code must be provided in a format that is time-stamped, immutable, and permanent. It must also have associated persistent identifiers. By publishing your code with default licensing via DeSci Nodes, you automatically satisfy this requirement. The code has an open license allowing others to copy, distribute, and make use of the code while allowing the licensor to retain credit and copyright as applicable. Sufficient explanation is present for an independent researcher to understand how the code is used and relates to the reported methodology, including information about versions of software, systems, and packages.", + "image_url": "https://pub.desci.com/ipfs/bafkreif64vgztwiq2xfebdgzkkca34kt2k675l5ejmx42qa4fyb622yh3q", + "communityName": "DeSci Foundation", + "protected": true } ] -} +} \ No newline at end of file diff --git a/desci-server/src/routes/v1/communities/index.ts b/desci-server/src/routes/v1/communities/index.ts index 903e8b87b..5881ddc17 100644 --- a/desci-server/src/routes/v1/communities/index.ts +++ b/desci-server/src/routes/v1/communities/index.ts @@ -7,6 +7,7 @@ import { getCommunityFeed, getCommunityRadar, getCommunityRecommendations, + getValidatedAttestations, listCommunities, validate, } from '../../../internal.js'; @@ -24,6 +25,13 @@ router.get( [validate(getCommunityDetailsSchema)], asyncHander(getCommunityRecommendations), ); + +router.get( + '/:communityName/validatedAttestations', + [validate(getCommunityDetailsSchema)], + asyncHander(getValidatedAttestations), +); + router.get('/:communityId/feed', [validate(getCommunityFeedSchema)], asyncHander(getCommunityFeed)); router.get('/:communityId/radar', [validate(getCommunityFeedSchema)], asyncHander(getCommunityRadar)); diff --git a/desci-server/src/scripts/seed-social-data.ts b/desci-server/src/scripts/seed-social-data.ts index 9d0fe3a47..874468bf8 100644 --- a/desci-server/src/scripts/seed-social-data.ts +++ b/desci-server/src/scripts/seed-social-data.ts @@ -55,6 +55,7 @@ export const seedSocialData = async () => { name: attestation.name, description: attestation.description, image_url: attestation.image_url, + protected: attestation.protected ?? false, // templateId: attestation.id, }, update: { @@ -62,6 +63,7 @@ export const seedSocialData = async () => { name: attestation.name, description: attestation.description, image_url: attestation.image_url, + protected: attestation.protected ?? false, // templateId: attestation.id, }, }), diff --git a/desci-server/src/services/Attestation.ts b/desci-server/src/services/Attestation.ts index dd47a3534..cf69cf425 100644 --- a/desci-server/src/services/Attestation.ts +++ b/desci-server/src/services/Attestation.ts @@ -416,6 +416,14 @@ export class AttestationService { const claim = await this.findClaimById(nodeAttestationId); if (!claim) throw new ClaimNotFoundError(); + const attestation = await this.findAttestationById(claim.attestationId); + if (attestation.protected) { + const member = await prisma.communityMember.findUnique({ + where: { userId_communityId: { userId, communityId: attestation.communityId } }, + }); + if (!member) throw new NoAccessError('Only Community members are allowed'); + } + const node = await prisma.node.findFirst({ where: { uuid: claim.nodeUuid } }); if (node.ownerId === userId) throw new VerificationError('Node author cannot verify claim'); @@ -559,6 +567,10 @@ export class AttestationService { return prisma.annotation.findMany({ where: filter }); } + async getCommunityAttestations(filter: Prisma.AttestationWhereInput) { + return prisma.attestation.findMany({ where: filter, include: { AttestationVersion: true } }); + } + async findAnnotationById(id: number) { return prisma.annotation.findUnique({ where: { id } }); } diff --git a/desci-server/src/services/Communities.ts b/desci-server/src/services/Communities.ts index 18ce2746f..1b1d83e5a 100644 --- a/desci-server/src/services/Communities.ts +++ b/desci-server/src/services/Communities.ts @@ -42,7 +42,7 @@ export class CommunityService { }); } - private async addCommunityMember(communityId: number, data: Prisma.CommunityMemberCreateManyInput) { + async addCommunityMember(communityId: number, data: Prisma.CommunityMemberCreateManyInput) { const existingMember = await this.findMemberByUserId(communityId, data.userId); if (existingMember) return existingMember; return prisma.communityMember.create({ data: data }); @@ -282,15 +282,18 @@ export class CommunityService { return groupedEngagements; } - private async getAllMembers(communityId: number) { - return await prisma.communityMember.findMany({ where: { communityId, role: CommunityMembershipRole.MEMBER } }); + async getAllMembers(communityId: number) { + return await prisma.communityMember.findMany({ + where: { communityId, role: CommunityMembershipRole.MEMBER }, + include: { user: true }, + }); } - private async findMemberByUserId(communityId: number, userId: number) { + async findMemberByUserId(communityId: number, userId: number) { return await prisma.communityMember.findUnique({ where: { userId_communityId: { userId, communityId } } }); } - private async removeMember(communityId: number, userId: number) { + async removeMember(communityId: number, userId: number) { return prisma.communityMember.delete({ where: { userId_communityId: { userId, communityId } } }); } } diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 396026c1c..637f94a31 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -5,6 +5,8 @@ import { Annotation, Attestation, AttestationVersion, + CommunityMember, + CommunityMembershipRole, DesciCommunity, Node, NodeAttestation, @@ -93,6 +95,23 @@ const attestationData2 = [ }, ]; +const protectedAttestations = [ + { + name: 'Open Code', + description: + 'Digitally-shareable code is available in this research object.\n\nThe code must be provided in a format that is time-stamped, immutable, and permanent. It must also have associated persistent identifiers.\n\nBy publishing your code with default licensing via DeSci Nodes, you automatically satisfy this requirement.\n\nThe code has an open license allowing others to copy, distribute, and make use of the code while allowing the licensor to retain credit and copyright as applicable.\n\nSufficient explanation is present for an independent researcher to understand how the code is used and relates to the reported methodology, including information about versions of software, systems, and packages.', + image_url: 'https://pub.desci.com/ipfs/bafkreicwcj7drcyvkhvlva53qbjcrqbh6kuyr6zjdxb5sc4ehe7hxb43qu', + protected: true, + }, + { + name: 'Open Data', + description: + 'Digitally-shareable data are publicly available on an open-access repository. The data must have a **persistent identifier and be provided in a format that is time-stamped, immutable, and permanent** (e.g., university repository, a registration on the [Open Science Framework](http://osf.io/), or an independent repository at [www.re3data.org](http://www.re3data.org/)). By publishing your data via DeSci Nodes, you automatically satisfy this requirement.\n\nA data dictionary (for example, a codebook or metadata describing the data) is included with sufficient description for an independent researcher to reproduce the reported analyses and results. Data from the same project that are not needed to reproduce the reported results can be kept private without losing eligibility for the Open Data Badge.\n\nAn open license allowing others to copy, distribute, and make use of the data while allowing the licensor to retain credit and copyright as applicable. Creative Commons has defined several licenses for this purpose, which are described at [www.creativecommons.org/licenses](http://creativecommons.org/licenses). CC0 or CC-BY is strongly recommended.', + image_url: 'https://pub.desci.com/ipfs/bafkreia5ajqjlrhydhvwrwipfnpxl4otvr6777r3xm37fq2thh6l6ds7wq', + protected: true, + }, +]; + const nodesData = [ { title: 'Node1 title', @@ -114,13 +133,14 @@ const clearDatabase = async () => { await prisma.$queryRaw`TRUNCATE TABLE "Node" CASCADE;`; }; -describe('Attestations Service', async () => { +describe.only('Attestations Service', async () => { let baseManifest: ResearchObjectV1; let baseManifestCid: string; let users: User[]; let nodes: Node[]; let nodeVersions: NodeVersion[]; let desciCommunity: DesciCommunity; + let desciCommunityMembers: CommunityMember[]; let localCommunity: DesciCommunity; let reproducibilityAttestation: Attestation; let openDataAttestation: Attestation; @@ -130,6 +150,10 @@ describe('Attestations Service', async () => { let LocalOpenDataAttestation: Attestation; let LocalFairMetadataAttestation: Attestation; + // protected attestation declaration + let protectedOpenData: Attestation; + let protectedOpenCode: Attestation; + const setup = async () => { // Create communities desciCommunity = await communityService.createCommunity(communitiesData[0]); @@ -145,7 +169,24 @@ describe('Attestations Service', async () => { [LocalReproducibilityAttestation, LocalOpenDataAttestation, LocalFairMetadataAttestation] = await Promise.all( attestationData2.map((data) => attestationService.create({ communityId: localCommunity.id as number, ...data })), ); - // console.log({ LocalReproducibilityAttestation, LocalOpenDataAttestation, LocalFairMetadataAttestation }); + + [protectedOpenCode, protectedOpenData] = await Promise.all( + protectedAttestations.map((data) => + attestationService.create({ communityId: desciCommunity.id as number, ...data }), + ), + ); + + // add Members to open + const mock_users = await createUsers(2); + desciCommunityMembers = await Promise.all( + mock_users.map((user) => + communityService.addCommunityMember(desciCommunity.id, { + userId: user.id, + role: CommunityMembershipRole.MEMBER, + communityId: desciCommunity.id, + }), + ), + ); users = await createUsers(10); // console.log({ users }); @@ -2003,4 +2044,134 @@ describe('Attestations Service', async () => { expect(revoked?.revokedAt).to.be.null; }); }); + + describe.only('Protected Attestation Verification', async () => { + let openCodeClaim: NodeAttestation; + let openDataClaim: NodeAttestation; + let node: Node; + const nodeVersion = 0; + let attestationVersion: AttestationVersion; + let author: User; + let verification: NodeAttestationVerification; + let members: (CommunityMember & { + user: User; + })[]; + let UserJwtToken: string, + UserAuthHeaderVal: string, + MemberJwtToken1: string, + MemberJwtToken2: string, + memberAuthHeaderVal1: string, + memberAuthHeaderVal2: string; + + before(async () => { + node = nodes[0]; + author = users[0]; + assert(node.uuid); + const versions = await attestationService.getAttestationVersions(protectedOpenCode.id); + attestationVersion = versions[versions.length - 1]; + openCodeClaim = await attestationService.claimAttestation({ + attestationId: protectedOpenCode.id, + attestationVersion: attestationVersion.id, + nodeDpid: '1', + nodeUuid: node.uuid, + nodeVersion, + claimerId: author.id, + }); + + members = await communityService.getAllMembers(desciCommunity.id); + MemberJwtToken1 = jwt.sign({ email: members[0].user.email }, process.env.JWT_SECRET!, { + expiresIn: '1y', + }); + memberAuthHeaderVal1 = `Bearer ${MemberJwtToken1}`; + + MemberJwtToken2 = jwt.sign({ email: members[0].user.email }, process.env.JWT_SECRET!, { + expiresIn: '1y', + }); + memberAuthHeaderVal2 = `Bearer ${MemberJwtToken2}`; + + UserJwtToken = jwt.sign({ email: members[0].user.email }, process.env.JWT_SECRET!, { + expiresIn: '1y', + }); + UserAuthHeaderVal = `Bearer ${UserJwtToken}`; + }); + + after(async () => { + await prisma.$queryRaw`TRUNCATE TABLE "NodeAttestation" CASCADE;`; + await prisma.$queryRaw`TRUNCATE TABLE "Annotation" CASCADE;`; + await prisma.$queryRaw`TRUNCATE TABLE "NodeAttestationVerification" CASCADE;`; + // await prisma.$queryRaw`TRUNCATE TABLE "CommunityMember" CASCADE;`; + }); + + it('should only members verify a node attestation(claim)', async () => { + let res = await request(app) + .post(`/v1/attestations/verification`) + .set('authorization', memberAuthHeaderVal1) + .send({ + claimerId: author.id, + }); + expect(res.statusCode).to.equal(200); + + res = await request(app).post(`/v1/attestations/verification`).set('authorization', memberAuthHeaderVal2).send({ + claimerId: author.id, + }); + expect(res.statusCode).to.equal(200); + + const userVerificationResponse = await request(app) + .post(`/v1/attestations/verification`) + .set('authorization', UserAuthHeaderVal) + .send({ + claimerId: author.id, + }); + expect(userVerificationResponse.statusCode).to.equal(401); + + const verifications = await attestationService.getAllClaimVerfications(openCodeClaim.id); + expect(verifications.length).to.equal(2); + expect(verifications[0].userId).to.equal(members[0].userId); + expect(verifications[1].userId).to.equal(members[1].userId); + }); + + it.skip('should prevent double verification of Node Attestation(Claim)', async () => { + try { + await attestationService.verifyClaim(openCodeClaim.id, users[1].id); + } catch (err) { + expect(err).to.be.instanceOf(DuplicateVerificationError); + } + }); + + it.skip('should restrict author from verifying their claim', async () => { + try { + assert(author.id === node.ownerId); + await attestationService.verifyClaim(openCodeClaim.id, author.id); + } catch (err) { + expect(err).to.be.instanceOf(VerificationError); + } + }); + + it.skip('should remove verification', async () => { + const removedVerification = await attestationService.removeVerification(verification.id, users[1].id); + expect(removedVerification).to.not.be.null; + expect(removedVerification).to.not.be.undefined; + expect(removedVerification.id).to.equal(verification.id); + + const voidVerification = await attestationService.getUserClaimVerification(openCodeClaim.id, users[1].id); + expect(voidVerification).to.be.null; + }); + + it.skip('should allow multiple users verify a node attestation(claim)', async () => { + const user2Verification = await attestationService.verifyClaim(openCodeClaim.id, users[2].id); + expect(user2Verification.nodeAttestationId).to.be.equal(openCodeClaim.id); + expect(user2Verification.userId).to.be.equal(users[2].id); + + const user3Verification = await attestationService.verifyClaim(openCodeClaim.id, users[3].id); + expect(user3Verification.nodeAttestationId).to.be.equal(openCodeClaim.id); + expect(user3Verification.userId).to.be.equal(users[3].id); + + const verifications = await attestationService.getAllClaimVerfications(openCodeClaim.id); + expect(verifications.length).to.be.equal(2); + + assert(node.uuid); + const nodeVerifications = await attestationService.getAllNodeVerfications(node.uuid); + expect(nodeVerifications.length).to.be.equal(2); + }); + }); }); diff --git a/desci-server/test/integration/community.test.ts b/desci-server/test/integration/community.test.ts index 54dc6245c..04bd06d23 100644 --- a/desci-server/test/integration/community.test.ts +++ b/desci-server/test/integration/community.test.ts @@ -5,6 +5,8 @@ import { // AttestationTemplate, AttestationVersion, CommunityEntryAttestation, + CommunityMember, + CommunityMembershipRole, DesciCommunity, User, } from '@prisma/client'; @@ -20,7 +22,7 @@ const clearDatabase = async () => { await prisma.$queryRaw`TRUNCATE TABLE "Node" CASCADE;`; }; -describe('Desci Communities', () => { +describe.only('Desci Communities', () => { const moonDao = { name: 'Moon Dao', image_url: @@ -76,7 +78,7 @@ describe('Desci Communities', () => { it('should create a community', async () => { // const [daoCommunity, moonDaoAdmin] = assert(daoCommunity, 'Community not created'); - expect(daoCommunity?.name).to.be.equal(moonDao.name); + expect(daoCommunity.name).to.be.equal(moonDao.name); expect(daoCommunity?.image_url).to.be.equal(moonDao.image_url); expect(daoCommunity?.description).to.be.equal(moonDao.description); }); @@ -109,18 +111,44 @@ describe('Desci Communities', () => { }); }); - describe.skip('Community Membership', () => { - // before() - it('should add a member', () => { - expect(true).to.be.true; + describe('Community Membership', () => { + let members: CommunityMember[]; + + before(async () => { + assert(daoCommunity, 'Community not created'); + + members = await Promise.all( + users.slice(0, 2).map((user) => + communityService.addCommunityMember(daoCommunity!.id, { + userId: user.id, + communityId: daoCommunity!.id, + role: CommunityMembershipRole.MEMBER, + }), + ), + ); }); - it('should remove a member', () => { - expect(true).to.be.true; + + it('should add a member', async () => { + expect(members.length).to.equal(2); + expect(members[0].userId).to.equal(users[0].id); + expect(members[1].userId).to.equal(users[1].id); + + const communityMembers = await communityService.getAllMembers(daoCommunity!.id); + expect(communityMembers.length).to.equal(2); }); - it('should restrict updates to admin', async () => { + + it('should remove a member', async () => { + await communityService.removeMember(daoCommunity!.id, users[1].id); + + const communityMembers = await communityService.getAllMembers(daoCommunity!.id); + expect(communityMembers.length).to.equal(1); + }); + + it.skip('should restrict updates to admin', async () => { expect(true).to.be.true; }); - it('should prevent removal of admin', () => { + + it.skip('should prevent removal of admin', () => { expect(true).to.be.true; }); }); From b8d76161b7e26cab1684d88b65b05dce6a4aadaa Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 15:08:35 +0200 Subject: [PATCH 081/141] implement protected attestations and claims api --- .../attestations/recommendations.ts | 20 ++++++++++++++++++- .../src/routes/v1/attestations/index.ts | 2 ++ desci-server/src/services/Attestation.ts | 12 ++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/desci-server/src/controllers/attestations/recommendations.ts b/desci-server/src/controllers/attestations/recommendations.ts index 8847fa18a..81b4ffe98 100644 --- a/desci-server/src/controllers/attestations/recommendations.ts +++ b/desci-server/src/controllers/attestations/recommendations.ts @@ -66,5 +66,23 @@ export const getValidatedAttestations = async (req: Request, res: Response, _nex communityId: community.id, protected: true, }); - return new SuccessResponse(attestations).send(res); + const response = _.map(attestations, (attestation) => ({ + ...attestation, + AttestationVersion: attestation.AttestationVersion[0], + })); + return new SuccessResponse(response).send(res); +}; + +export const getValidatedRecommendations = async (req: Request, res: Response, _next: NextFunction) => { + const attestations = await attestationService.getProtectedAttestations({ + protected: true, + }); + const response = _.map(attestations, (attestation) => ({ + ...attestation, + community: undefined, + communityName: attestation.community.name, + AttestationVersion: attestation.AttestationVersion[0], + })); + logger.info({ attestations }, 'getValidatedRecommendations'); + return new SuccessResponse(response).send(res); }; diff --git a/desci-server/src/routes/v1/attestations/index.ts b/desci-server/src/routes/v1/attestations/index.ts index 0175f9ce3..359e36936 100644 --- a/desci-server/src/routes/v1/attestations/index.ts +++ b/desci-server/src/routes/v1/attestations/index.ts @@ -18,6 +18,7 @@ import { showCommunityClaims, getAttestationVerifications, validate, + getValidatedRecommendations, } from '../../../internal.js'; import { ensureUser } from '../../../middleware/permissions.js'; @@ -41,6 +42,7 @@ import { const router = Router(); router.get('/suggestions/all', [ensureUser], asyncHander(getAllRecommendations)); +router.get('/suggestions/protected', [ensureUser], asyncHander(getValidatedRecommendations)); router.get( '/claims/:communityId/:dpid', [ensureUser, validate(showCommunityClaimsSchema)], diff --git a/desci-server/src/services/Attestation.ts b/desci-server/src/services/Attestation.ts index cf69cf425..9b687a64a 100644 --- a/desci-server/src/services/Attestation.ts +++ b/desci-server/src/services/Attestation.ts @@ -568,7 +568,17 @@ export class AttestationService { } async getCommunityAttestations(filter: Prisma.AttestationWhereInput) { - return prisma.attestation.findMany({ where: filter, include: { AttestationVersion: true } }); + return prisma.attestation.findMany({ + where: filter, + include: { AttestationVersion: { orderBy: { createdAt: 'desc' } } }, + }); + } + + async getProtectedAttestations(filter: Prisma.AttestationWhereInput) { + return prisma.attestation.findMany({ + where: filter, + include: { community: true, AttestationVersion: { orderBy: { createdAt: 'desc' } } }, + }); } async findAnnotationById(id: number) { From 4628cc10b813e676b090b04a8f4748407e9403fe Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 17 Apr 2024 16:12:48 +0200 Subject: [PATCH 082/141] reverse-proxy: hotfix vault path for secrets --- reverse-proxy/kubernetes/deployment_dev.yaml | 2 +- reverse-proxy/kubernetes/deployment_prod.yaml | 2 +- reverse-proxy/kubernetes/deployment_staging.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reverse-proxy/kubernetes/deployment_dev.yaml b/reverse-proxy/kubernetes/deployment_dev.yaml index bd1d5e254..cb2a9756a 100755 --- a/reverse-proxy/kubernetes/deployment_dev.yaml +++ b/reverse-proxy/kubernetes/deployment_dev.yaml @@ -58,7 +58,7 @@ spec: vault.hashicorp.com/role: app-vault-reader vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/dev/db vault.hashicorp.com/agent-inject-template-config: | - {{- with secret "secrets/desci-server/dev/" -}} + {{- with secret "secrets/desci-server/dev/db" -}} echo "sourcing"; export PROXY_MAPPING_RPC_SEPOLIA={{ .Data.PROXY_MAPPING_RPC_SEPOLIA }} export PROXY_MAPPING_RPC_MAINNET={{ .Data.PROXY_MAPPING_RPC_MAINNET }} diff --git a/reverse-proxy/kubernetes/deployment_prod.yaml b/reverse-proxy/kubernetes/deployment_prod.yaml index 72263fbae..aff59713a 100755 --- a/reverse-proxy/kubernetes/deployment_prod.yaml +++ b/reverse-proxy/kubernetes/deployment_prod.yaml @@ -58,7 +58,7 @@ spec: vault.hashicorp.com/role: app-vault-reader vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/production/db vault.hashicorp.com/agent-inject-template-config: | - {{- with secret "secrets/desci-server/production/" -}} + {{- with secret "secrets/desci-server/production/db" -}} echo "sourcing"; export PROXY_MAPPING_RPC_SEPOLIA={{ .Data.PROXY_MAPPING_RPC_SEPOLIA }} export PROXY_MAPPING_RPC_MAINNET={{ .Data.PROXY_MAPPING_RPC_MAINNET }} diff --git a/reverse-proxy/kubernetes/deployment_staging.yaml b/reverse-proxy/kubernetes/deployment_staging.yaml index d7b3f906d..0a470a8f0 100755 --- a/reverse-proxy/kubernetes/deployment_staging.yaml +++ b/reverse-proxy/kubernetes/deployment_staging.yaml @@ -58,7 +58,7 @@ spec: vault.hashicorp.com/role: app-vault-reader vault.hashicorp.com/agent-inject-secret-config: secrets/desci-server/staging/db vault.hashicorp.com/agent-inject-template-config: | - {{- with secret "secrets/desci-server/staging/" -}} + {{- with secret "secrets/desci-server/staging/db" -}} echo "sourcing"; export PROXY_MAPPING_RPC_SEPOLIA={{ .Data.PROXY_MAPPING_RPC_SEPOLIA }} export PROXY_MAPPING_RPC_MAINNET={{ .Data.PROXY_MAPPING_RPC_MAINNET }} From 37616aea08811921ac7dfd3cd1d73d193f93b8fc Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 17 Apr 2024 16:36:09 +0200 Subject: [PATCH 083/141] reverse-proxy: hotfix-proxy-image --- reverse-proxy/Dockerfile | 2 +- reverse-proxy/kubernetes/deployment_dev.yaml | 2 +- reverse-proxy/kubernetes/deployment_prod.yaml | 2 +- reverse-proxy/kubernetes/deployment_staging.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reverse-proxy/Dockerfile b/reverse-proxy/Dockerfile index 1db76bb14..b1e7ee601 100644 --- a/reverse-proxy/Dockerfile +++ b/reverse-proxy/Dockerfile @@ -1,6 +1,6 @@ FROM node:20.12.1-alpine3.18 AS base -RUN apk update && apk add --no-cache dumb-init +RUN apk update && apk add --no-cache dumb-init bash WORKDIR /usr/src/app diff --git a/reverse-proxy/kubernetes/deployment_dev.yaml b/reverse-proxy/kubernetes/deployment_dev.yaml index cb2a9756a..1b4a5354b 100755 --- a/reverse-proxy/kubernetes/deployment_dev.yaml +++ b/reverse-proxy/kubernetes/deployment_dev.yaml @@ -72,7 +72,7 @@ spec: name: reverse-proxy-dev command: ['/bin/bash', '-c'] args: - - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; + - echo "SOURCING ENV"; source /vault/secrets/config; dumb-init node dist/index.js; ports: - containerPort: 5678 name: api diff --git a/reverse-proxy/kubernetes/deployment_prod.yaml b/reverse-proxy/kubernetes/deployment_prod.yaml index aff59713a..b22b2e632 100755 --- a/reverse-proxy/kubernetes/deployment_prod.yaml +++ b/reverse-proxy/kubernetes/deployment_prod.yaml @@ -72,7 +72,7 @@ spec: name: reverse-proxy-prod command: ['/bin/bash', '-c'] args: - - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; + - echo "SOURCING ENV"; source /vault/secrets/config; dumb-init node dist/index.js; ports: - containerPort: 5678 name: api diff --git a/reverse-proxy/kubernetes/deployment_staging.yaml b/reverse-proxy/kubernetes/deployment_staging.yaml index 0a470a8f0..a5f67883a 100755 --- a/reverse-proxy/kubernetes/deployment_staging.yaml +++ b/reverse-proxy/kubernetes/deployment_staging.yaml @@ -72,7 +72,7 @@ spec: name: reverse-proxy-staging command: ['/bin/bash', '-c'] args: - - echo "SOURCING ENV"; source /vault/secrets/config; node ./dist/index.js; + - echo "SOURCING ENV"; source /vault/secrets/config; dumb-init node dist/index.js; ports: - containerPort: 5678 name: api From 1ee458766b42d0e8dee87c88c544ec103ad55545 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 16:55:49 +0200 Subject: [PATCH 084/141] schema update, community member seed script, update seed data and api res update --- desci-server/package.json | 1 + .../migration.sql | 2 ++ desci-server/prisma/schema.prisma | 1 + desci-server/src/data/communities.json | 2 ++ .../src/scripts/seed-community-members.ts | 32 +++++++++++++++++++ desci-server/src/scripts/seed-social-data.ts | 3 +- desci-server/src/services/Attestation.ts | 3 +- 7 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 desci-server/prisma/migrations/20240417141710_add_verified_image_column_to_attestation_table/migration.sql create mode 100644 desci-server/src/scripts/seed-community-members.ts diff --git a/desci-server/package.json b/desci-server/package.json index 70733205f..21d481f00 100755 --- a/desci-server/package.json +++ b/desci-server/package.json @@ -23,6 +23,7 @@ "script:endorse-dpid": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/endorse-dpid.ts", "script:seed-social-data": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/seed-social-data.ts", "script:DESTRUCTIVE-clear-social-data": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/DESTRUCTIVE-clear-social-data.ts", + "script:seed-community-member": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/seed-community-members.ts", "build": "rimraf dist && tsc && yarn copy-files", "copy-files": "copyfiles -u 1 src/**/*.cjs dist/", "generate": "npx prisma generate", diff --git a/desci-server/prisma/migrations/20240417141710_add_verified_image_column_to_attestation_table/migration.sql b/desci-server/prisma/migrations/20240417141710_add_verified_image_column_to_attestation_table/migration.sql new file mode 100644 index 000000000..7a6a21bf5 --- /dev/null +++ b/desci-server/prisma/migrations/20240417141710_add_verified_image_column_to_attestation_table/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Attestation" ADD COLUMN "verified_image_url" TEXT; diff --git a/desci-server/prisma/schema.prisma b/desci-server/prisma/schema.prisma index 52039376a..06a2b5852 100755 --- a/desci-server/prisma/schema.prisma +++ b/desci-server/prisma/schema.prisma @@ -667,6 +667,7 @@ model Attestation { communityId Int description String image_url String + verified_image_url String? templateId Int? protected Boolean @default(false) createdAt DateTime @default(now()) diff --git a/desci-server/src/data/communities.json b/desci-server/src/data/communities.json index f7056cfe6..b44c76b7e 100644 --- a/desci-server/src/data/communities.json +++ b/desci-server/src/data/communities.json @@ -291,6 +291,7 @@ "name": "Open Code", "description": "Digitally-shareable code is available in this research object.\n\nThe code must be provided in a format that is time-stamped, immutable, and permanent. It must also have associated persistent identifiers.\n\nBy publishing your code with default licensing via DeSci Nodes, you automatically satisfy this requirement.\n\nThe code has an open license allowing others to copy, distribute, and make use of the code while allowing the licensor to retain credit and copyright as applicable.\n\nSufficient explanation is present for an independent researcher to understand how the code is used and relates to the reported methodology, including information about versions of software, systems, and packages.", "image_url": "https://pub.desci.com/ipfs/bafkreif64vgztwiq2xfebdgzkkca34kt2k675l5ejmx42qa4fyb622yh3q", + "verified_image_url": "https://pub.desci.com/ipfs/bafkreibp3pbr2bjivubnbffffcrjuwa55yfoyakv5cni3ncez4txnqqqry", "communityName": "DeSci Foundation", "protected": true }, @@ -298,6 +299,7 @@ "name": "Open Data", "description": "Digitally-shareable code is available in this research object. The code must be provided in a format that is time-stamped, immutable, and permanent. It must also have associated persistent identifiers. By publishing your code with default licensing via DeSci Nodes, you automatically satisfy this requirement. The code has an open license allowing others to copy, distribute, and make use of the code while allowing the licensor to retain credit and copyright as applicable. Sufficient explanation is present for an independent researcher to understand how the code is used and relates to the reported methodology, including information about versions of software, systems, and packages.", "image_url": "https://pub.desci.com/ipfs/bafkreif64vgztwiq2xfebdgzkkca34kt2k675l5ejmx42qa4fyb622yh3q", + "verified_image_url": "https://pub.desci.com/ipfs/bafkreiepmzi4xryvri7bgbsulnumeu5toh7dagjo7njanc54zjuslzccny", "communityName": "DeSci Foundation", "protected": true } diff --git a/desci-server/src/scripts/seed-community-members.ts b/desci-server/src/scripts/seed-community-members.ts new file mode 100644 index 000000000..64d0474ef --- /dev/null +++ b/desci-server/src/scripts/seed-community-members.ts @@ -0,0 +1,32 @@ +import { CommunityMembershipRole } from '@prisma/client'; + +import { prisma } from '../client.js'; +import { logger } from '../logger.js'; + +export const addCommunityMembers = async (communityId?: string, memberId?: string) => { + if (!communityId || !memberId) + throw new Error(`Invalid args: RUN yarn script:seed-community-member [communityId] [userId]`); + + const community = await prisma.desciCommunity.findFirst({ where: { id: parseInt(communityId) } }); + if (!community) throw new Error(`No Desci community with ID: ${communityId} found!`); + + const userId = parseInt(memberId); + const user = await prisma.user.findFirst({ where: { id: userId } }); + if (!user) throw new Error(`No User with ID: ${userId} found!`); + + if (!user.orcid) { + // throw new Error(`User ${user.name} with ID: ${userId} has no orcid profile!`); + } + const inserted = await prisma.communityMember.upsert({ + create: { userId, communityId: parseInt(communityId), role: CommunityMembershipRole.MEMBER }, + update: {}, + where: { userId_communityId: { userId, communityId: parseInt(communityId) } }, + }); + + logger.info({ inserted }, `${user.name} is now a memeber of ${community.name}`); +}; + +// use first argument as dpid +addCommunityMembers(process.argv[2], process.argv[3]) + .then(() => logger.info({}, 'Script Ran successfully')) + .catch((err) => console.log('Error running script ', err)); diff --git a/desci-server/src/scripts/seed-social-data.ts b/desci-server/src/scripts/seed-social-data.ts index 874468bf8..bafa9610a 100644 --- a/desci-server/src/scripts/seed-social-data.ts +++ b/desci-server/src/scripts/seed-social-data.ts @@ -56,6 +56,7 @@ export const seedSocialData = async () => { description: attestation.description, image_url: attestation.image_url, protected: attestation.protected ?? false, + verified_image_url: attestation.verified_image_url, // templateId: attestation.id, }, update: { @@ -64,7 +65,7 @@ export const seedSocialData = async () => { description: attestation.description, image_url: attestation.image_url, protected: attestation.protected ?? false, - // templateId: attestation.id, + verified_image_url: attestation.verified_image_url, }, }), ]); diff --git a/desci-server/src/services/Attestation.ts b/desci-server/src/services/Attestation.ts index 9b687a64a..b0142f25c 100644 --- a/desci-server/src/services/Attestation.ts +++ b/desci-server/src/services/Attestation.ts @@ -223,9 +223,9 @@ export class AttestationService { where: { nodeDpid10: dpid, revoked: false }, include: { community: { select: { name: true, description: true, keywords: true, image_url: true } }, + attestation: { select: { protected: true, verified_image_url: true } }, attestationVersion: { select: { name: true, description: true, image_url: true } }, node: { select: { ownerId: true } }, - // NodeAttestationReaction: { s}, _count: { select: { Annotation: true, NodeAttestationReaction: true, NodeAttestationVerification: true }, }, @@ -238,6 +238,7 @@ export class AttestationService { where: { nodeDpid10: dpid, desciCommunityId: communityId, revoked: false }, include: { community: { select: { name: true, description: true, keywords: true } }, + attestation: { select: { protected: true, verified_image_url: true } }, attestationVersion: { select: { name: true, description: true, image_url: true } }, node: { select: { ownerId: true } }, // NodeAttestationReaction: { s}, From a1de48a50d307e1267926ee403ea889ba25ba731 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 17:21:57 +0200 Subject: [PATCH 085/141] fix: test --- desci-server/test/integration/Attestation.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 637f94a31..5af4aec34 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -176,8 +176,10 @@ describe.only('Attestations Service', async () => { ), ); + users = await createUsers(10); + // add Members to open - const mock_users = await createUsers(2); + const mock_users = users.slice(8); desciCommunityMembers = await Promise.all( mock_users.map((user) => communityService.addCommunityMember(desciCommunity.id, { @@ -188,7 +190,6 @@ describe.only('Attestations Service', async () => { ), ); - users = await createUsers(10); // console.log({ users }); const baseManifest = await spawnEmptyManifest(); From fe7a5059688f7e32dbe4fcc00b7d2c3c3f2a0853 Mon Sep 17 00:00:00 2001 From: m0ar Date: Wed, 17 Apr 2024 17:29:30 +0200 Subject: [PATCH 086/141] reverse-proxy: fix broken between ingress and load balancer --- reverse-proxy/kubernetes/deployment_dev.yaml | 2 +- reverse-proxy/kubernetes/deployment_prod.yaml | 2 +- reverse-proxy/kubernetes/deployment_staging.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reverse-proxy/kubernetes/deployment_dev.yaml b/reverse-proxy/kubernetes/deployment_dev.yaml index 1b4a5354b..890996051 100755 --- a/reverse-proxy/kubernetes/deployment_dev.yaml +++ b/reverse-proxy/kubernetes/deployment_dev.yaml @@ -29,7 +29,7 @@ spec: pathType: Prefix backend: service: - name: public-reverse-proxy-dev + name: public-reverse-proxy-dev-service port: number: 80 --- diff --git a/reverse-proxy/kubernetes/deployment_prod.yaml b/reverse-proxy/kubernetes/deployment_prod.yaml index b22b2e632..92ae649e7 100755 --- a/reverse-proxy/kubernetes/deployment_prod.yaml +++ b/reverse-proxy/kubernetes/deployment_prod.yaml @@ -29,7 +29,7 @@ spec: pathType: Prefix backend: service: - name: public-reverse-proxy-prod + name: public-reverse-proxy-prod-service port: number: 80 --- diff --git a/reverse-proxy/kubernetes/deployment_staging.yaml b/reverse-proxy/kubernetes/deployment_staging.yaml index a5f67883a..b0f5cc79c 100755 --- a/reverse-proxy/kubernetes/deployment_staging.yaml +++ b/reverse-proxy/kubernetes/deployment_staging.yaml @@ -29,7 +29,7 @@ spec: pathType: Prefix backend: service: - name: public-reverse-proxy-staging + name: public-reverse-proxy-staging-service port: number: 80 --- From 5b670c3fac97bd9edf8357440249cd051ed0b04e Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 17:37:23 +0200 Subject: [PATCH 087/141] fix: invalid input --- .../test/integration/Attestation.test.ts | 10 ++-- .../test/integration/community.test.ts | 48 ++++--------------- 2 files changed, 15 insertions(+), 43 deletions(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 5af4aec34..e3ea3f898 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -133,7 +133,7 @@ const clearDatabase = async () => { await prisma.$queryRaw`TRUNCATE TABLE "Node" CASCADE;`; }; -describe.only('Attestations Service', async () => { +describe('Attestations Service', async () => { let baseManifest: ResearchObjectV1; let baseManifestCid: string; let users: User[]; @@ -2103,17 +2103,17 @@ describe.only('Attestations Service', async () => { // await prisma.$queryRaw`TRUNCATE TABLE "CommunityMember" CASCADE;`; }); - it('should only members verify a node attestation(claim)', async () => { + it('should allow only members verify a node attestation(claim)', async () => { let res = await request(app) .post(`/v1/attestations/verification`) .set('authorization', memberAuthHeaderVal1) .send({ - claimerId: author.id, + claimId: author.id, }); expect(res.statusCode).to.equal(200); res = await request(app).post(`/v1/attestations/verification`).set('authorization', memberAuthHeaderVal2).send({ - claimerId: author.id, + claimId: author.id, }); expect(res.statusCode).to.equal(200); @@ -2121,7 +2121,7 @@ describe.only('Attestations Service', async () => { .post(`/v1/attestations/verification`) .set('authorization', UserAuthHeaderVal) .send({ - claimerId: author.id, + claimId: author.id, }); expect(userVerificationResponse.statusCode).to.equal(401); diff --git a/desci-server/test/integration/community.test.ts b/desci-server/test/integration/community.test.ts index 04bd06d23..54dc6245c 100644 --- a/desci-server/test/integration/community.test.ts +++ b/desci-server/test/integration/community.test.ts @@ -5,8 +5,6 @@ import { // AttestationTemplate, AttestationVersion, CommunityEntryAttestation, - CommunityMember, - CommunityMembershipRole, DesciCommunity, User, } from '@prisma/client'; @@ -22,7 +20,7 @@ const clearDatabase = async () => { await prisma.$queryRaw`TRUNCATE TABLE "Node" CASCADE;`; }; -describe.only('Desci Communities', () => { +describe('Desci Communities', () => { const moonDao = { name: 'Moon Dao', image_url: @@ -78,7 +76,7 @@ describe.only('Desci Communities', () => { it('should create a community', async () => { // const [daoCommunity, moonDaoAdmin] = assert(daoCommunity, 'Community not created'); - expect(daoCommunity.name).to.be.equal(moonDao.name); + expect(daoCommunity?.name).to.be.equal(moonDao.name); expect(daoCommunity?.image_url).to.be.equal(moonDao.image_url); expect(daoCommunity?.description).to.be.equal(moonDao.description); }); @@ -111,44 +109,18 @@ describe.only('Desci Communities', () => { }); }); - describe('Community Membership', () => { - let members: CommunityMember[]; - - before(async () => { - assert(daoCommunity, 'Community not created'); - - members = await Promise.all( - users.slice(0, 2).map((user) => - communityService.addCommunityMember(daoCommunity!.id, { - userId: user.id, - communityId: daoCommunity!.id, - role: CommunityMembershipRole.MEMBER, - }), - ), - ); - }); - - it('should add a member', async () => { - expect(members.length).to.equal(2); - expect(members[0].userId).to.equal(users[0].id); - expect(members[1].userId).to.equal(users[1].id); - - const communityMembers = await communityService.getAllMembers(daoCommunity!.id); - expect(communityMembers.length).to.equal(2); + describe.skip('Community Membership', () => { + // before() + it('should add a member', () => { + expect(true).to.be.true; }); - - it('should remove a member', async () => { - await communityService.removeMember(daoCommunity!.id, users[1].id); - - const communityMembers = await communityService.getAllMembers(daoCommunity!.id); - expect(communityMembers.length).to.equal(1); + it('should remove a member', () => { + expect(true).to.be.true; }); - - it.skip('should restrict updates to admin', async () => { + it('should restrict updates to admin', async () => { expect(true).to.be.true; }); - - it.skip('should prevent removal of admin', () => { + it('should prevent removal of admin', () => { expect(true).to.be.true; }); }); From 539e63e75b7eb5b4c34c6e5c63fb389eb85c694c Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 18:32:44 +0200 Subject: [PATCH 088/141] update tests --- desci-server/test/integration/Attestation.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index e3ea3f898..4c7bdfd44 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -2108,12 +2108,12 @@ describe('Attestations Service', async () => { .post(`/v1/attestations/verification`) .set('authorization', memberAuthHeaderVal1) .send({ - claimId: author.id, + claimId: openCodeClaim.id, }); expect(res.statusCode).to.equal(200); res = await request(app).post(`/v1/attestations/verification`).set('authorization', memberAuthHeaderVal2).send({ - claimId: author.id, + claimId: openCodeClaim.id, }); expect(res.statusCode).to.equal(200); @@ -2121,7 +2121,7 @@ describe('Attestations Service', async () => { .post(`/v1/attestations/verification`) .set('authorization', UserAuthHeaderVal) .send({ - claimId: author.id, + claimId: openCodeClaim.id, }); expect(userVerificationResponse.statusCode).to.equal(401); From 2736ecb918b9ea13f9a329a6232a468f358bf801 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 18:45:33 +0200 Subject: [PATCH 089/141] fix: clashing test auth tokens --- desci-server/test/integration/Attestation.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 4c7bdfd44..02853ec83 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -2085,7 +2085,7 @@ describe('Attestations Service', async () => { }); memberAuthHeaderVal1 = `Bearer ${MemberJwtToken1}`; - MemberJwtToken2 = jwt.sign({ email: members[0].user.email }, process.env.JWT_SECRET!, { + MemberJwtToken2 = jwt.sign({ email: members[1].user.email }, process.env.JWT_SECRET!, { expiresIn: '1y', }); memberAuthHeaderVal2 = `Bearer ${MemberJwtToken2}`; @@ -2127,8 +2127,8 @@ describe('Attestations Service', async () => { const verifications = await attestationService.getAllClaimVerfications(openCodeClaim.id); expect(verifications.length).to.equal(2); - expect(verifications[0].userId).to.equal(members[0].userId); - expect(verifications[1].userId).to.equal(members[1].userId); + expect(verifications.some((v) => v.userId === members[0].userId)).to.equal(true); + expect(verifications.some((v) => v.userId === members[1].userId)).to.equal(true); }); it.skip('should prevent double verification of Node Attestation(Claim)', async () => { From 5bb3e19624c2337cb3d131e6306d65ace61b44a7 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 18:59:03 +0200 Subject: [PATCH 090/141] add negative tests --- desci-server/test/integration/Attestation.test.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 02853ec83..9dacabf5e 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -2090,7 +2090,7 @@ describe('Attestations Service', async () => { }); memberAuthHeaderVal2 = `Bearer ${MemberJwtToken2}`; - UserJwtToken = jwt.sign({ email: members[0].user.email }, process.env.JWT_SECRET!, { + UserJwtToken = jwt.sign({ email: users[1].email }, process.env.JWT_SECRET!, { expiresIn: '1y', }); UserAuthHeaderVal = `Bearer ${UserJwtToken}`; @@ -2117,6 +2117,13 @@ describe('Attestations Service', async () => { }); expect(res.statusCode).to.equal(200); + const verifications = await attestationService.getAllClaimVerfications(openCodeClaim.id); + expect(verifications.length).to.equal(2); + expect(verifications.some((v) => v.userId === members[0].userId)).to.equal(true); + expect(verifications.some((v) => v.userId === members[1].userId)).to.equal(true); + }); + + it('should prevent non-authorized users from verifying a protected attestation(claim)', async () => { const userVerificationResponse = await request(app) .post(`/v1/attestations/verification`) .set('authorization', UserAuthHeaderVal) From a106655985ad09c8c3503297d1edeceb6b497209 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 17 Apr 2024 19:34:04 +0200 Subject: [PATCH 091/141] remove missing env from k8s config --- desci-server/kubernetes/deployment_dev.yaml | 1 - desci-server/kubernetes/deployment_prod.yaml | 1 - desci-server/kubernetes/deployment_staging.yaml | 1 - 3 files changed, 3 deletions(-) diff --git a/desci-server/kubernetes/deployment_dev.yaml b/desci-server/kubernetes/deployment_dev.yaml index 57f8255c2..4349fc742 100644 --- a/desci-server/kubernetes/deployment_dev.yaml +++ b/desci-server/kubernetes/deployment_dev.yaml @@ -79,7 +79,6 @@ spec: export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} export DEBUG_TEST=0; - export MAX_LOCK_TIME={{ .Data.MAX_LOCK_TIME }} echo "appfinish"; {{- end -}} labels: diff --git a/desci-server/kubernetes/deployment_prod.yaml b/desci-server/kubernetes/deployment_prod.yaml index dee79ae93..8cc357a22 100755 --- a/desci-server/kubernetes/deployment_prod.yaml +++ b/desci-server/kubernetes/deployment_prod.yaml @@ -80,7 +80,6 @@ spec: export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} export IGNORE_LINE=0; export DEBUG_TEST=0; - export MAX_LOCK_TIME={{ .Data.MAX_LOCK_TIME }} echo "appfinish"; {{- end -}} labels: diff --git a/desci-server/kubernetes/deployment_staging.yaml b/desci-server/kubernetes/deployment_staging.yaml index ab436aaa4..10b77a57b 100644 --- a/desci-server/kubernetes/deployment_staging.yaml +++ b/desci-server/kubernetes/deployment_staging.yaml @@ -91,7 +91,6 @@ spec: export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} export DEBUG_TEST=0; - export MAX_LOCK_TIME={{ .Data.MAX_LOCK_TIME }} echo "appfinish"; {{- end -}} labels: From abe53510a65af1e4a6f88b63a61d55a08f892a1a Mon Sep 17 00:00:00 2001 From: kadami Date: Thu, 18 Apr 2024 03:04:06 +0700 Subject: [PATCH 092/141] add controller for retrieving nodes shared with a user --- .../controllers/nodes/contributions/delete.ts | 2 +- .../src/controllers/nodes/sharedNodes.ts | 106 ++++++++++++++++++ desci-server/src/services/Contributors.ts | 2 +- 3 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 desci-server/src/controllers/nodes/sharedNodes.ts diff --git a/desci-server/src/controllers/nodes/contributions/delete.ts b/desci-server/src/controllers/nodes/contributions/delete.ts index 0664362b8..07c01e6e7 100644 --- a/desci-server/src/controllers/nodes/contributions/delete.ts +++ b/desci-server/src/controllers/nodes/contributions/delete.ts @@ -27,7 +27,7 @@ export const deleteContributor = async (req: DeleteContributorRequest, res: Resp const user = req.user; if (!node || !user) - throw Error('Middleware not properly setup for addContributor controller, requires req.node and req.user'); + throw Error('Middleware not properly setup for deleteContributor controller, requires req.node and req.user'); const { contributorId } = req.body; diff --git a/desci-server/src/controllers/nodes/sharedNodes.ts b/desci-server/src/controllers/nodes/sharedNodes.ts new file mode 100644 index 000000000..6f8057a5f --- /dev/null +++ b/desci-server/src/controllers/nodes/sharedNodes.ts @@ -0,0 +1,106 @@ +import { IpldUrl, ResearchObjectV1Dpid } from '@desci-labs/desci-models'; +import { User } from '@prisma/client'; +import { Request, Response } from 'express'; + +import { prisma } from '../../client.js'; +import { logger as parentLogger } from '../../logger.js'; +import { PRIV_SHARE_CONTRIBUTION_PREFIX } from '../../services/Contributors.js'; +import { getManifestFromNode } from '../../services/data/processing.js'; +import { getIndexedResearchObjects } from '../../theGraph.js'; + +export type SharedNode = { + uuid: string; + manifestCid: string; + title?: string; + versions: number; + coverImageCid?: string | IpldUrl; + published?: boolean; + dpid?: ResearchObjectV1Dpid; + publishDate?: string; + shareKey: string; +}; + +export type GetSharedNodesRequest = Request & { + user: User; // added by auth middleware +}; + +export type GetSharedNodesResBody = + | { + ok: boolean; + sharedNodes: SharedNode[]; + } + | { + error: string; + }; + +export const getSharedNodes = async (req: GetSharedNodesRequest, res: Response) => { + const user = req.user; + + if (!user) throw Error('Middleware not properly setup for getSharedNodes controller, requires req.user'); + + const logger = parentLogger.child({ + module: 'PrivateShare::GetSharedNodesController', + body: req.body, + userId: user.id, + }); + + if (!user.email) { + logger.warn('User does not have an email, no nodes can be shared with the user.'); + return res.status(500).json({ error: 'User does not have an email' }); + } + + try { + const privSharedNodes = await prisma.privateShare.findMany({ + where: { + memo: `${PRIV_SHARE_CONTRIBUTION_PREFIX}${user.email}`, + }, + include: { + node: true, + }, + }); + + if (privSharedNodes?.length === 0) { + return res.status(200).json({ ok: true, sharedNodes: [] }); + } + + const nodeUuids = privSharedNodes.map((priv) => priv.node.uuid); + const { researchObjects } = await getIndexedResearchObjects(nodeUuids); + const publishedNodesMap = researchObjects.reduce((acc, ro) => { + // convert hex string to integer + const nodeUuidInt = Buffer.from(ro.id.substring(2), 'hex'); + // convert integer to hex + const nodeUuid = nodeUuidInt.toString('base64url'); + acc[nodeUuid] = ro; + }, {}); + + const filledSharedNodes = await Promise.all( + privSharedNodes.map(async (priv) => { + const { node } = priv; + const { manifest: latestManifest } = await getManifestFromNode(node); + const publishedEntry = publishedNodesMap[node.uuid]; + + return { + uuid: node.uuid, + manifestCid: node.manifestUrl, + title: latestManifest.title, + versions: publishedEntry?.versions.length, + coverImageCid: latestManifest.coverImage, + dpid: latestManifest.dpid, + publishDate: publishedEntry?.versions[0].time, + published: !!publishedEntry, + shareKey: priv.shareId, + }; + }), + ); + + if (filledSharedNodes) { + logger.info({ totalSharedNodesFound: filledSharedNodes.length }, 'Shared nodes retrieved successfully'); + return res.status(200).json({ ok: true, sharedNodes: filledSharedNodes }); + } + } catch (e) { + logger.error({ e }, 'Failed to retrieve shared nodes for user'); + return res.status(500).json({ error: 'Failed to retrieve shared nodes' }); + } + + return res.status(500).json({ error: 'Something went wrong' }); +}; diff --git a/desci-server/src/services/Contributors.ts b/desci-server/src/services/Contributors.ts index 55b9e72a3..9b52f9835 100644 --- a/desci-server/src/services/Contributors.ts +++ b/desci-server/src/services/Contributors.ts @@ -52,7 +52,7 @@ export type AddNodeContributionParams = { userId?: number; }; -const PRIV_SHARE_CONTRIBUTION_PREFIX = 'C-'; +export const PRIV_SHARE_CONTRIBUTION_PREFIX = 'C-'; class ContributorService { private logger = parentLogger.child({ module: 'Services::ContributorsService' }); From c74a2e421f8b4346c6726e28a105d866948af881 Mon Sep 17 00:00:00 2001 From: kadami Date: Thu, 18 Apr 2024 03:11:03 +0700 Subject: [PATCH 093/141] add route for retrieval --- desci-server/src/controllers/nodes/sharedNodes.ts | 10 +++++----- desci-server/src/routes/v1/nodes.ts | 4 +++- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/desci-server/src/controllers/nodes/sharedNodes.ts b/desci-server/src/controllers/nodes/sharedNodes.ts index 6f8057a5f..8c1de0e81 100644 --- a/desci-server/src/controllers/nodes/sharedNodes.ts +++ b/desci-server/src/controllers/nodes/sharedNodes.ts @@ -20,11 +20,11 @@ export type SharedNode = { shareKey: string; }; -export type GetSharedNodesRequest = Request & { +export type ListSharedNodesRequest = Request & { user: User; // added by auth middleware }; -export type GetSharedNodesResBody = +export type ListSharedNodesResBody = | { ok: boolean; sharedNodes: SharedNode[]; @@ -33,13 +33,13 @@ export type GetSharedNodesResBody = error: string; }; -export const getSharedNodes = async (req: GetSharedNodesRequest, res: Response) => { +export const listSharedNodes = async (req: ListSharedNodesRequest, res: Response) => { const user = req.user; - if (!user) throw Error('Middleware not properly setup for getSharedNodes controller, requires req.user'); + if (!user) throw Error('Middleware not properly setup for ListSharedNodes controller, requires req.user'); const logger = parentLogger.child({ - module: 'PrivateShare::GetSharedNodesController', + module: 'PrivateShare::ListSharedNodesController', body: req.body, userId: user.id, }); diff --git a/desci-server/src/routes/v1/nodes.ts b/desci-server/src/routes/v1/nodes.ts index 00d843939..b3b06ca66 100755 --- a/desci-server/src/routes/v1/nodes.ts +++ b/desci-server/src/routes/v1/nodes.ts @@ -4,6 +4,7 @@ import { addContributor } from '../../controllers/nodes/contributions/create.js' import { deleteContributor } from '../../controllers/nodes/contributions/delete.js'; import { getNodeContributions } from '../../controllers/nodes/contributions/getNodeContributions.js'; import { getUserContributions } from '../../controllers/nodes/contributions/getUserContributions.js'; +import { getUserContributionsAuthed } from '../../controllers/nodes/contributions/getUserContributionsAuthed.js'; import { updateContributor } from '../../controllers/nodes/contributions/update.js'; import { verifyContribution } from '../../controllers/nodes/contributions/verify.js'; import { dispatchDocumentChange, getNodeDocument } from '../../controllers/nodes/documents.js'; @@ -32,12 +33,12 @@ import { } from '../../controllers/nodes/index.js'; import { retrieveTitle } from '../../controllers/nodes/legacyManifestApi.js'; import { prepublish } from '../../controllers/nodes/prepublish.js'; +import { listSharedNodes } from '../../controllers/nodes/sharedNodes.js'; import { thumbnails } from '../../controllers/nodes/thumbnails.js'; import { versionDetails } from '../../controllers/nodes/versionDetails.js'; import { asyncHander, attachUser, validate } from '../../internal.js'; import { ensureNodeAccess, ensureWriteNodeAccess } from '../../middleware/authorisation.js'; import { ensureUser } from '../../middleware/permissions.js'; -import { getUserContributionsAuthed } from '../../controllers/nodes/contributions/getUserContributionsAuthed.js'; const router = Router(); @@ -60,6 +61,7 @@ router.get( ); router.post('/terms', [ensureUser], consent); router.get('/share/verify/:shareId', checkPrivateShareId); +router.get('/share', [ensureUser], listSharedNodes); router.get('/share/:uuid', [ensureUser], getPrivateShare); router.post('/share/:uuid', [ensureUser], createPrivateShare); router.post('/revokeShare/:uuid', [ensureUser], revokePrivateShare); From 2b5695fbccba8f73c91701ed223bfdd772389e07 Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 18 Apr 2024 10:43:37 +0200 Subject: [PATCH 094/141] reverse-proxy: add support for washing secrets in response bodies --- reverse-proxy/README.md | 6 ++++++ reverse-proxy/src/index.ts | 39 +++++++++++++++++++------------------- reverse-proxy/src/util.ts | 38 +++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 reverse-proxy/src/util.ts diff --git a/reverse-proxy/README.md b/reverse-proxy/README.md index d5a314a06..060556914 100644 --- a/reverse-proxy/README.md +++ b/reverse-proxy/README.md @@ -15,6 +15,12 @@ So, in general, the pattern is `PROXY_MAPPING_[redirect key]=[redirect target]`. | `/example` | https://example.com | | `/example/cats` | https://example.com/cats | + +## Washing responses +Some targets (looking at you, Alchemy) return the URL secrets in the response body. Since this is target-dependent, you need to add detection code in `getSensitiveStrings` if this applies to a new proxy target. + +The request interceptor automatically washes all response bodies that goes back to the client by replacing instances of all these sensitive strings with `[redacted]`. + ## Running Run in development mode: ```shell diff --git a/reverse-proxy/src/index.ts b/reverse-proxy/src/index.ts index 9e0fc4ac6..7b20387f3 100644 --- a/reverse-proxy/src/index.ts +++ b/reverse-proxy/src/index.ts @@ -1,24 +1,20 @@ import express from 'express'; import { ServerResponse } from 'http'; -import { createProxyMiddleware } from 'http-proxy-middleware'; +import { createProxyMiddleware, responseInterceptor } from 'http-proxy-middleware'; +import { buildMappingFromEnv, getSensitiveStrings, redactSensitive } from './util.js'; const SENSIBLE_KEY_REGEX = '^\/[a-zA-Z0-9_-]+'; const rSensibleKey = RegExp(SENSIBLE_KEY_REGEX); -type Mapping = Record; - -const mapping: Mapping = Object.fromEntries( - Object.entries(process.env as { [s:string]: string } ) - .filter(([k, _]) => k.startsWith("PROXY_MAPPING_")) - .map(([k, v]) => [k.replace("PROXY_MAPPING_", ""), v]) - .map(([k, v]) => ["/" + k.toLowerCase(), v]) -); +const mapping = buildMappingFromEnv(); console.log( "Raw mapping configuration loaded:\n", JSON.stringify(mapping, undefined, 2) ); +const sensitiveStrings = getSensitiveStrings(mapping); + /** * Checks that a single mapping has a sensible key and that the * target is a valid URL. @@ -49,16 +45,21 @@ const createProxy = (target: string) => createProxyMiddleware({ pathRewrite: { [SENSIBLE_KEY_REGEX]: "" }, // Log each proxy call to console logger: console, + // Disable automatically sending response, handled by responseInterceptor + selfHandleResponse: true, on: { - error: (_err, _req, res) => { - if (res instanceof ServerResponse) { - res.writeHead(500, { - 'Content-Type': 'text/plain', - }); - res.end('Something went wrong while proxying the request'); - }; + error: (_err, _req, res) => (res as ServerResponse) + .writeHead(500, { 'Content-Type': 'text/plain' }) + .end('Something went wrong while proxying the request'), + proxyRes: responseInterceptor( + async (responseBuffer, proxyRes, _req, res) => { + res.statusCode = proxyRes.statusCode ?? 200; + return redactSensitive( + sensitiveStrings, + responseBuffer.toString("utf8") + ); + }), }, - } }); const app = express(); @@ -73,8 +74,8 @@ app.use("/healthcheck", (_req, res) => { app.use( (req, res) => { console.log(`Got request for unmapped path ${req.url}, responding 404.`); - return res.status(404).json(`No route found for ${req.url}`) - } + res.writeHead(404, `No route found for ${req.url}`).end(); + }, ); app.listen(5678); diff --git a/reverse-proxy/src/util.ts b/reverse-proxy/src/util.ts new file mode 100644 index 000000000..e9396276b --- /dev/null +++ b/reverse-proxy/src/util.ts @@ -0,0 +1,38 @@ +export type Mapping = Record; + +/** + * Build a route mapping from envvars prefixed `PROXY_MAPPING_` +*/ +export const buildMappingFromEnv = (): Mapping => Object.fromEntries( + Object.entries(process.env as { [s:string]: string } ) + .filter(([k, _]) => k.startsWith("PROXY_MAPPING_")) + .map(([k, v]) => [k.replace("PROXY_MAPPING_", ""), v]) + .map(([k, v]) => ["/" + k.toLowerCase(), v]) +); + +/** + * Find sensitive strings in mapped URL's +*/ +export const getSensitiveStrings = (mapping: Mapping) => { + const urls = Object.values(mapping); + + const alchemyTokens = urls + .filter(url => url.includes("alchemy.com")) + /* 32-char alphanum token with dashes and underscores */ + .map(url => url.match(/[a-zA-Z0-9_-]{32}/)) + /* Remove potential null match for tokenless url */ + .flatMap(maybeMatch => maybeMatch ? [maybeMatch] : []) + /* Get the match from RexExpMatchArray */ + .map(matchArr => matchArr[0]); + + return alchemyTokens; +}; + +export const redactSensitive = ( + sensitiveStrings: string[], + dirty: string +): string => + sensitiveStrings.reduce( + (acc, nextSecret) => acc.replaceAll(nextSecret, "[redacted]"), + dirty, // initial accumulator + ); From ed475f955d89d7a8080962e0243c8b61bbedb0ca Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 18 Apr 2024 11:37:48 +0200 Subject: [PATCH 095/141] nodelib: support staging environment with dev contracts --- nodes-lib/package.json | 2 +- nodes-lib/src/config/chain.ts | 19 ++++++++++++++++--- nodes-lib/src/config/index.ts | 7 +++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/nodes-lib/package.json b/nodes-lib/package.json index 84897ea0c..4964b363d 100644 --- a/nodes-lib/package.json +++ b/nodes-lib/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/nodes-lib", - "version": "0.0.5", + "version": "0.0.6", "homepage": "https://github.com/desci-labs/nodes#readme", "description": "Stand-alone client library for interacting with desci-server", "repository": { diff --git a/nodes-lib/src/config/chain.ts b/nodes-lib/src/config/chain.ts index 05802d130..9474268f9 100644 --- a/nodes-lib/src/config/chain.ts +++ b/nodes-lib/src/config/chain.ts @@ -6,6 +6,7 @@ export type NodesContract = | tc.ResearchObject | tc.ResearchObjectV2 | tc.DpidRegistry; + export type ContractConnector = (signerOrProvider: Signer | providers.Provider) => T; @@ -28,7 +29,7 @@ export const CHAIN_CONFIGS = { local: { chainId: "1337", rpcUrl: "http://localhost:8545", - researchObjectConnector: signerOrProvider => tc.ResearchObject__factory.connect( + researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( contracts.localRoInfo.proxies.at(0)!.address, signerOrProvider ), @@ -39,7 +40,19 @@ export const CHAIN_CONFIGS = { }, dev: { chainId: "11155111", - rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", + rpcUrl: "https://reverse-proxy-dev.desci.com/rpc_sepolia", + researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( + contracts.devRoInfo.proxies.at(0)!.address, + signerOrProvider + ), + dpidRegistryConnector: signerOrProvider => tc.DpidRegistry__factory.connect( + contracts.devDpidInfo.proxies.at(0)!.address, + signerOrProvider + ), + }, + staging: { + chainId: "11155111", + rpcUrl: "https://reverse-proxy-staging.desci.com/rpc_sepolia", researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( contracts.devRoInfo.proxies.at(0)!.address, signerOrProvider @@ -51,7 +64,7 @@ export const CHAIN_CONFIGS = { }, prod: { chainId: "11155111", - rpcUrl: "https://eth-sepolia.g.alchemy.com/v2/demo", + rpcUrl: "https://reverse-proxy-prod.desci.com/rpc_sepolia", researchObjectConnector: signerOrProvider => tc.ResearchObjectV2__factory.connect( contracts.prodRoInfo.proxies.at(0)!.address, signerOrProvider diff --git a/nodes-lib/src/config/index.ts b/nodes-lib/src/config/index.ts index 1cdcd3dd4..5676d32f2 100644 --- a/nodes-lib/src/config/index.ts +++ b/nodes-lib/src/config/index.ts @@ -4,6 +4,7 @@ import { CHAIN_CONFIGS, ChainConfig } from "./chain.js"; export type NodesEnv = | "local" | "dev" + | "staging" | "prod"; export type Config = { @@ -26,6 +27,12 @@ export const NODESLIB_CONFIGS = { ceramicNodeUrl: "https://ceramic-dev.desci.com", chainConfig: CHAIN_CONFIGS.dev, }, + staging: { + apiUrl: "https://nodes-api-staging.desci.com", + apiKey: undefined, + ceramicNodeUrl: "https://ceramic-dev.desci.com", + chainConfig: CHAIN_CONFIGS.dev, // also using the dev sepolia contracts + }, prod: { apiUrl: "https://nodes-api.desci.com", apiKey: undefined, From 450a68c917d32a37c3f586e6e1fdadfbecbec5cd Mon Sep 17 00:00:00 2001 From: m0ar Date: Thu, 18 Apr 2024 11:45:40 +0200 Subject: [PATCH 096/141] nodelib: update readme --- nodes-lib/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nodes-lib/README.md b/nodes-lib/README.md index e6c141db8..d4fb9ebe4 100644 --- a/nodes-lib/README.md +++ b/nodes-lib/README.md @@ -78,7 +78,7 @@ By default, the library defaults to interacting with the nodes dev environment. - dPID registration transactions will be done against a testing contract - Ceramic publishing is done on the Clay testnet -Configure your intended environment by calling the `setConfig` function. If you're not doing something very avant-garde, you can likely just pass a standard config instance like `NODESLIB_CONFIGS.local`. Otherwise, build up your own config object. +Configure your intended environment by calling the `setNodesLibConfig` function. If you're not doing something very avant-garde, you can likely just pass a standard config instance like `NODESLIB_CONFIGS.local`. Otherwise, build up your own config object. Note that your API key must be set manually by calling `setApiKey`, find more information in the Authentication section. From 36051eea72e54ebd726e2587b09bc39974b6bfc5 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Sun, 21 Apr 2024 09:34:03 +0200 Subject: [PATCH 097/141] feat: orcid post record service method impl --- desci-server/package.json | 1 + .../controllers/attestations/verification.ts | 17 ++ desci-server/src/controllers/auth/orcid.ts | 1 + desci-server/src/controllers/nodes/publish.ts | 53 +++-- desci-server/src/services/Attestation.ts | 30 ++- desci-server/src/services/orcid.ts | 203 ++++++++++++++++++ desci-server/yarn.lock | 5 + 7 files changed, 282 insertions(+), 28 deletions(-) create mode 100644 desci-server/src/services/orcid.ts diff --git a/desci-server/package.json b/desci-server/package.json index 21d481f00..a10510f91 100755 --- a/desci-server/package.json +++ b/desci-server/package.json @@ -130,6 +130,7 @@ "@types/node": "^20.10.4", "@types/supertest": "^2.0.12", "@types/ws": "^8.5.10", + "@types/xmldom": "^0.1.34", "@typescript-eslint/eslint-plugin": "^6.14.0", "@typescript-eslint/parser": "^6.14.0", "chai": "^4.3.4", diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index c3550ddee..e92adaed8 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -9,8 +9,11 @@ import { SuccessMessageResponse, SuccessResponse, attestationService, + ensureUuidEndsWithDot, + prisma, } from '../../internal.js'; import { logger as parentLogger } from '../../logger.js'; +import orcidApiService from '../../services/orcid.js'; type RemoveVerificationBody = { verificationId: string; @@ -73,7 +76,21 @@ export const addVerification = async ( }); logger.trace(`addVerification`); + const claim = await attestationService.findClaimById(parseInt(claimId)); + await attestationService.verifyClaim(parseInt(claimId), user.id); + + const attestation = await attestationService.findAttestationById(claim.attestationId); + + if (attestation.protected) { + /** + * Update ORCID Profile + */ + const node = await prisma.node.findFirst({ where: { uuid: ensureUuidEndsWithDot(claim.nodeUuid) } }); + const owner = await prisma.user.findFirst({ where: { id: node.ownerId } }); + if (owner.orcid) await orcidApiService.postWorkRecord(node.uuid, owner.orcid); + } + return new SuccessMessageResponse().send(res); }; diff --git a/desci-server/src/controllers/auth/orcid.ts b/desci-server/src/controllers/auth/orcid.ts index ee93e3060..00241fb35 100755 --- a/desci-server/src/controllers/auth/orcid.ts +++ b/desci-server/src/controllers/auth/orcid.ts @@ -105,6 +105,7 @@ const getAllOrcData = async ({ queryCode, redirectUri }: { queryCode: string; re const orcRecord = await getOrcidRecord(orcAuthResponse.data['orcid'], orcAuthResponse.data['access_token']); logger.info({ fn: 'getAllOrcData', orcRecord }, 'Received OrcId Data'); + // TODO: save access/refresh token into orcid profile table const orcAuthData = { orcid: orcAuthResponse.data['orcid'], orcidAccessToken: orcAuthResponse.data['access_token'], diff --git a/desci-server/src/controllers/nodes/publish.ts b/desci-server/src/controllers/nodes/publish.ts index d6ee4d218..48876e54f 100644 --- a/desci-server/src/controllers/nodes/publish.ts +++ b/desci-server/src/controllers/nodes/publish.ts @@ -14,40 +14,34 @@ import { createDataMirrorJobs, setCeramicStream, } from '../../services/nodeManager.js'; +import orcidApiService from '../../services/orcid.js'; import { discordNotify } from '../../utils/discordUtils.js'; import { ensureUuidEndsWithDot } from '../../utils.js'; - export type PublishReqBody = { - uuid: string, - cid: string, - manifest: ResearchObjectV1, - transactionId: string, - ceramicStream?: string, - commitId?: string, + uuid: string; + cid: string; + manifest: ResearchObjectV1; + transactionId: string; + ceramicStream?: string; + commitId?: string; }; -export type PublishRequest = Request< - never, - never, - PublishReqBody -> & { +export type PublishRequest = Request & { user: User; // added by auth middleware }; -export type PublishResBody = { - ok: boolean, - taskId: number, -} | { - error: string, -}; +export type PublishResBody = + | { + ok: boolean; + taskId: number; + } + | { + error: string; + }; // call node publish service and add job to queue -export const publish = async ( - req: PublishRequest, - res: Response, - _next: NextFunction -) => { +export const publish = async (req: PublishRequest, res: Response, _next: NextFunction) => { const { uuid, cid, manifest, transactionId, ceramicStream, commitId } = req.body; // debugger; const email = req.user.email; @@ -67,16 +61,16 @@ export const publish = async ( if (!uuid || !cid || !manifest) { return res.status(404).send({ error: 'uuid, cid, email, and manifest must be valid' }); - }; + } if (email === undefined || email === null) { // Prevent any issues with prisma findFirst with undefined fields return res.status(401).send({ error: 'email must be valid' }); - }; + } if (!(ceramicStream && commitId)) { logger.warn({ uuid }, `[publish] called with unexpected stream (${ceramicStream}) and/org commit (${commitId})`); - }; + } try { /**TODO: MOVE TO MIDDLEWARE */ @@ -232,7 +226,7 @@ export const publishHandler = async ({ } else { // Likely feature toggle is active in backend, but not in frontend logger.warn(`[ceramic] wanted to set streamID for ${node.uuid} but request did not contain one`); - }; + } logger.trace(`[publish::publish] nodeUuid=${node.uuid}, manifestCid=${cid}, transaction=${transactionId}`); @@ -336,6 +330,11 @@ export const publishHandler = async ({ */ sendDiscordNotification(false); + /** + * Update ORCID Profile + */ + if (owner.orcid) orcidApiService.postWorkRecord(node.uuid, owner.orcid); + /** * Save the cover art for this Node for later sharing: PDF -> JPG for this version */ diff --git a/desci-server/src/services/Attestation.ts b/desci-server/src/services/Attestation.ts index b0142f25c..019dedaa7 100644 --- a/desci-server/src/services/Attestation.ts +++ b/desci-server/src/services/Attestation.ts @@ -1,7 +1,7 @@ import assert from 'assert'; import { HighlightBlock } from '@desci-labs/desci-models'; -import { AnnotationType, Attestation, NodeAttestation, Prisma } from '@prisma/client'; +import { AnnotationType, Attestation, Prisma } from '@prisma/client'; import { logger } from 'ethers'; import _ from 'lodash'; @@ -233,6 +233,34 @@ export class AttestationService { }); } + async getProtectedNodeClaims(dpid: string) { + const data = await prisma.nodeAttestation.findMany({ + where: { nodeDpid10: dpid, revoked: false }, + include: { + community: { select: { name: true } }, + attestation: { select: { protected: true } }, + attestationVersion: { select: { name: true, description: true, image_url: true } }, + _count: { + select: { NodeAttestationVerification: true }, + }, + }, + }); + + const protectedClaims = _(data) + .filter((claim) => claim.attestation.protected === true) + .map((claim) => ({ + id: claim.id, + name: claim.attestationVersion.name, + description: claim.attestationVersion.description, + image_url: claim.attestationVersion.image_url, + verifications: claim._count.NodeAttestationVerification, + community: claim.community.name, + })) + .value(); + + return protectedClaims; + } + async getNodeCommunityAttestations(dpid: string, communityId: number) { return prisma.nodeAttestation.findMany({ where: { nodeDpid10: dpid, desciCommunityId: communityId, revoked: false }, diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts new file mode 100644 index 000000000..c7d528195 --- /dev/null +++ b/desci-server/src/services/orcid.ts @@ -0,0 +1,203 @@ +// expose Orcid api class +// init http client with default headers and api key +// expose api for adding work record to researchers orcid profile +// save put key in node table +// expose api to update orcid record + +import { ResearchObjectV1, ResearchObjectV1Author, ResearchObjectV1AuthorRole } from '@desci-labs/desci-models'; +import axios, { AxiosInstance } from 'axios'; + +import { logger as parentLogger, prisma } from '../internal.js'; +import { getIndexedResearchObjects } from '../theGraph.js'; +import { hexToCid } from '../utils.js'; + +import { attestationService } from './Attestation.js'; +import { getManifestByCid } from './data/processing.js'; + +const PUTCODE_REGEX = /put-code=.*?(?\d+)/m; + +type Claim = Awaited>[number]; +const logger = parentLogger.child({ module: 'ORCIDApiService' }); + +class OrcidApiService { + baseUrl: string; + + constructor() { + if (!process.env.ORCID_API_DOMAIN) throw new Error('[ORCID SERVICE]: ORCID_API_DOMAIN env is missing'); + + // this.#apiKey = process.env.ORCID_API_SECRET; + this.baseUrl = `https://api.${process.env.ORCID_API_DOMAIN}/v3.0`; + + logger.info({ url: this.baseUrl }, 'Init ORCID Service'); + } + + private async getAccessToken(orcid: string) { + const profile = await prisma.orcidProfile.findUnique({ where: { orcidId: orcid }, select: { expiresIn: true } }); + // check if token has expired, refresh + + const token = 'b527e775-aac0-4e19-bc80-fa830e674b97'; + + return token; + } + + async postWorkRecord(nodeUuid: string, orcid: string) { + // TODO: get auth token from orcid profile + // todo: refresh token if necessary + const authToken = await this.getAccessToken(orcid); + + const { researchObjects } = await getIndexedResearchObjects([nodeUuid]); + const researchObject = researchObjects[0]; + const manifestCid = hexToCid(researchObject.recentCid); + const latestManifest = await getManifestByCid(manifestCid); + const nodeVersion = researchObject.versions.length; + const claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); + // logger.info({ researchObject, manifestCid, latestManifest, nodeVersion, claims }, 'POST WORK RECORD'); + // check if node (user) table has existing orcidPutCode + const putCode = '1917594'; + + let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); + data = data.replace(/\\"/g, '"'); + logger.info({ data }, 'REQUEST BODY'); + + try { + const response = await fetch(`${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`, { + method: putCode ? 'PUT' : 'POST', + headers: { + Authorization: `Bearer ${authToken}`, + 'Content-Type': 'application/xml', + Accept: '*/*', + 'Access-Control-Expose-Headers': 'Content-Disposition', + }, + body: data, + }); + + logger.info( + { + // headers: , + status: response.status, + statusText: response.statusText, + putCode, + nodeUuid, + claims: claims.length, + orcid, + }, + 'orcid api response', + ); + + const location = response.headers.get('Location'); + let returnedCode = location?.split(' ')?.[1]; + + if (!returnedCode) { + const body = await response.text(); + const matches = body.match(PUTCODE_REGEX); + logger.info({ matches }, 'Regex match'); + returnedCode = matches.groups?.code; + } + + if (response.status === 201) { + // todo: INSERT put-code into node table + logger.info({ status: response.status, returnedCode }, 'ORCID PROFILE CREATED'); + } else if (response.status === 200) { + logger.info({ status: response.status, returnedCode }, 'ORCID PROFILE UPDATED'); + } + } catch (err) { + logger.info({ err }, 'Error Response'); + } + } +} + +const orcidApiService = new OrcidApiService(); +export default orcidApiService; + +const generateWorkRecord = ({ + manifest, + nodeVersion, + putCode, + claims, +}: { + manifest: ResearchObjectV1; + nodeVersion: number; + claims: Claim[]; + putCode?: string; +}) => { + return ( + ' ' + + '' + + `${manifest.title} + + data-set + ${manifest.description ? `${manifest.description}` : ''} + ${generateExternalIds({ manifest, claims, version: nodeVersion })} + ${generateContributors(manifest.authors ?? [])} + + ` + ); +}; + +const generateExternalIds = ({ + manifest, + version, + claims, +}: { + version: number; + manifest: ResearchObjectV1; + claims: Claim[]; +}) => { + const externalIdPath = `${manifest.components + .map((component) => { + const url = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/${component.payload?.path ?? ''}`; + const title = component.payload?.title || component.name; + return ` + uri + ${title} + ${url} + self + `; + }) + .join(' ')} + ${claims + .map((claim) => { + const url = `${process.env.DAPP_URL}/dpid/${manifest.dpid.id}?claim=${claim.id}`; + + return ` + uri + ${claim.name} by ${claim.community} + ${url} + self + `; + }) + .join(' ')}`; + + return externalIdPath; +}; + +const generateContributors = (authors: ResearchObjectV1Author[]) => { + const contributors = + authors?.length > 0 + ? ` + ${authors + .map((author, idx) => { + return ` + ${ + author.orcid + ? ` + https://${process.env.ORCID_API_DOMAIN}/${author.orcid} + ${author.orcid} + ${process.env.ORCID_API_DOMAIN} + ` + : `` + } + ${author.name} + + ${idx === 0 ? 'first' : 'additional'} + author + + `; + }) + .join(' ')} + ` + : ``; + return contributors; +}; diff --git a/desci-server/yarn.lock b/desci-server/yarn.lock index 2e4b53f4d..60f309f24 100644 --- a/desci-server/yarn.lock +++ b/desci-server/yarn.lock @@ -5842,6 +5842,11 @@ dependencies: "@types/node" "*" +"@types/xmldom@^0.1.34": + version "0.1.34" + resolved "https://registry.yarnpkg.com/@types/xmldom/-/xmldom-0.1.34.tgz#a752f73bdf09cc6d78b3d3b2e7ca4dd04cc96fd2" + integrity sha512-7eZFfxI9XHYjJJuugddV6N5YNeXgQE1lArWOcd1eCOKWb/FGs5SIjacSYuEJuwhsGS3gy4RuZ5EUIcqYscuPDA== + "@typescript-eslint/eslint-plugin@^6.14.0": version "6.21.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3" From 42d6111563491b81ed36547b66ff30e89f922122 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Sun, 21 Apr 2024 15:56:39 +0200 Subject: [PATCH 098/141] feat: implement orcid api service for writing and updating work records --- .../migration.sql | 23 +++++ desci-server/prisma/schema.prisma | 22 +++++ desci-server/src/services/orcid.ts | 99 +++++++++++-------- 3 files changed, 104 insertions(+), 40 deletions(-) create mode 100644 desci-server/prisma/migrations/20240421124358_orcid_record_putcodes/migration.sql diff --git a/desci-server/prisma/migrations/20240421124358_orcid_record_putcodes/migration.sql b/desci-server/prisma/migrations/20240421124358_orcid_record_putcodes/migration.sql new file mode 100644 index 000000000..fc2b16582 --- /dev/null +++ b/desci-server/prisma/migrations/20240421124358_orcid_record_putcodes/migration.sql @@ -0,0 +1,23 @@ +-- CreateEnum +CREATE TYPE "ORCIDRecord" AS ENUM ('WORK', 'QUALIFICATION', 'EDUCATION', 'EMPLOYMENT'); + +-- CreateTable +CREATE TABLE "OrcidPutCodes" ( + "id" SERIAL NOT NULL, + "orcid" TEXT NOT NULL, + "putcode" TEXT, + "record" "ORCIDRecord" NOT NULL, + "userId" INTEGER NOT NULL, + "uuid" TEXT NOT NULL, + + CONSTRAINT "OrcidPutCodes_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "OrcidPutCodes_orcid_record_uuid_key" ON "OrcidPutCodes"("orcid", "record", "uuid"); + +-- AddForeignKey +ALTER TABLE "OrcidPutCodes" ADD CONSTRAINT "OrcidPutCodes_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "OrcidPutCodes" ADD CONSTRAINT "OrcidPutCodes_uuid_fkey" FOREIGN KEY ("uuid") REFERENCES "Node"("uuid") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/desci-server/prisma/schema.prisma b/desci-server/prisma/schema.prisma index 06a2b5852..19c75dc72 100755 --- a/desci-server/prisma/schema.prisma +++ b/desci-server/prisma/schema.prisma @@ -42,6 +42,7 @@ model Node { PublishTaskQueue PublishTaskQueue[] NodeContribution NodeContribution[] PrivateShare PrivateShare[] + OrcidPutCodes OrcidPutCodes[] @@index([ownerId]) @@index([uuid]) @@ -186,6 +187,7 @@ model User { ApiKey ApiKey[] PublishTaskQueue PublishTaskQueue[] NodeContribution NodeContribution[] + OrcidPutCodes OrcidPutCodes[] @@index([orcid]) @@index([walletAddress]) @@ -787,6 +789,26 @@ model PublishTaskQueue { user User @relation(fields: [userId], references: [id]) } +model OrcidPutCodes { + id Int @id @default(autoincrement()) + orcid String + putcode String? + record ORCIDRecord + userId Int + uuid String + user User @relation(fields: [userId], references: [id]) + Node Node @relation(fields: [uuid], references: [uuid]) + + @@unique([orcid, record, uuid]) +} + +enum ORCIDRecord { + WORK + QUALIFICATION + EDUCATION + EMPLOYMENT +} + enum CommunityMembershipRole { ADMIN MEMBER diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index c7d528195..49b5a5d3c 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -1,11 +1,5 @@ -// expose Orcid api class -// init http client with default headers and api key -// expose api for adding work record to researchers orcid profile -// save put key in node table -// expose api to update orcid record - -import { ResearchObjectV1, ResearchObjectV1Author, ResearchObjectV1AuthorRole } from '@desci-labs/desci-models'; -import axios, { AxiosInstance } from 'axios'; +import { ResearchObjectV1, ResearchObjectV1Author } from '@desci-labs/desci-models'; +import { AuthTokenSource, ORCIDRecord } from '@prisma/client'; import { logger as parentLogger, prisma } from '../internal.js'; import { getIndexedResearchObjects } from '../theGraph.js'; @@ -23,27 +17,34 @@ class OrcidApiService { baseUrl: string; constructor() { - if (!process.env.ORCID_API_DOMAIN) throw new Error('[ORCID SERVICE]: ORCID_API_DOMAIN env is missing'); - - // this.#apiKey = process.env.ORCID_API_SECRET; + if (!process.env.ORCID_API_DOMAIN) throw new Error('[OrcidApiService]: ORCID_API_DOMAIN env is missing'); this.baseUrl = `https://api.${process.env.ORCID_API_DOMAIN}/v3.0`; logger.info({ url: this.baseUrl }, 'Init ORCID Service'); } - private async getAccessToken(orcid: string) { - const profile = await prisma.orcidProfile.findUnique({ where: { orcidId: orcid }, select: { expiresIn: true } }); - // check if token has expired, refresh - - const token = 'b527e775-aac0-4e19-bc80-fa830e674b97'; + private async getAccessToken(userId: number) { + const authToken = await prisma.authToken.findFirst({ + where: { + userId, + source: AuthTokenSource.ORCID, + }, + }); + if (!authToken) { + throw new Error('User does not have an orcid auth token'); + } + // todo: refresh token if necessary - return token; + return authToken.accessToken; } async postWorkRecord(nodeUuid: string, orcid: string) { // TODO: get auth token from orcid profile - // todo: refresh token if necessary - const authToken = await this.getAccessToken(orcid); + const user = await prisma.user.findUnique({ where: { orcid } }); + const authToken = await this.getAccessToken(user.id); + const orcidPutCode = await prisma.orcidPutCodes.findFirst({ + where: { uuid: nodeUuid, orcid, userId: user.id, record: ORCIDRecord.WORK }, + }); const { researchObjects } = await getIndexedResearchObjects([nodeUuid]); const researchObject = researchObjects[0]; @@ -51,13 +52,10 @@ class OrcidApiService { const latestManifest = await getManifestByCid(manifestCid); const nodeVersion = researchObject.versions.length; const claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); - // logger.info({ researchObject, manifestCid, latestManifest, nodeVersion, claims }, 'POST WORK RECORD'); - // check if node (user) table has existing orcidPutCode - const putCode = '1917594'; + const putCode = orcidPutCode?.putcode; // '1917594';; let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); data = data.replace(/\\"/g, '"'); - logger.info({ data }, 'REQUEST BODY'); try { const response = await fetch(`${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`, { @@ -73,7 +71,6 @@ class OrcidApiService { logger.info( { - // headers: , status: response.status, statusText: response.statusText, putCode, @@ -81,24 +78,45 @@ class OrcidApiService { claims: claims.length, orcid, }, - 'orcid api response', + 'ORCID API RESPONSE', ); - const location = response.headers.get('Location'); - let returnedCode = location?.split(' ')?.[1]; - - if (!returnedCode) { - const body = await response.text(); - const matches = body.match(PUTCODE_REGEX); - logger.info({ matches }, 'Regex match'); - returnedCode = matches.groups?.code; - } - - if (response.status === 201) { - // todo: INSERT put-code into node table - logger.info({ status: response.status, returnedCode }, 'ORCID PROFILE CREATED'); - } else if (response.status === 200) { - logger.info({ status: response.status, returnedCode }, 'ORCID PROFILE UPDATED'); + if ([200, 201].includes(response.status)) { + const location = response.headers.get('Location'); + let returnedCode = location?.split(' ')?.[1]; + + if (!returnedCode) { + const body = await response.text(); + const matches = body.match(PUTCODE_REGEX); + logger.info({ matches, body }, 'Regex match'); + returnedCode = matches?.groups?.code || putCode; + } + + await prisma.orcidPutCodes.upsert({ + where: { + orcid_record_uuid: { + orcid, + record: ORCIDRecord.WORK, + uuid: nodeUuid, + }, + }, + update: { + orcid, + uuid: nodeUuid, + putcode: returnedCode, + record: ORCIDRecord.WORK, + }, + create: { + orcid, + uuid: nodeUuid, + userId: user.id, + putcode: returnedCode, + record: ORCIDRecord.WORK, + }, + }); + logger.info({ nodeUuid, userId: user.id, status: response.status, returnedCode }, 'ORCID PROFILE UPDATED'); + } else { + logger.info({ status: response.status, body: await response.text() }, 'ORCID API ERROR'); } } catch (err) { logger.info({ err }, 'Error Response'); @@ -146,6 +164,7 @@ const generateExternalIds = ({ claims: Claim[]; }) => { const externalIdPath = `${manifest.components + .filter((component) => component.starred === true) .map((component) => { const url = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/${component.payload?.path ?? ''}`; const title = component.payload?.title || component.name; From 5e9f1a465e91c1ca6c7dda07c388373dc46d82c4 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Sun, 21 Apr 2024 16:22:41 +0200 Subject: [PATCH 099/141] add verified protected claims only to orcid profile --- desci-server/src/services/orcid.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 49b5a5d3c..f4fa59819 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -51,13 +51,15 @@ class OrcidApiService { const manifestCid = hexToCid(researchObject.recentCid); const latestManifest = await getManifestByCid(manifestCid); const nodeVersion = researchObject.versions.length; - const claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); + let claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); + claims = claims.filter((claim) => claim.verifications > 0); const putCode = orcidPutCode?.putcode; // '1917594';; let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); data = data.replace(/\\"/g, '"'); try { + logger.info({ latestManifest, manifestCid, data }, 'WORK DATA'); const response = await fetch(`${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`, { method: putCode ? 'PUT' : 'POST', headers: { @@ -146,7 +148,7 @@ const generateWorkRecord = ({ `${manifest.title} data-set - ${manifest.description ? `${manifest.description}` : ''} + ${manifest.description.trim() ? `${manifest.description}` : ''} ${generateExternalIds({ manifest, claims, version: nodeVersion })} ${generateContributors(manifest.authors ?? [])} From b379542771cac22f7064a07ca09f2f9247fb63e6 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Sun, 21 Apr 2024 16:47:09 +0200 Subject: [PATCH 100/141] add fallback orcid domain for test workflow --- desci-server/src/services/orcid.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index f4fa59819..f7193a32c 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -10,6 +10,7 @@ import { getManifestByCid } from './data/processing.js'; const PUTCODE_REGEX = /put-code=.*?(?\d+)/m; +const ORCID_DOMAIN = process.env.ORCID_API_DOMAIN || 'sandbox.orcid.org'; type Claim = Awaited>[number]; const logger = parentLogger.child({ module: 'ORCIDApiService' }); @@ -17,8 +18,8 @@ class OrcidApiService { baseUrl: string; constructor() { - if (!process.env.ORCID_API_DOMAIN) throw new Error('[OrcidApiService]: ORCID_API_DOMAIN env is missing'); - this.baseUrl = `https://api.${process.env.ORCID_API_DOMAIN}/v3.0`; + if (!ORCID_DOMAIN) throw new Error('[OrcidApiService]: ORCID_API_DOMAIN env is missing'); + this.baseUrl = `https://api.${ORCID_DOMAIN}/v3.0`; logger.info({ url: this.baseUrl }, 'Init ORCID Service'); } @@ -204,9 +205,9 @@ const generateContributors = (authors: ResearchObjectV1Author[]) => { ${ author.orcid ? ` - https://${process.env.ORCID_API_DOMAIN}/${author.orcid} + https://${ORCID_DOMAIN}/${author.orcid} ${author.orcid} - ${process.env.ORCID_API_DOMAIN} + ${ORCID_DOMAIN} ` : `` } From 451d2030eaef8c64e50134b5cce0208a71380700 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Sun, 21 Apr 2024 23:36:12 +0200 Subject: [PATCH 101/141] remove test skips --- desci-server/test/integration/Attestation.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 9dacabf5e..6102f1eeb 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -2046,7 +2046,7 @@ describe('Attestations Service', async () => { }); }); - describe.only('Protected Attestation Verification', async () => { + describe('Protected Attestation Verification', async () => { let openCodeClaim: NodeAttestation; let openDataClaim: NodeAttestation; let node: Node; From 691996c11492ee5a8cfc9fe1408892335ebe97fd Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Mon, 22 Apr 2024 23:41:21 +0200 Subject: [PATCH 102/141] fix: undefined putcode included in orcid api data --- desci-server/src/services/orcid.ts | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index f7193a32c..25fa08cc7 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -40,7 +40,6 @@ class OrcidApiService { } async postWorkRecord(nodeUuid: string, orcid: string) { - // TODO: get auth token from orcid profile const user = await prisma.user.findUnique({ where: { orcid } }); const authToken = await this.getAccessToken(user.id); const orcidPutCode = await prisma.orcidPutCodes.findFirst({ @@ -55,12 +54,12 @@ class OrcidApiService { let claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); claims = claims.filter((claim) => claim.verifications > 0); - const putCode = orcidPutCode?.putcode; // '1917594';; + const putCode = orcidPutCode?.putcode; let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); data = data.replace(/\\"/g, '"'); try { - logger.info({ latestManifest, manifestCid, data }, 'WORK DATA'); + logger.info({ latestManifest, manifestCid, data, orcidPutCode, putCode }, 'WORK DATA'); const response = await fetch(`${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`, { method: putCode ? 'PUT' : 'POST', headers: { @@ -119,7 +118,7 @@ class OrcidApiService { }); logger.info({ nodeUuid, userId: user.id, status: response.status, returnedCode }, 'ORCID PROFILE UPDATED'); } else { - logger.info({ status: response.status, body: await response.text() }, 'ORCID API ERROR'); + logger.info({ status: response.status, response, body: await response.text() }, 'ORCID API ERROR'); } } catch (err) { logger.info({ err }, 'Error Response'); @@ -141,20 +140,20 @@ const generateWorkRecord = ({ claims: Claim[]; putCode?: string; }) => { - return ( - ' ' + - '' + - `${manifest.title} + return ' ' + + '' + + `${manifest.title} data-set ${manifest.description.trim() ? `${manifest.description}` : ''} ${generateExternalIds({ manifest, claims, version: nodeVersion })} ${generateContributors(manifest.authors ?? [])} - ` - ); + `; }; const generateExternalIds = ({ From 9c4423119ef989c5e8fd7d20e6fcf2523ddf9c19 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 23 Apr 2024 14:17:10 +0200 Subject: [PATCH 103/141] fix: orcid xml schema --- desci-server/src/services/orcid.ts | 131 +++++++++++++++-------------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 25fa08cc7..fd47b50ac 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -40,28 +40,30 @@ class OrcidApiService { } async postWorkRecord(nodeUuid: string, orcid: string) { - const user = await prisma.user.findUnique({ where: { orcid } }); - const authToken = await this.getAccessToken(user.id); - const orcidPutCode = await prisma.orcidPutCodes.findFirst({ - where: { uuid: nodeUuid, orcid, userId: user.id, record: ORCIDRecord.WORK }, - }); - - const { researchObjects } = await getIndexedResearchObjects([nodeUuid]); - const researchObject = researchObjects[0]; - const manifestCid = hexToCid(researchObject.recentCid); - const latestManifest = await getManifestByCid(manifestCid); - const nodeVersion = researchObject.versions.length; - let claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); - claims = claims.filter((claim) => claim.verifications > 0); - - const putCode = orcidPutCode?.putcode; - let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); - data = data.replace(/\\"/g, '"'); - try { - logger.info({ latestManifest, manifestCid, data, orcidPutCode, putCode }, 'WORK DATA'); - const response = await fetch(`${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`, { - method: putCode ? 'PUT' : 'POST', + const user = await prisma.user.findUnique({ where: { orcid } }); + const authToken = await this.getAccessToken(user.id); + const orcidPutCode = await prisma.orcidPutCodes.findFirst({ + where: { uuid: nodeUuid, orcid, userId: user.id, record: ORCIDRecord.WORK }, + }); + + const { researchObjects } = await getIndexedResearchObjects([nodeUuid]); + const researchObject = researchObjects[0]; + const manifestCid = hexToCid(researchObject.recentCid); + const latestManifest = await getManifestByCid(manifestCid); + const nodeVersion = researchObject.versions.length; + let claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); + claims = claims.filter((claim) => claim.verifications > 0); + + const putCode = orcidPutCode?.putcode; + let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); + data = data.replace(/\\"/g, '"'); + + const url = `${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`; + const method = putCode ? 'PUT' : 'POST'; + logger.info({ latestManifest, manifestCid, data, orcidPutCode, putCode, url, method }, 'WORK DATA'); + const response = await fetch(url, { + method, headers: { Authorization: `Bearer ${authToken}`, 'Content-Type': 'application/xml', @@ -84,38 +86,36 @@ class OrcidApiService { ); if ([200, 201].includes(response.status)) { - const location = response.headers.get('Location'); - let returnedCode = location?.split(' ')?.[1]; - - if (!returnedCode) { - const body = await response.text(); - const matches = body.match(PUTCODE_REGEX); - logger.info({ matches, body }, 'Regex match'); - returnedCode = matches?.groups?.code || putCode; - } - - await prisma.orcidPutCodes.upsert({ - where: { - orcid_record_uuid: { + const location = response.headers.get('Location')?.split('/'); + const returnedCode = location?.[location.length - 1]; + response.headers.forEach((header, key) => logger.info({ key, header }, 'Response header')); + logger.info({ location }, 'RESPONSE HEADER Location'); + + if (returnedCode) { + await prisma.orcidPutCodes.upsert({ + where: { + orcid_record_uuid: { + orcid, + record: ORCIDRecord.WORK, + uuid: nodeUuid, + }, + }, + update: { orcid, + uuid: nodeUuid, + putcode: returnedCode, record: ORCIDRecord.WORK, + }, + create: { + orcid, uuid: nodeUuid, + userId: user.id, + putcode: returnedCode, + record: ORCIDRecord.WORK, }, - }, - update: { - orcid, - uuid: nodeUuid, - putcode: returnedCode, - record: ORCIDRecord.WORK, - }, - create: { - orcid, - uuid: nodeUuid, - userId: user.id, - putcode: returnedCode, - record: ORCIDRecord.WORK, - }, - }); + }); + } + logger.info({ nodeUuid, userId: user.id, status: response.status, returnedCode }, 'ORCID PROFILE UPDATED'); } else { logger.info({ status: response.status, response, body: await response.text() }, 'ORCID API ERROR'); @@ -140,20 +140,22 @@ const generateWorkRecord = ({ claims: Claim[]; putCode?: string; }) => { - return ' ' + - '' + - `${manifest.title} + const codeAttr = putCode ? 'put-code="' + putCode + '"' : ''; + logger.info({ codeAttr }, 'CODE ATTR'); + return ( + ' ' + + '' + + `${manifest.title} + ${manifest?.description?.trim() ? `${manifest.description}` : ''} data-set - ${manifest.description.trim() ? `${manifest.description}` : ''} ${generateExternalIds({ manifest, claims, version: nodeVersion })} ${generateContributors(manifest.authors ?? [])} - `; + ` + ); }; const generateExternalIds = ({ @@ -165,14 +167,21 @@ const generateExternalIds = ({ manifest: ResearchObjectV1; claims: Claim[]; }) => { - const externalIdPath = `${manifest.components + const dataRoot = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/root`; + const externalIdPath = ` + + uri + ${dataRoot} + ${dataRoot} + self + + ${manifest.components .filter((component) => component.starred === true) .map((component) => { const url = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/${component.payload?.path ?? ''}`; - const title = component.payload?.title || component.name; return ` uri - ${title} + ${url} ${url} self `; From 08d03a43bf2f4a3c69831c2f5d489cc47d86d5a5 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 23 Apr 2024 21:48:25 +0200 Subject: [PATCH 104/141] fix: prevent storing duplicate orcid authToken for same user, update orcid work record after protected claim is unverified --- .../controllers/attestations/verification.ts | 13 +++++++ desci-server/src/services/orcid.ts | 38 ++++++++++++++++++- desci-server/src/services/user.ts | 15 +++++++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index e92adaed8..52c6c7944 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -48,6 +48,19 @@ export const removeVerification = async ( return new SuccessMessageResponse().send(res); } else { await attestationService.removeVerification(verification.id, user.id); + + const claim = await attestationService.findClaimById(verification.nodeAttestationId); + + const attestation = await attestationService.findAttestationById(claim.attestationId); + + if (attestation.protected) { + /** + * Update ORCID Profile + */ + const node = await prisma.node.findFirst({ where: { uuid: ensureUuidEndsWithDot(claim.nodeUuid) } }); + const owner = await prisma.user.findFirst({ where: { id: node.ownerId } }); + if (owner.orcid) await orcidApiService.postWorkRecord(node.uuid, owner.orcid); + } return new SuccessMessageResponse().send(res); } }; diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index fd47b50ac..3a2517a8b 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -25,7 +25,7 @@ class OrcidApiService { } private async getAccessToken(userId: number) { - const authToken = await prisma.authToken.findFirst({ + let authToken = await prisma.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID, @@ -34,7 +34,43 @@ class OrcidApiService { if (!authToken) { throw new Error('User does not have an orcid auth token'); } + // todo: refresh token if necessary + try { + const url = `https://${ORCID_DOMAIN}/oauth/token?client_id=${process.env.ORCID_CLIENT_ID!}&client_secret=${process + .env + .ORCID_CLIENT_SECRET!}&grant_type=refresh_token&refresh_token=${authToken.refreshToken}&revoke_old=true&redirect_uri=${process.env.DAPP_URL}/orcid/capture`; + logger.info({ url }, 'REFRESH TOKEN'); + const response = await fetch(url, { + method: 'post', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + }); + if (response.status === 200) { + const data = (await response.json()) as { + access_token: string; + token_type: string; + refresh_token: string; + expires_in: number; + scope: string; + name: string; + orcid: string; + }; + authToken = await prisma.authToken.upsert({ + where: { id: authToken.id }, + update: { refreshToken: data.refresh_token, expiresIn: data.expires_in, accessToken: data.access_token }, + create: { + refreshToken: data.refresh_token, + expiresIn: data.expires_in, + accessToken: data.access_token, + source: AuthTokenSource.ORCID, + userId: authToken.userId, + }, + }); + } + logger.info({ status: response.status, statusText: response.statusText }, 'REFRESH TOKEN RESPONSE'); + } catch (err) { + logger.info({ err }, 'ORCID REFRESH TOKEN ERROR'); + } return authToken.accessToken; } diff --git a/desci-server/src/services/user.ts b/desci-server/src/services/user.ts index 1f651ac08..0c7a25250 100644 --- a/desci-server/src/services/user.ts +++ b/desci-server/src/services/user.ts @@ -239,8 +239,19 @@ export async function setOrcidForUser( }, }); logger.trace({ fn: 'setOrcidForUser' }, 'updated user'); - const authTokenInsert = await client.authToken.create({ - data: { + const exists = await client.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID } }); + await client.authToken.upsert({ + where: { + id: exists.id, + }, + create: { + accessToken: auth.accessToken, + refreshToken: auth.refreshToken, + expiresIn: auth.expiresIn, + userId, + source: AuthTokenSource.ORCID, + }, + update: { accessToken: auth.accessToken, refreshToken: auth.refreshToken, expiresIn: auth.expiresIn, From a71c870be69d02be518a4a7395bcaccb51d0e2a6 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 23 Apr 2024 23:35:13 +0200 Subject: [PATCH 105/141] fix: hanging tests --- desci-server/src/services/user.ts | 50 +++++++++++++++++++------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/desci-server/src/services/user.ts b/desci-server/src/services/user.ts index 0c7a25250..3ea0d4895 100644 --- a/desci-server/src/services/user.ts +++ b/desci-server/src/services/user.ts @@ -240,25 +240,37 @@ export async function setOrcidForUser( }); logger.trace({ fn: 'setOrcidForUser' }, 'updated user'); const exists = await client.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID } }); - await client.authToken.upsert({ - where: { - id: exists.id, - }, - create: { - accessToken: auth.accessToken, - refreshToken: auth.refreshToken, - expiresIn: auth.expiresIn, - userId, - source: AuthTokenSource.ORCID, - }, - update: { - accessToken: auth.accessToken, - refreshToken: auth.refreshToken, - expiresIn: auth.expiresIn, - userId, - source: AuthTokenSource.ORCID, - }, - }); + if (exists) { + await client.authToken.upsert({ + where: { + id: exists.id, + }, + create: { + accessToken: auth.accessToken, + refreshToken: auth.refreshToken, + expiresIn: auth.expiresIn, + userId, + source: AuthTokenSource.ORCID, + }, + update: { + accessToken: auth.accessToken, + refreshToken: auth.refreshToken, + expiresIn: auth.expiresIn, + userId, + source: AuthTokenSource.ORCID, + }, + }); + } else { + await client.authToken.create({ + data: { + accessToken: auth.accessToken, + refreshToken: auth.refreshToken, + expiresIn: auth.expiresIn, + userId, + source: AuthTokenSource.ORCID, + }, + }); + } logger.trace({ fn: 'setOrcidForUser' }, 'added auth token'); } else { logger.trace({ fn: 'setOrcidForUser' }, 'no user found'); From fee2e03aea5fd8217a66f58daf5a473ac29ab9b8 Mon Sep 17 00:00:00 2001 From: Shadrach Temitayo Date: Tue, 23 Apr 2024 23:37:14 +0200 Subject: [PATCH 106/141] Revert "Orcid authtoken refresh" --- .../controllers/attestations/verification.ts | 13 ------- desci-server/src/services/orcid.ts | 38 +------------------ desci-server/src/services/user.ts | 15 +------- 3 files changed, 3 insertions(+), 63 deletions(-) diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index 52c6c7944..e92adaed8 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -48,19 +48,6 @@ export const removeVerification = async ( return new SuccessMessageResponse().send(res); } else { await attestationService.removeVerification(verification.id, user.id); - - const claim = await attestationService.findClaimById(verification.nodeAttestationId); - - const attestation = await attestationService.findAttestationById(claim.attestationId); - - if (attestation.protected) { - /** - * Update ORCID Profile - */ - const node = await prisma.node.findFirst({ where: { uuid: ensureUuidEndsWithDot(claim.nodeUuid) } }); - const owner = await prisma.user.findFirst({ where: { id: node.ownerId } }); - if (owner.orcid) await orcidApiService.postWorkRecord(node.uuid, owner.orcid); - } return new SuccessMessageResponse().send(res); } }; diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 3a2517a8b..fd47b50ac 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -25,7 +25,7 @@ class OrcidApiService { } private async getAccessToken(userId: number) { - let authToken = await prisma.authToken.findFirst({ + const authToken = await prisma.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID, @@ -34,43 +34,7 @@ class OrcidApiService { if (!authToken) { throw new Error('User does not have an orcid auth token'); } - // todo: refresh token if necessary - try { - const url = `https://${ORCID_DOMAIN}/oauth/token?client_id=${process.env.ORCID_CLIENT_ID!}&client_secret=${process - .env - .ORCID_CLIENT_SECRET!}&grant_type=refresh_token&refresh_token=${authToken.refreshToken}&revoke_old=true&redirect_uri=${process.env.DAPP_URL}/orcid/capture`; - logger.info({ url }, 'REFRESH TOKEN'); - const response = await fetch(url, { - method: 'post', - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - }); - if (response.status === 200) { - const data = (await response.json()) as { - access_token: string; - token_type: string; - refresh_token: string; - expires_in: number; - scope: string; - name: string; - orcid: string; - }; - authToken = await prisma.authToken.upsert({ - where: { id: authToken.id }, - update: { refreshToken: data.refresh_token, expiresIn: data.expires_in, accessToken: data.access_token }, - create: { - refreshToken: data.refresh_token, - expiresIn: data.expires_in, - accessToken: data.access_token, - source: AuthTokenSource.ORCID, - userId: authToken.userId, - }, - }); - } - logger.info({ status: response.status, statusText: response.statusText }, 'REFRESH TOKEN RESPONSE'); - } catch (err) { - logger.info({ err }, 'ORCID REFRESH TOKEN ERROR'); - } return authToken.accessToken; } diff --git a/desci-server/src/services/user.ts b/desci-server/src/services/user.ts index 0c7a25250..1f651ac08 100644 --- a/desci-server/src/services/user.ts +++ b/desci-server/src/services/user.ts @@ -239,19 +239,8 @@ export async function setOrcidForUser( }, }); logger.trace({ fn: 'setOrcidForUser' }, 'updated user'); - const exists = await client.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID } }); - await client.authToken.upsert({ - where: { - id: exists.id, - }, - create: { - accessToken: auth.accessToken, - refreshToken: auth.refreshToken, - expiresIn: auth.expiresIn, - userId, - source: AuthTokenSource.ORCID, - }, - update: { + const authTokenInsert = await client.authToken.create({ + data: { accessToken: auth.accessToken, refreshToken: auth.refreshToken, expiresIn: auth.expiresIn, From e5eb8d644939a58ea8095ed52fcc750f99958a90 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 24 Apr 2024 00:31:00 +0200 Subject: [PATCH 107/141] restore deleted refresh token logic --- desci-server/src/services/orcid.ts | 38 +++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index fd47b50ac..3a2517a8b 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -25,7 +25,7 @@ class OrcidApiService { } private async getAccessToken(userId: number) { - const authToken = await prisma.authToken.findFirst({ + let authToken = await prisma.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID, @@ -34,7 +34,43 @@ class OrcidApiService { if (!authToken) { throw new Error('User does not have an orcid auth token'); } + // todo: refresh token if necessary + try { + const url = `https://${ORCID_DOMAIN}/oauth/token?client_id=${process.env.ORCID_CLIENT_ID!}&client_secret=${process + .env + .ORCID_CLIENT_SECRET!}&grant_type=refresh_token&refresh_token=${authToken.refreshToken}&revoke_old=true&redirect_uri=${process.env.DAPP_URL}/orcid/capture`; + logger.info({ url }, 'REFRESH TOKEN'); + const response = await fetch(url, { + method: 'post', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + }); + if (response.status === 200) { + const data = (await response.json()) as { + access_token: string; + token_type: string; + refresh_token: string; + expires_in: number; + scope: string; + name: string; + orcid: string; + }; + authToken = await prisma.authToken.upsert({ + where: { id: authToken.id }, + update: { refreshToken: data.refresh_token, expiresIn: data.expires_in, accessToken: data.access_token }, + create: { + refreshToken: data.refresh_token, + expiresIn: data.expires_in, + accessToken: data.access_token, + source: AuthTokenSource.ORCID, + userId: authToken.userId, + }, + }); + } + logger.info({ status: response.status, statusText: response.statusText }, 'REFRESH TOKEN RESPONSE'); + } catch (err) { + logger.info({ err }, 'ORCID REFRESH TOKEN ERROR'); + } return authToken.accessToken; } From da2b7de5eaeff54ab6cb2d3de86f14f4189bea9c Mon Sep 17 00:00:00 2001 From: kadami Date: Wed, 24 Apr 2024 10:46:43 +0700 Subject: [PATCH 108/141] fix port --- desci-server/scripts/be-node-dev.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index f01296753..3a7941689 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -4,7 +4,7 @@ apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run From f019824a58fc925a4611bf9fbc983d4aa9a8204a Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 24 Apr 2024 15:01:44 +0200 Subject: [PATCH 109/141] restore multiple orcid auth token insertion, query auth token in descending order in refresh token logic --- desci-server/src/services/orcid.ts | 1 + desci-server/src/services/user.ts | 42 +++++++----------------------- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 3a2517a8b..32ec1d178 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -30,6 +30,7 @@ class OrcidApiService { userId, source: AuthTokenSource.ORCID, }, + orderBy: { updatedAt: 'desc' }, }); if (!authToken) { throw new Error('User does not have an orcid auth token'); diff --git a/desci-server/src/services/user.ts b/desci-server/src/services/user.ts index 3ea0d4895..ea81ee21b 100644 --- a/desci-server/src/services/user.ts +++ b/desci-server/src/services/user.ts @@ -239,38 +239,16 @@ export async function setOrcidForUser( }, }); logger.trace({ fn: 'setOrcidForUser' }, 'updated user'); - const exists = await client.authToken.findFirst({ where: { userId, source: AuthTokenSource.ORCID } }); - if (exists) { - await client.authToken.upsert({ - where: { - id: exists.id, - }, - create: { - accessToken: auth.accessToken, - refreshToken: auth.refreshToken, - expiresIn: auth.expiresIn, - userId, - source: AuthTokenSource.ORCID, - }, - update: { - accessToken: auth.accessToken, - refreshToken: auth.refreshToken, - expiresIn: auth.expiresIn, - userId, - source: AuthTokenSource.ORCID, - }, - }); - } else { - await client.authToken.create({ - data: { - accessToken: auth.accessToken, - refreshToken: auth.refreshToken, - expiresIn: auth.expiresIn, - userId, - source: AuthTokenSource.ORCID, - }, - }); - } + + await client.authToken.create({ + data: { + accessToken: auth.accessToken, + refreshToken: auth.refreshToken, + expiresIn: auth.expiresIn, + userId, + source: AuthTokenSource.ORCID, + }, + }); logger.trace({ fn: 'setOrcidForUser' }, 'added auth token'); } else { logger.trace({ fn: 'setOrcidForUser' }, 'no user found'); From eab7d270426d9b241f92ad9722172e3f1ad58306 Mon Sep 17 00:00:00 2001 From: kadami Date: Fri, 26 Apr 2024 14:00:06 +0700 Subject: [PATCH 110/141] use draft manifests when available for shared nodes --- desci-server/src/controllers/nodes/sharedNodes.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/desci-server/src/controllers/nodes/sharedNodes.ts b/desci-server/src/controllers/nodes/sharedNodes.ts index 8c1de0e81..459fb8be8 100644 --- a/desci-server/src/controllers/nodes/sharedNodes.ts +++ b/desci-server/src/controllers/nodes/sharedNodes.ts @@ -3,6 +3,7 @@ import { User } from '@prisma/client'; import { Request, Response } from 'express'; import { prisma } from '../../client.js'; +import { getLatestManifestFromNode } from '../../internal.js'; import { logger as parentLogger } from '../../logger.js'; import { PRIV_SHARE_CONTRIBUTION_PREFIX } from '../../services/Contributors.js'; import { getManifestFromNode } from '../../services/data/processing.js'; @@ -76,7 +77,7 @@ export const listSharedNodes = async (req: ListSharedNodesRequest, res: Response const filledSharedNodes = await Promise.all( privSharedNodes.map(async (priv) => { const { node } = priv; - const { manifest: latestManifest } = await getManifestFromNode(node); + const latestManifest = await getLatestManifestFromNode(node); const publishedEntry = publishedNodesMap[node.uuid]; return { From 473cfb0179788bc2fee26861eacf76dff17e96a9 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Mon, 29 Apr 2024 12:37:29 +0200 Subject: [PATCH 111/141] include DPID_URL_OVERRIDE in k8s config env --- desci-server/kubernetes/deployment_dev.yaml | 1 + desci-server/kubernetes/deployment_prod.yaml | 1 + desci-server/kubernetes/deployment_staging.yaml | 1 + 3 files changed, 3 insertions(+) diff --git a/desci-server/kubernetes/deployment_dev.yaml b/desci-server/kubernetes/deployment_dev.yaml index 4349fc742..2dcee8116 100644 --- a/desci-server/kubernetes/deployment_dev.yaml +++ b/desci-server/kubernetes/deployment_dev.yaml @@ -78,6 +78,7 @@ spec: export IPFS_READ_ONLY_GATEWAY_SERVER_URL={{ .Data.IPFS_READ_ONLY_GATEWAY_SERVER_URL }} export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} + export DPID_URL_OVERRIDE={{ .Data.DPID_URL_OVERRIDE }} export DEBUG_TEST=0; echo "appfinish"; {{- end -}} diff --git a/desci-server/kubernetes/deployment_prod.yaml b/desci-server/kubernetes/deployment_prod.yaml index 8cc357a22..860346a29 100755 --- a/desci-server/kubernetes/deployment_prod.yaml +++ b/desci-server/kubernetes/deployment_prod.yaml @@ -78,6 +78,7 @@ spec: export IPFS_READ_ONLY_GATEWAY_SERVER_URL={{ .Data.IPFS_READ_ONLY_GATEWAY_SERVER_URL }} export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} + export DPID_URL_OVERRIDE={{ .Data.DPID_URL_OVERRIDE }} export IGNORE_LINE=0; export DEBUG_TEST=0; echo "appfinish"; diff --git a/desci-server/kubernetes/deployment_staging.yaml b/desci-server/kubernetes/deployment_staging.yaml index 10b77a57b..7e90a3771 100644 --- a/desci-server/kubernetes/deployment_staging.yaml +++ b/desci-server/kubernetes/deployment_staging.yaml @@ -90,6 +90,7 @@ spec: export IPFS_READ_ONLY_GATEWAY_SERVER_URL={{ .Data.IPFS_READ_ONLY_GATEWAY_SERVER_URL }} export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} + export DPID_URL_OVERRIDE={{ .Data.DPID_URL_OVERRIDE }} export DEBUG_TEST=0; echo "appfinish"; {{- end -}} From b1462ea024bbc0dfc0fa7f82684966df9e6e19df Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Mon, 29 Apr 2024 12:45:10 +0200 Subject: [PATCH 112/141] log refresh token error response --- desci-server/src/services/orcid.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 32ec1d178..b69183e76 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -68,7 +68,10 @@ class OrcidApiService { }, }); } - logger.info({ status: response.status, statusText: response.statusText }, 'REFRESH TOKEN RESPONSE'); + logger.info( + { status: response.status, statusText: response.statusText, message: await response.json() }, + 'REFRESH TOKEN RESPONSE', + ); } catch (err) { logger.info({ err }, 'ORCID REFRESH TOKEN ERROR'); } From 2d2d6b021da077f6ac7e57946e7f1845dc9a8079 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 30 Apr 2024 12:37:20 +0200 Subject: [PATCH 113/141] send email to notifiy members of protected community attestation when claimed --- .../src/controllers/attestations/claims.ts | 31 +++++++++++++++++++ desci-server/src/controllers/nodes/consent.ts | 6 ++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 27005f29a..aea690524 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -1,4 +1,5 @@ import { CommunityEntryAttestation } from '@prisma/client'; +import sgMail from '@sendgrid/mail'; import { NextFunction, Request, Response } from 'express'; import _ from 'lodash'; @@ -16,6 +17,8 @@ import { import { RequestWithUser } from '../../middleware/authorisation.js'; import { removeClaimSchema } from '../../routes/v1/attestations/schema.js'; +sgMail.setApiKey(process.env.SENDGRID_API_KEY); + export const claimAttestation = async (req: RequestWithUser, res: Response, _next: NextFunction) => { const body = req.body as { attestationId: number; @@ -49,6 +52,34 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex }); logger.info({ attestations }, 'CLAIMED'); + // notifiy community members if attestation is protected + // new attestations should be trigger notification of org members if protected + const attestation = await attestationService.findAttestationById(body.attestationId); + if (attestation.protected) { + const members = await prisma.communityMember.findMany({ + where: { communityId: attestation.communityId }, + include: { user: { select: { email: true } } }, + }); + + const messages = members.map((member) => ({ + to: member.user.email, + from: 'no-reply@desci.com', + subject: `[nodes.desci.com] ${attestationVersion.name} claimed on DPID://${body.nodeDpid}/v${body.nodeVersion + 1}`, + text: `${req.user.name} just claimed ${attestationVersion.name} on ${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}`, + html: '', + })); + + await Promise.all( + messages.map((message) => { + if (process.env.NODE_ENV === 'production') { + sgMail.send(message); + } else { + logger.info({ nodeEnv: process.env.NODE_ENV }, message.subject); + } + }), + ); + } + return new SuccessResponse(attestations).send(res); }; diff --git a/desci-server/src/controllers/nodes/consent.ts b/desci-server/src/controllers/nodes/consent.ts index e34381a4e..835d80aca 100644 --- a/desci-server/src/controllers/nodes/consent.ts +++ b/desci-server/src/controllers/nodes/consent.ts @@ -60,16 +60,16 @@ export const checkUserPublishConsent = async (req: Request, res: Response, next: const { uuid } = req.params; let consents = await getUserPublishConsent(user.id); - logger.info({ consents, user: user.id }, 'USER_PUBLISH_CONSENT'); + logger.info({ consents: consents.length, user: user.id }, 'USER_PUBLISH_CONSENT'); consents = consents.filter((consent) => { const data = JSON.parse(consent.extra); const consentUuid = ensureUuidEndsWithDot(data?.uuid ?? ''); - logger.info({ consent, data, consentUuid, uuid }, 'USER_PUBLISH_CONSENT'); + logger.info({ consent: consents.length, data, consentUuid, uuid }, 'USER_PUBLISH_CONSENT'); if (consentUuid === ensureUuidEndsWithDot(uuid)) return true; return false; }); - logger.info({ consents }, 'FILTERED:USER_PUBLISH_CONSENT'); + logger.info({ consents: consents.length }, 'FILTERED:USER_PUBLISH_CONSENT'); const consent = consents[consents.length - 1]; const extra = consent?.extra ? JSON.parse(consent.extra) : {}; logger.info({ consent, extra }, 'USER_PUBLISH_CONSENT'); From 56c2b0271e58c52e96f33168ea0f210a87652566 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 30 Apr 2024 14:57:07 +0200 Subject: [PATCH 114/141] claiming an attestation on a newer version of the node should skip already claimed attestations on older versions if not revoked --- .../src/controllers/attestations/claims.ts | 9 +++- .../test/integration/Attestation.test.ts | 44 ++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index aea690524..25e523849 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -128,7 +128,14 @@ export const claimEntryRequirements = async (req: Request, res: Response, _next: attestationId: attestation.attestationId, attestationVersion: attestation.attestationVersionId, }); - return { ...attestation, claimable }; + + const previousClaim = await attestationService.getClaimOnAttestationVersion( + nodeDpid, + attestation.attestationId, + attestation.attestationVersionId, + ); + + return { ...attestation, claimable: claimable && (!previousClaim || previousClaim.revoked) }; })) as (CommunityEntryAttestation & { claimable: boolean })[]; logger.info({ claimables, communityId }); diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 6102f1eeb..733a19e53 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -245,13 +245,15 @@ describe('Attestations Service', async () => { await tearDown(); }); - describe('Claiming an Attestation', () => { + describe.only('Claiming an Attestation', () => { let claim: NodeAttestation; let node: Node; const nodeVersion = 0; let attestationVersion: AttestationVersion; let author: User; + let nodeVersion2: NodeVersion, UserJwtToken: string, UserAuthHeaderVal: string; + before(async () => { node = nodes[0]; author = users[0]; @@ -266,11 +268,24 @@ describe('Attestations Service', async () => { nodeVersion, claimerId: author.id, }); + + // publish new node version + nodeVersion2 = await prisma.nodeVersion.create({ + data: { nodeId: node.id, manifestUrl: node.manifestUrl, transactionId: randomUUID64() }, + }); + + UserJwtToken = jwt.sign({ email: users[0].email }, process.env.JWT_SECRET!, { + expiresIn: '1y', + }); + UserAuthHeaderVal = `Bearer ${UserJwtToken}`; }); after(async () => { await prisma.$queryRaw`TRUNCATE TABLE "NodeAttestation" CASCADE;`; await prisma.$queryRaw`TRUNCATE TABLE "CommunityEntryAttestation" CASCADE;`; + + // clean up (delete new node version entry) + await prisma.nodeVersion.delete({ where: { id: nodeVersion2.id } }); }); it('should claim an attestation to a node', () => { @@ -298,6 +313,33 @@ describe('Attestations Service', async () => { // console.log('CAN CLAIM', canClaim); expect(canClaim).to.be.false; }); + + it('should prevent double claim on new version if old claim is not revoked', async () => { + assert(node.uuid); + + // create request to claim node on new version using both claim and claimAll apis + let res = await request(app).post(`/v1/attestations/claim`).set('authorization', UserAuthHeaderVal).send({ + nodeDpid: '1', + nodeUuid: node.uuid, + nodeVersion: 1, + claimerId: author.id, + attestationId: reproducibilityAttestation.id, + }); + expect(res.status).to.equal(200); + + res = await request(app).post(`/v1/attestations/claimAll`).set('authorization', UserAuthHeaderVal).send({ + nodeDpid: '1', + nodeUuid: node.uuid, + nodeVersion: 1, + claimerId: author.id, + communityId: reproducibilityAttestation.communityId, + }); + expect(res.status).to.equal(200); + + // verify only one claim exists on the old version of the node + const attestations = await attestationService.getAllNodeAttestations('1'); + expect(attestations.length).to.equal(2); + }); }); describe('Claiming a Desci Community Selected Attestations', () => { From edb77daff49a178b905a48d07a12e12352a5dd1d Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 30 Apr 2024 15:04:44 +0200 Subject: [PATCH 115/141] test passes --- desci-server/test/integration/Attestation.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/test/integration/Attestation.test.ts b/desci-server/test/integration/Attestation.test.ts index 733a19e53..9a908ff74 100644 --- a/desci-server/test/integration/Attestation.test.ts +++ b/desci-server/test/integration/Attestation.test.ts @@ -245,7 +245,7 @@ describe('Attestations Service', async () => { await tearDown(); }); - describe.only('Claiming an Attestation', () => { + describe('Claiming an Attestation', () => { let claim: NodeAttestation; let node: Node; const nodeVersion = 0; From a70e520cdf348a5f569a1194ccefc7345c765eb4 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 7 May 2024 15:07:16 +0200 Subject: [PATCH 116/141] fix: auth token refresh request not correct, duplicate claim external identifiers --- .../src/controllers/attestations/claims.ts | 8 ++++---- desci-server/src/services/orcid.ts | 15 +++++++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 25e523849..33316bcec 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -44,13 +44,13 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex return new SuccessResponse(reclaimed).send(res); } - const attestations = await attestationService.claimAttestation({ + const nodeClaim = await attestationService.claimAttestation({ ...body, nodeDpid: body.nodeDpid, nodeUuid: uuid, attestationVersion: attestationVersion.id, }); - logger.info({ attestations }, 'CLAIMED'); + logger.info({ nodeClaim }, 'CLAIMED'); // notifiy community members if attestation is protected // new attestations should be trigger notification of org members if protected @@ -65,7 +65,7 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex to: member.user.email, from: 'no-reply@desci.com', subject: `[nodes.desci.com] ${attestationVersion.name} claimed on DPID://${body.nodeDpid}/v${body.nodeVersion + 1}`, - text: `${req.user.name} just claimed ${attestationVersion.name} on ${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}`, + text: `${req.user.name} just claimed ${attestationVersion.name} on ${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}?claim=${nodeClaim.id}`, html: '', })); @@ -80,7 +80,7 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex ); } - return new SuccessResponse(attestations).send(res); + return new SuccessResponse(nodeClaim).send(res); }; export const removeClaim = async (req: RequestWithUser, res: Response, _next: NextFunction) => { diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 32ec1d178..6b9126331 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -10,6 +10,7 @@ import { getManifestByCid } from './data/processing.js'; const PUTCODE_REGEX = /put-code=.*?(?\d+)/m; +const DPID_URL_OVERRIDE = process.env.DPID_URL_OVERRIDE || 'https://dev-beta.dpid.org'; const ORCID_DOMAIN = process.env.ORCID_API_DOMAIN || 'sandbox.orcid.org'; type Claim = Awaited>[number]; const logger = parentLogger.child({ module: 'ORCIDApiService' }); @@ -32,20 +33,22 @@ class OrcidApiService { }, orderBy: { updatedAt: 'desc' }, }); + logger.info(authToken, 'AUTH TOKEN RETRIEVED'); if (!authToken) { throw new Error('User does not have an orcid auth token'); } // todo: refresh token if necessary try { - const url = `https://${ORCID_DOMAIN}/oauth/token?client_id=${process.env.ORCID_CLIENT_ID!}&client_secret=${process - .env - .ORCID_CLIENT_SECRET!}&grant_type=refresh_token&refresh_token=${authToken.refreshToken}&revoke_old=true&redirect_uri=${process.env.DAPP_URL}/orcid/capture`; + const url = `https://${ORCID_DOMAIN}/oauth/token`; logger.info({ url }, 'REFRESH TOKEN'); const response = await fetch(url, { method: 'post', + body: `client_id=${process.env.ORCID_CLIENT_ID!}&client_secret=${process.env + .ORCID_CLIENT_SECRET!}&grant_type=refresh_token&refresh_token=${authToken.refreshToken}&revoke_old=true`, headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, }); + if (response.status === 200) { const data = (await response.json()) as { access_token: string; @@ -204,7 +207,7 @@ const generateExternalIds = ({ manifest: ResearchObjectV1; claims: Claim[]; }) => { - const dataRoot = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/root`; + const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/root`; const externalIdPath = ` uri @@ -215,7 +218,7 @@ const generateExternalIds = ({ ${manifest.components .filter((component) => component.starred === true) .map((component) => { - const url = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/${component.payload?.path ?? ''}`; + const url = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/${component.payload?.path ?? ''}`; return ` uri ${url} @@ -230,7 +233,7 @@ const generateExternalIds = ({ return ` uri - ${claim.name} by ${claim.community} + ${claim.name} by ${claim.community} on DPID://${manifest.dpid.id} ${url} self `; From 6f07593fe5cb8d405572bbe689238500a7235b84 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 7 May 2024 15:13:48 +0200 Subject: [PATCH 117/141] update orcid record when claim is unverified --- .../controllers/attestations/verification.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index e92adaed8..cbad5514b 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -45,10 +45,23 @@ export const removeVerification = async ( } if (!verification) { - return new SuccessMessageResponse().send(res); + new SuccessMessageResponse().send(res); } else { await attestationService.removeVerification(verification.id, user.id); - return new SuccessMessageResponse().send(res); + + new SuccessMessageResponse().send(res); + + const claim = await attestationService.findClaimById(verification.nodeAttestationId); + const attestation = await attestationService.findAttestationById(claim.attestationId); + + if (attestation.protected) { + /** + * Update ORCID Profile + */ + const node = await prisma.node.findFirst({ where: { uuid: ensureUuidEndsWithDot(claim.nodeUuid) } }); + const owner = await prisma.user.findFirst({ where: { id: node.ownerId } }); + if (owner.orcid) await orcidApiService.postWorkRecord(node.uuid, owner.orcid); + } } }; From c161ea96f12ca2063e833ef880ea419137192c27 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 7 May 2024 16:08:17 +0200 Subject: [PATCH 118/141] auth refresh token debug --- desci-server/src/services/orcid.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 689330b75..d8cc96bca 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -26,14 +26,15 @@ class OrcidApiService { } private async getAccessToken(userId: number) { - let authToken = await prisma.authToken.findFirst({ + const authTokens = await prisma.authToken.findMany({ where: { userId, source: AuthTokenSource.ORCID, }, orderBy: { updatedAt: 'desc' }, }); - logger.info(authToken, 'AUTH TOKEN RETRIEVED'); + let authToken = authTokens[0]; + logger.info({ authTokens, authToken }, 'AUTH TOKEN RETRIEVED'); if (!authToken) { throw new Error('User does not have an orcid auth token'); } @@ -70,11 +71,13 @@ class OrcidApiService { userId: authToken.userId, }, }); + logger.info({ status: response.status, statusText: response.statusText, data }, 'REFRESH TOKEN RESPONSE'); + } else { + logger.info( + { status: response.status, statusText: response.statusText, BODY: await response.json() }, + 'REFRESH TOKEN ERROR', + ); } - logger.info( - { status: response.status, statusText: response.statusText, message: await response.json() }, - 'REFRESH TOKEN RESPONSE', - ); } catch (err) { logger.info({ err }, 'ORCID REFRESH TOKEN ERROR'); } From 68e168d296630a7dfc533020ac0e7b8968796786 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Tue, 7 May 2024 16:08:17 +0200 Subject: [PATCH 119/141] auth refresh token debug --- desci-server/src/services/orcid.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 32ec1d178..3ff53e9ad 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -25,13 +25,15 @@ class OrcidApiService { } private async getAccessToken(userId: number) { - let authToken = await prisma.authToken.findFirst({ + const authTokens = await prisma.authToken.findMany({ where: { userId, source: AuthTokenSource.ORCID, }, orderBy: { updatedAt: 'desc' }, }); + let authToken = authTokens[0]; + logger.info({ authTokens, authToken }, 'AUTH TOKEN RETRIEVED'); if (!authToken) { throw new Error('User does not have an orcid auth token'); } @@ -67,8 +69,13 @@ class OrcidApiService { userId: authToken.userId, }, }); + logger.info({ status: response.status, statusText: response.statusText, data }, 'REFRESH TOKEN RESPONSE'); + } else { + logger.info( + { status: response.status, statusText: response.statusText, BODY: await response.json() }, + 'REFRESH TOKEN ERROR', + ); } - logger.info({ status: response.status, statusText: response.statusText }, 'REFRESH TOKEN RESPONSE'); } catch (err) { logger.info({ err }, 'ORCID REFRESH TOKEN ERROR'); } From c18514e639066dc1bcc9a22b4956830a3ef8bc1f Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 8 May 2024 16:48:55 +0200 Subject: [PATCH 120/141] more debug statements to protected --- .../src/controllers/attestations/claims.ts | 19 ++++++++----------- desci-server/src/services/orcid.ts | 7 +++++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 33316bcec..56b037388 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -50,11 +50,11 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex nodeUuid: uuid, attestationVersion: attestationVersion.id, }); - logger.info({ nodeClaim }, 'CLAIMED'); // notifiy community members if attestation is protected // new attestations should be trigger notification of org members if protected const attestation = await attestationService.findAttestationById(body.attestationId); + logger.info({ nodeClaim, attestation }, 'CLAIMED'); if (attestation.protected) { const members = await prisma.communityMember.findMany({ where: { communityId: attestation.communityId }, @@ -68,16 +68,13 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex text: `${req.user.name} just claimed ${attestationVersion.name} on ${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}?claim=${nodeClaim.id}`, html: '', })); - - await Promise.all( - messages.map((message) => { - if (process.env.NODE_ENV === 'production') { - sgMail.send(message); - } else { - logger.info({ nodeEnv: process.env.NODE_ENV }, message.subject); - } - }), - ); + logger.info({ members: messages, NODE_ENV: process.env.NODE_ENV }, '[EMAIL]:: ATTESTATION EMAIL'); + if (process.env.NODE_ENV === 'production') { + const response = await sgMail.send(messages); + logger.info(response, '[EMAIL]:: Response'); + } else { + messages.forEach((message) => logger.info({ nodeEnv: process.env.NODE_ENV }, message.subject)); + } } return new SuccessResponse(nodeClaim).send(res); diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index d8cc96bca..b4323a8e5 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -34,7 +34,10 @@ class OrcidApiService { orderBy: { updatedAt: 'desc' }, }); let authToken = authTokens[0]; - logger.info({ authTokens, authToken }, 'AUTH TOKEN RETRIEVED'); + logger.info( + { tokenDate: authToken.createdAt, updatedAt: authToken.updatedAt, tokenLength: authTokens.length }, + 'AUTH TOKEN RETRIEVED', + ); if (!authToken) { throw new Error('User does not have an orcid auth token'); } @@ -42,7 +45,7 @@ class OrcidApiService { // todo: refresh token if necessary try { const url = `https://${ORCID_DOMAIN}/oauth/token`; - logger.info({ url }, 'REFRESH TOKEN'); + const response = await fetch(url, { method: 'post', body: `client_id=${process.env.ORCID_CLIENT_ID!}&client_secret=${process.env From 69efedb8d831b56b2d34f77a70e0c88d9f1ff5eb Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 8 May 2024 16:58:07 +0200 Subject: [PATCH 121/141] remove possibly empty env var for k8s config --- desci-server/kubernetes/deployment_dev.yaml | 1 - desci-server/kubernetes/deployment_prod.yaml | 1 - desci-server/kubernetes/deployment_staging.yaml | 1 - 3 files changed, 3 deletions(-) diff --git a/desci-server/kubernetes/deployment_dev.yaml b/desci-server/kubernetes/deployment_dev.yaml index 2dcee8116..4349fc742 100644 --- a/desci-server/kubernetes/deployment_dev.yaml +++ b/desci-server/kubernetes/deployment_dev.yaml @@ -78,7 +78,6 @@ spec: export IPFS_READ_ONLY_GATEWAY_SERVER_URL={{ .Data.IPFS_READ_ONLY_GATEWAY_SERVER_URL }} export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} - export DPID_URL_OVERRIDE={{ .Data.DPID_URL_OVERRIDE }} export DEBUG_TEST=0; echo "appfinish"; {{- end -}} diff --git a/desci-server/kubernetes/deployment_prod.yaml b/desci-server/kubernetes/deployment_prod.yaml index 860346a29..8cc357a22 100755 --- a/desci-server/kubernetes/deployment_prod.yaml +++ b/desci-server/kubernetes/deployment_prod.yaml @@ -78,7 +78,6 @@ spec: export IPFS_READ_ONLY_GATEWAY_SERVER_URL={{ .Data.IPFS_READ_ONLY_GATEWAY_SERVER_URL }} export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} - export DPID_URL_OVERRIDE={{ .Data.DPID_URL_OVERRIDE }} export IGNORE_LINE=0; export DEBUG_TEST=0; echo "appfinish"; diff --git a/desci-server/kubernetes/deployment_staging.yaml b/desci-server/kubernetes/deployment_staging.yaml index 7e90a3771..10b77a57b 100644 --- a/desci-server/kubernetes/deployment_staging.yaml +++ b/desci-server/kubernetes/deployment_staging.yaml @@ -90,7 +90,6 @@ spec: export IPFS_READ_ONLY_GATEWAY_SERVER_URL={{ .Data.IPFS_READ_ONLY_GATEWAY_SERVER_URL }} export ETHEREUM_RPC_URL={{ .Data.ETHEREUM_RPC_URL }} export GOOGLE_CLIENT_ID={{ .Data.GOOGLE_CLIENT_ID }} - export DPID_URL_OVERRIDE={{ .Data.DPID_URL_OVERRIDE }} export DEBUG_TEST=0; echo "appfinish"; {{- end -}} From a15ad72d4edd588ffb369a4b71b461f5505d7ad5 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 8 May 2024 19:19:03 +0200 Subject: [PATCH 122/141] capture failure --- .../src/controllers/attestations/claims.ts | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 56b037388..03eba267f 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -68,12 +68,17 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex text: `${req.user.name} just claimed ${attestationVersion.name} on ${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}?claim=${nodeClaim.id}`, html: '', })); - logger.info({ members: messages, NODE_ENV: process.env.NODE_ENV }, '[EMAIL]:: ATTESTATION EMAIL'); - if (process.env.NODE_ENV === 'production') { - const response = await sgMail.send(messages); - logger.info(response, '[EMAIL]:: Response'); - } else { - messages.forEach((message) => logger.info({ nodeEnv: process.env.NODE_ENV }, message.subject)); + + try { + logger.info({ members: messages, NODE_ENV: process.env.NODE_ENV }, '[EMAIL]:: ATTESTATION EMAIL'); + if (process.env.NODE_ENV === 'production') { + const response = await sgMail.send(messages); + logger.info(response, '[EMAIL]:: Response'); + } else { + messages.forEach((message) => logger.info({ nodeEnv: process.env.NODE_ENV }, message.subject)); + } + } catch (err) { + logger.info({ err }, '[EMAIL]::ERROR'); } } From 456ffdf4e95f7b7bacff1f98d7620fd13748eb1d Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 9 May 2024 00:28:05 +0200 Subject: [PATCH 123/141] feat: add html email to attestation claim mail --- .../src/controllers/attestations/claims.ts | 9 +- .../templates/emails/AttestationClaimed.tsx | 88 +++++++++++++++++++ .../templates/emails/utils/emailRenderer.tsx | 4 + 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 desci-server/src/templates/emails/AttestationClaimed.tsx diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 56b037388..0dc962b75 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -16,6 +16,7 @@ import { } from '../../internal.js'; import { RequestWithUser } from '../../middleware/authorisation.js'; import { removeClaimSchema } from '../../routes/v1/attestations/schema.js'; +import { AttestationClaimedEmailHtml } from '../../templates/emails/utils/emailRenderer.js'; sgMail.setApiKey(process.env.SENDGRID_API_KEY); @@ -66,7 +67,13 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex from: 'no-reply@desci.com', subject: `[nodes.desci.com] ${attestationVersion.name} claimed on DPID://${body.nodeDpid}/v${body.nodeVersion + 1}`, text: `${req.user.name} just claimed ${attestationVersion.name} on ${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}?claim=${nodeClaim.id}`, - html: '', + html: AttestationClaimedEmailHtml({ + dpid: body.nodeDpid, + attestationName: attestationVersion.name, + communityName: attestationVersion.name, + userName: req.user.name, + dpidPath: `${process.env.DAPP_URL}/dpid/${body.nodeDpid}/v${body.nodeVersion + 1}?claim=${nodeClaim.id}`, + }), })); logger.info({ members: messages, NODE_ENV: process.env.NODE_ENV }, '[EMAIL]:: ATTESTATION EMAIL'); if (process.env.NODE_ENV === 'production') { diff --git a/desci-server/src/templates/emails/AttestationClaimed.tsx b/desci-server/src/templates/emails/AttestationClaimed.tsx new file mode 100644 index 000000000..760c02e51 --- /dev/null +++ b/desci-server/src/templates/emails/AttestationClaimed.tsx @@ -0,0 +1,88 @@ +import { + Body, + Container, + Column, + Head, + Heading, + Html, + Preview, + Row, + Text, + Button, + Section, + render, +} from '@react-email/components'; +import * as React from 'react'; + +import MainLayout from './MainLayout.js'; + +export interface AttestationClaimedEmailProps { + dpid: string; + dpidPath: string; + userName: string; + attestationName: string; + communityName: string; +} + +export const AttestationClaimedEmail = ({ + dpid, + dpidPath, + userName, + attestationName, + communityName, +}: AttestationClaimedEmailProps) => ( + + + + + {communityName}: {attestationName} attestation claimed on DPID://{dpid} + + + + + {userName} claimed {attestationName} on their node. + +
+ +
+
+ + +
+); + +export default AttestationClaimedEmail; + +const main = { + backgroundColor: '#ffffff', + margin: '0 auto', + fontFamily: + "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif", +}; + +const container = { + margin: '0 auto', + padding: '0px 20px', +}; + +const h1 = { + // color: '#000000', + fontSize: '30px', + fontWeight: '700', + margin: '30px 0', + padding: '0', + lineHeight: '42px', +}; diff --git a/desci-server/src/templates/emails/utils/emailRenderer.tsx b/desci-server/src/templates/emails/utils/emailRenderer.tsx index e76327a6c..88859ec74 100644 --- a/desci-server/src/templates/emails/utils/emailRenderer.tsx +++ b/desci-server/src/templates/emails/utils/emailRenderer.tsx @@ -1,5 +1,6 @@ import { render } from '@react-email/components'; +import { AttestationClaimedEmailProps } from '../AttestationClaimed.js'; import ContributorInvite, { ContributorInviteEmailProps } from '../ContributorInvite.js'; import MagicCodeEmail, { MagicCodeEmailProps } from '../MagicCode.js'; @@ -13,3 +14,6 @@ export const ContributorInviteEmailHtml = ({ render(ContributorInvite({ inviter, nodeUuid, privShareCode, contributorId, newUser })); export const MagicCodeEmailHtml = ({ magicCode, ip }: MagicCodeEmailProps) => render(MagicCodeEmail({ magicCode })); + +export const AttestationClaimedEmailHtml = (props: AttestationClaimedEmailProps) => + render(AttestationClaimedEmailHtml(props)); From e706d795f86e42807be395a2608361d6c3bcdaa2 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 9 May 2024 00:56:16 +0200 Subject: [PATCH 124/141] quick fix --- desci-server/src/templates/emails/utils/emailRenderer.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desci-server/src/templates/emails/utils/emailRenderer.tsx b/desci-server/src/templates/emails/utils/emailRenderer.tsx index 88859ec74..fa79e326d 100644 --- a/desci-server/src/templates/emails/utils/emailRenderer.tsx +++ b/desci-server/src/templates/emails/utils/emailRenderer.tsx @@ -1,6 +1,6 @@ import { render } from '@react-email/components'; -import { AttestationClaimedEmailProps } from '../AttestationClaimed.js'; +import AttestationClaimedEmail, { AttestationClaimedEmailProps } from '../AttestationClaimed.js'; import ContributorInvite, { ContributorInviteEmailProps } from '../ContributorInvite.js'; import MagicCodeEmail, { MagicCodeEmailProps } from '../MagicCode.js'; @@ -16,4 +16,4 @@ export const ContributorInviteEmailHtml = ({ export const MagicCodeEmailHtml = ({ magicCode, ip }: MagicCodeEmailProps) => render(MagicCodeEmail({ magicCode })); export const AttestationClaimedEmailHtml = (props: AttestationClaimedEmailProps) => - render(AttestationClaimedEmailHtml(props)); + render(AttestationClaimedEmail(props)); From 3f9121d64a495d75ee6135c48bc63367ba59f4c6 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 9 May 2024 14:46:24 +0200 Subject: [PATCH 125/141] implement claim verification check api --- .../controllers/attestations/verification.ts | 18 ++++++++++++++++++ .../src/routes/v1/attestations/index.ts | 3 +++ .../src/routes/v1/attestations/schema.ts | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index cbad5514b..8da6f1349 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -3,12 +3,15 @@ import { NextFunction, Request, Response } from 'express'; import _ from 'lodash'; import { + AuthFailureResponse, BadRequestError, ForbiddenError, NotFoundError, + RequestWithUser, SuccessMessageResponse, SuccessResponse, attestationService, + communityService, ensureUuidEndsWithDot, prisma, } from '../../internal.js'; @@ -126,3 +129,18 @@ export const getAttestationVerifications = async (req: Request, res: Response, n return new SuccessResponse(data).send(res); }; + +export const canVerifyClaim = async (req: RequestWithUser, res: Response) => { + const logger = parentLogger.child({ + module: 'ATTESTATIONS::canVerify', + }); + const userId = req.user.id; + const claimId = parseInt(req.params.claimId); + + const claim = await attestationService.findClaimById(claimId); + const isMember = await communityService.findMemberByUserId(claim.desciCommunityId, userId); + + logger.info({ userId: req.user.id, claimId, community: claim.desciCommunityId }, 'Claim Verification check'); + if (!isMember) new SuccessResponse({ ok: false }).send(res); + else new SuccessResponse({ ok: true }).send(res); +}; diff --git a/desci-server/src/routes/v1/attestations/index.ts b/desci-server/src/routes/v1/attestations/index.ts index 359e36936..cfefa0b0d 100644 --- a/desci-server/src/routes/v1/attestations/index.ts +++ b/desci-server/src/routes/v1/attestations/index.ts @@ -19,6 +19,7 @@ import { getAttestationVerifications, validate, getValidatedRecommendations, + canVerifyClaim, } from '../../../internal.js'; import { ensureUser } from '../../../middleware/permissions.js'; @@ -37,6 +38,7 @@ import { showCommunityClaimsSchema, showNodeAttestationsSchema, claimEntryAttestationsSchema, + canVerificationSchema, } from './schema.js'; const router = Router(); @@ -65,6 +67,7 @@ router.post('/claimAll', [ensureUser, validate(claimEntryAttestationsSchema)], a router.post('/comment', [ensureUser, validate(createCommentSchema)], asyncHander(addComment)); router.post('/reaction', [ensureUser, validate(addReactionSchema)], asyncHander(addReaction)); router.post('/verification', [ensureUser, validate(addVerificationSchema)], asyncHander(addVerification)); +router.post('/verification/check/:claimId', [ensureUser, validate(canVerificationSchema)], asyncHander(canVerifyClaim)); router.delete('/comments/:commentId', [ensureUser, validate(deleteCommentSchema)], asyncHander(removeComment)); router.delete('/reactions/:reactionId', [ensureUser, validate(deleteReactionSchema)], asyncHander(removeReaction)); diff --git a/desci-server/src/routes/v1/attestations/schema.ts b/desci-server/src/routes/v1/attestations/schema.ts index a720edf25..c7584f143 100644 --- a/desci-server/src/routes/v1/attestations/schema.ts +++ b/desci-server/src/routes/v1/attestations/schema.ts @@ -128,6 +128,12 @@ export const addVerificationSchema = z.object({ }), }); +export const canVerificationSchema = z.object({ + params: z.object({ + claimId: z.coerce.number(), + }), +}); + export const deleteCommentSchema = z.object({ params: z.object({ commentId: z.coerce.number() }), }); From c18eeee75a83f9beb8ff3d889f01e51b592cb39e Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Thu, 9 May 2024 19:53:52 +0200 Subject: [PATCH 126/141] remove orcid profile update on publish --- desci-server/src/controllers/nodes/publish.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/desci-server/src/controllers/nodes/publish.ts b/desci-server/src/controllers/nodes/publish.ts index 48876e54f..e5f4e2fb3 100644 --- a/desci-server/src/controllers/nodes/publish.ts +++ b/desci-server/src/controllers/nodes/publish.ts @@ -330,11 +330,6 @@ export const publishHandler = async ({ */ sendDiscordNotification(false); - /** - * Update ORCID Profile - */ - if (owner.orcid) orcidApiService.postWorkRecord(node.uuid, owner.orcid); - /** * Save the cover art for this Node for later sharing: PDF -> JPG for this version */ From 507f80e4bb388638d939378b6dcc61becdfbef61 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Fri, 10 May 2024 05:00:09 +0200 Subject: [PATCH 127/141] orcid attestation writing structure and put code tracking db table schema update --- .../migration.sql | 17 + .../migration.sql | 17 + desci-server/prisma/schema.prisma | 28 +- .../controllers/attestations/verification.ts | 3 +- desci-server/src/services/Attestation.ts | 1 + desci-server/src/services/orcid.ts | 422 +++++++++++++++--- desci-server/src/theGraph.ts | 14 + 7 files changed, 420 insertions(+), 82 deletions(-) create mode 100644 desci-server/prisma/migrations/20240510003939_orcid_put_record_update/migration.sql create mode 100644 desci-server/prisma/migrations/20240510020627_orcid_putcode_table/migration.sql diff --git a/desci-server/prisma/migrations/20240510003939_orcid_put_record_update/migration.sql b/desci-server/prisma/migrations/20240510003939_orcid_put_record_update/migration.sql new file mode 100644 index 000000000..8fabb426a --- /dev/null +++ b/desci-server/prisma/migrations/20240510003939_orcid_put_record_update/migration.sql @@ -0,0 +1,17 @@ +/* + Warnings: + + - A unique constraint covering the columns `[orcid,uuid,claimId]` on the table `OrcidPutCodes` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "OrcidPutCodes_orcid_record_uuid_key"; + +-- AlterTable +ALTER TABLE "OrcidPutCodes" ADD COLUMN "claimId" INTEGER; + +-- CreateIndex +CREATE UNIQUE INDEX "OrcidPutCodes_orcid_uuid_claimId_key" ON "OrcidPutCodes"("orcid", "uuid", "claimId"); + +-- AddForeignKey +ALTER TABLE "OrcidPutCodes" ADD CONSTRAINT "OrcidPutCodes_claimId_fkey" FOREIGN KEY ("claimId") REFERENCES "NodeAttestation"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/desci-server/prisma/migrations/20240510020627_orcid_putcode_table/migration.sql b/desci-server/prisma/migrations/20240510020627_orcid_putcode_table/migration.sql new file mode 100644 index 000000000..7a647e88b --- /dev/null +++ b/desci-server/prisma/migrations/20240510020627_orcid_putcode_table/migration.sql @@ -0,0 +1,17 @@ +/* + Warnings: + + - A unique constraint covering the columns `[orcid,uuid,reference]` on the table `OrcidPutCodes` will be added. If there are existing duplicate values, this will fail. + +*/ +-- CreateEnum +CREATE TYPE "PutcodeReference" AS ENUM ('DATASET', 'SOFTWARE', 'PREPRINT'); + +-- DropIndex +DROP INDEX "OrcidPutCodes_orcid_uuid_claimId_key"; + +-- AlterTable +ALTER TABLE "OrcidPutCodes" ADD COLUMN "reference" "PutcodeReference" NOT NULL DEFAULT 'PREPRINT'; + +-- CreateIndex +CREATE UNIQUE INDEX "OrcidPutCodes_orcid_uuid_reference_key" ON "OrcidPutCodes"("orcid", "uuid", "reference"); diff --git a/desci-server/prisma/schema.prisma b/desci-server/prisma/schema.prisma index 19c75dc72..790372d9d 100755 --- a/desci-server/prisma/schema.prisma +++ b/desci-server/prisma/schema.prisma @@ -733,6 +733,7 @@ model NodeAttestation { Annotation Annotation[] NodeAttestationVerification NodeAttestationVerification[] NodeAttestationReaction NodeAttestationReaction[] + OrcidPutCodes OrcidPutCodes[] @@unique([nodeUuid, nodeVersion, attestationId, attestationVersionId]) } @@ -790,16 +791,19 @@ model PublishTaskQueue { } model OrcidPutCodes { - id Int @id @default(autoincrement()) - orcid String - putcode String? - record ORCIDRecord - userId Int - uuid String - user User @relation(fields: [userId], references: [id]) - Node Node @relation(fields: [uuid], references: [uuid]) + id Int @id @default(autoincrement()) + orcid String + putcode String? + reference PutcodeReference @default(PREPRINT) + claimId Int? + record ORCIDRecord + userId Int + uuid String + claim NodeAttestation? @relation(fields: [claimId], references: [id]) + user User @relation(fields: [userId], references: [id]) + Node Node @relation(fields: [uuid], references: [uuid]) - @@unique([orcid, record, uuid]) + @@unique([orcid, uuid, reference]) } enum ORCIDRecord { @@ -809,6 +813,12 @@ enum ORCIDRecord { EMPLOYMENT } +enum PutcodeReference { + DATASET + SOFTWARE + PREPRINT +} + enum CommunityMembershipRole { ADMIN MEMBER diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index 8da6f1349..d52b5d01c 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -63,7 +63,8 @@ export const removeVerification = async ( */ const node = await prisma.node.findFirst({ where: { uuid: ensureUuidEndsWithDot(claim.nodeUuid) } }); const owner = await prisma.user.findFirst({ where: { id: node.ownerId } }); - if (owner.orcid) await orcidApiService.postWorkRecord(node.uuid, owner.orcid); + if (owner.orcid) + await orcidApiService.removeClaimRecord({ claimId: claim.id, nodeUuid: node.uuid, orcid: owner.orcid }); } } }; diff --git a/desci-server/src/services/Attestation.ts b/desci-server/src/services/Attestation.ts index 019dedaa7..63c53a82c 100644 --- a/desci-server/src/services/Attestation.ts +++ b/desci-server/src/services/Attestation.ts @@ -255,6 +255,7 @@ export class AttestationService { image_url: claim.attestationVersion.image_url, verifications: claim._count.NodeAttestationVerification, community: claim.community.name, + nodeVersion: claim.nodeVersion, })) .value(); diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index b4323a8e5..b5c65db90 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -1,14 +1,14 @@ import { ResearchObjectV1, ResearchObjectV1Author } from '@desci-labs/desci-models'; -import { AuthTokenSource, ORCIDRecord } from '@prisma/client'; +import { AuthTokenSource, ORCIDRecord, OrcidPutCodes, PutcodeReference } from '@prisma/client'; import { logger as parentLogger, prisma } from '../internal.js'; -import { getIndexedResearchObjects } from '../theGraph.js'; +import { IndexedResearchObject, getIndexedResearchObjects } from '../theGraph.js'; import { hexToCid } from '../utils.js'; import { attestationService } from './Attestation.js'; import { getManifestByCid } from './data/processing.js'; -const PUTCODE_REGEX = /put-code=.*?(?\d+)/m; +// const PUTCODE_REGEX = /put-code=.*?(?\d+)/m; const DPID_URL_OVERRIDE = process.env.DPID_URL_OVERRIDE || 'https://dev-beta.dpid.org'; const ORCID_DOMAIN = process.env.ORCID_API_DOMAIN || 'sandbox.orcid.org'; @@ -88,29 +88,173 @@ class OrcidApiService { return authToken.accessToken; } + async removeClaimRecord({ claimId, nodeUuid, orcid }: { claimId: number; nodeUuid: string; orcid: string }) { + const putCode = await prisma.orcidPutCodes.findFirst({ + where: { + claimId, + uuid: nodeUuid, + orcid, + }, + }); + + if (!putCode) return; + + const user = await prisma.user.findUnique({ where: { orcid } }); + const authToken = await this.getAccessToken(user.id); + logger.info({ userId: user.id, authToken: !!authToken, nodeUuid }, '[ORCID::DELETE]:: START'); + + await this.removeWorkRecord({ orcid, putCode, authToken }); + + const { researchObjects } = await getIndexedResearchObjects([nodeUuid]); + const researchObject = researchObjects[0] as IndexedResearchObject; + const manifestCid = hexToCid(researchObject.recentCid); + const latestManifest = await getManifestByCid(manifestCid); + let claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); + claims = claims.filter((claim) => claim.verifications > 0); + logger.info({ claims: claims.length }, '[ORCID::DELETE]:: CHECK CLAIMS'); + + if (claims.length === 0) { + const nodePutCode = await prisma.orcidPutCodes.findUnique({ + where: { + orcid_uuid_reference: { + orcid, + uuid: nodeUuid, + reference: PutcodeReference.PREPRINT, + }, + }, + }); + + if (!nodePutCode) return; + logger.info({ nodePutCode }, '[ORCID::DELETE]:: REMOVE NODE RECORD'); + await this.removeWorkRecord({ orcid, putCode: nodePutCode, authToken }); + } + + logger.info({ userId: user.id, CLAIMS: claims.length, nodeUuid }, '[ORCID::DELETE]:: FINISH'); + } + + async removeWorkRecord({ putCode, authToken, orcid }: { orcid: string; putCode: OrcidPutCodes; authToken: string }) { + const code = putCode.putcode; + const url = `${this.baseUrl}/${orcid}/work${code ? '/' + code : ''}`; + logger.info( + { + code, + orcid, + }, + 'ORCID API DELETE RECORD', + ); + const response = await fetch(url, { + method: 'DELETE', + headers: { + Authorization: `Bearer ${authToken}`, + 'Content-Type': 'application/xml', + Accept: '*/*', + 'Access-Control-Expose-Headers': 'Content-Disposition', + }, + }); + + await prisma.orcidPutCodes.delete({ + where: { + id: putCode.id, + }, + }); + + logger.info( + { + status: response.status, + statusText: response.statusText, + orcid, + putCode: { + code: putCode.putcode, + reference: putCode.reference, + }, + }, + 'ORCID RECORD DELETED', + ); + } + async postWorkRecord(nodeUuid: string, orcid: string) { try { const user = await prisma.user.findUnique({ where: { orcid } }); const authToken = await this.getAccessToken(user.id); - const orcidPutCode = await prisma.orcidPutCodes.findFirst({ - where: { uuid: nodeUuid, orcid, userId: user.id, record: ORCIDRecord.WORK }, - }); const { researchObjects } = await getIndexedResearchObjects([nodeUuid]); - const researchObject = researchObjects[0]; + const researchObject = researchObjects[0] as IndexedResearchObject; const manifestCid = hexToCid(researchObject.recentCid); const latestManifest = await getManifestByCid(manifestCid); + researchObject.versions.reverse(); const nodeVersion = researchObject.versions.length; + let claims = await attestationService.getProtectedNodeClaims(latestManifest.dpid.id); claims = claims.filter((claim) => claim.verifications > 0); + // TODO: if claims is empty remove orcid record + if (claims.length === 0) return; + + const latestVersion = researchObject.versions[researchObject.versions.length - 1]; + const publicationDate = new Date(parseInt(latestVersion.time) * 1000).toLocaleDateString().replaceAll('/', '-'); + const nodeRecordPromise = this.putNodeWorkRecord({ + orcid, + authToken, + uuid: nodeUuid, + userId: user.id, + nodeVersion, + publicationDate, + manifest: latestManifest, + }); + const claimRecordPromises = claims.map((claim) => { + const claimedVersionNumber = claims[claims.length - 1].nodeVersion; + const claimedVersion = researchObject.versions[claimedVersionNumber]; + const publicationDate = new Date(parseInt(claimedVersion.time) * 1000) + .toLocaleDateString() + .replaceAll('/', '-'); + return this.putClaimWorkRecord({ + claim, + publicationDate, + orcid, + authToken, + uuid: nodeUuid, + userId: user.id, + nodeVersion: claimedVersionNumber, + manifest: latestManifest, + }); + }); + + await Promise.all([nodeRecordPromise, ...claimRecordPromises]); + } catch (err) { + logger.info({ err }, 'Error Response'); + } + } + + async putNodeWorkRecord({ + manifest, + publicationDate, + uuid, + userId, + authToken, + orcid, + nodeVersion, + }: { + manifest: ResearchObjectV1; + publicationDate: string; + uuid: string; + userId: number; + authToken: string; + orcid: string; + nodeVersion: number; + }) { + try { + const orcidPutCode = await prisma.orcidPutCodes.findUnique({ + where: { orcid_uuid_reference: { orcid, uuid, reference: PutcodeReference.PREPRINT } }, + }); const putCode = orcidPutCode?.putcode; - let data = generateWorkRecord({ manifest: latestManifest, nodeVersion, claims, putCode }); + + let data = generateRootWorkRecord({ manifest, publicationDate, nodeVersion, putCode }); data = data.replace(/\\"/g, '"'); const url = `${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`; const method = putCode ? 'PUT' : 'POST'; - logger.info({ latestManifest, manifestCid, data, orcidPutCode, putCode, url, method }, 'WORK DATA'); + logger.info({ data, putCode, url, method }, '[ORCID_API_SERVICE]:: WORK DATA'); + const response = await fetch(url, { method, headers: { @@ -127,8 +271,7 @@ class OrcidApiService { status: response.status, statusText: response.statusText, putCode, - nodeUuid, - claims: claims.length, + uuid, orcid, }, 'ORCID API RESPONSE', @@ -137,40 +280,143 @@ class OrcidApiService { if ([200, 201].includes(response.status)) { const location = response.headers.get('Location')?.split('/'); const returnedCode = location?.[location.length - 1]; - response.headers.forEach((header, key) => logger.info({ key, header }, 'Response header')); + // response.headers.forEach((header, key) => logger.info({ key, header }, 'Response header')); logger.info({ location }, 'RESPONSE HEADER Location'); if (returnedCode) { await prisma.orcidPutCodes.upsert({ where: { - orcid_record_uuid: { - orcid, - record: ORCIDRecord.WORK, - uuid: nodeUuid, - }, + orcid_uuid_reference: { orcid, uuid, reference: PutcodeReference.PREPRINT }, }, update: { + putcode: returnedCode, + }, + create: { orcid, - uuid: nodeUuid, + uuid, + userId, putcode: returnedCode, record: ORCIDRecord.WORK, + reference: PutcodeReference.PREPRINT, + }, + }); + } + logger.info( + { uuid, userId, status: response.status, returnedCode, reference: PutcodeReference.PREPRINT }, + '[ORCID_API_SERVICE]:: Node Record UPDATED', + ); + } else { + logger.info( + { status: response.status, response, body: await response.text() }, + '[ORCID_API_SERVICE]::ORCID NODE API ERROR', + ); + } + } catch (err) { + logger.info({ err }, '[ORCID_API_SERVICE]::NODE API Error Response'); + } + } + + async putClaimWorkRecord({ + manifest, + publicationDate, + uuid, + userId, + authToken, + orcid, + claim, + nodeVersion, + }: { + claim: Claim; + manifest: ResearchObjectV1; + nodeVersion: number; + publicationDate: string; + uuid: string; + userId: number; + authToken: string; + orcid: string; + }) { + try { + const putCodeReference = claim.name.toLowerCase().includes('code') + ? PutcodeReference.SOFTWARE + : claim.name.toLowerCase().includes('data') + ? PutcodeReference.DATASET + : PutcodeReference.PREPRINT; + + const orcidPutCode = await prisma.orcidPutCodes.findUnique({ + where: { orcid_uuid_reference: { orcid, uuid, reference: putCodeReference } }, + }); + const putCode = orcidPutCode?.putcode; + + let data = generateClaimWorkRecord({ nodeVersion, manifest, publicationDate, claim, putCode }); + data = data.replace(/\\"/g, '"'); + + const url = `${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`; + const method = putCode ? 'PUT' : 'POST'; + logger.info( + { putCodeReference, claim: claim.name, putCode, url, method, data }, + '[ORCID_API_SERVICE]::CLAIM DATA', + ); + + const response = await fetch(url, { + method, + headers: { + Authorization: `Bearer ${authToken}`, + 'Content-Type': 'application/xml', + Accept: '*/*', + 'Access-Control-Expose-Headers': 'Content-Disposition', + }, + body: data, + }); + + logger.info( + { + status: response.status, + statusText: response.statusText, + putCode, + uuid, + orcid, + }, + 'ORCID CLAIM API RESPONSE', + ); + + if ([200, 201].includes(response.status)) { + const location = response.headers.get('Location')?.split('/'); + const returnedCode = location?.[location.length - 1]; + // response.headers.forEach((header, key) => logger.info({ key, header }, 'Response header')); + logger.info({ location }, 'RESPONSE HEADER Location'); + + if (returnedCode) { + await prisma.orcidPutCodes.upsert({ + where: { + orcid_uuid_reference: { orcid, uuid, reference: putCodeReference }, + }, + update: { + putcode: returnedCode, }, create: { orcid, - uuid: nodeUuid, - userId: user.id, + uuid, + userId, + claimId: claim.id, putcode: returnedCode, record: ORCIDRecord.WORK, + reference: putCodeReference, }, }); } - logger.info({ nodeUuid, userId: user.id, status: response.status, returnedCode }, 'ORCID PROFILE UPDATED'); + logger.info( + { uuid, claimId: claim.id, userId, status: response.status, returnedCode, reference: putCodeReference }, + 'ORCID CLAIM RECORD UPDATED', + ); } else { - logger.info({ status: response.status, response, body: await response.text() }, 'ORCID API ERROR'); + logger.info( + { status: response.status, response, body: await response.text() }, + '[ORCID_API_SERVICE]::ORCID CLAIM API ERROR', + ); } } catch (err) { - logger.info({ err }, 'Error Response'); + logger.info({ err }, '[ORCID_API_SERVICE]::CLAIM API Error Response'); } } } @@ -178,78 +424,110 @@ class OrcidApiService { const orcidApiService = new OrcidApiService(); export default orcidApiService; -const generateWorkRecord = ({ +const generateClaimWorkRecord = ({ manifest, - nodeVersion, putCode, - claims, + claim, + nodeVersion, + publicationDate, }: { manifest: ResearchObjectV1; - nodeVersion: number; - claims: Claim[]; + claim: Claim; putCode?: string; + nodeVersion: number; + publicationDate: string; }) => { const codeAttr = putCode ? 'put-code="' + putCode + '"' : ''; - logger.info({ codeAttr }, 'CODE ATTR'); + const workType = claim.name.toLowerCase().includes('code') + ? 'software' + : claim.name.toLowerCase().includes('data') + ? 'data-set' + : 'preprint'; + + const description = `${claim.name} Attestation`; + const [month, day, year] = publicationDate.split('-'); + const externalUrl = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/attestation/${claim.id}`; + const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}/root`; + logger.info({ codeAttr, workType, publicationDate, day, month, year, externalUrl }, 'CODE ATTR'); return ( ' ' + '' + - `${manifest.title} + ` ${manifest.title} + ${description} - ${manifest?.description?.trim() ? `${manifest.description}` : ''} - data-set - ${generateExternalIds({ manifest, claims, version: nodeVersion })} + ${description} + ${workType} + + ${year} + ${zeropad(month)} + ${zeropad(day)} + + + + uri + ${claim.name} URL + ${dataRoot} + self + + + uri + ${claim.name} by ${claim.community} + ${externalUrl} + part-of + + ${generateContributors(manifest.authors ?? [])} ` ); }; +const zeropad = (data: string) => (data.length < 2 ? `0${data}` : data); -const generateExternalIds = ({ +const generateRootWorkRecord = ({ manifest, - version, - claims, + nodeVersion, + putCode, + publicationDate, }: { - version: number; manifest: ResearchObjectV1; - claims: Claim[]; + nodeVersion: number; + putCode?: string; + publicationDate: string; }) => { - const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/root`; - const externalIdPath = ` - - uri - ${dataRoot} - ${dataRoot} - self - - ${manifest.components - .filter((component) => component.starred === true) - .map((component) => { - const url = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${version}/${component.payload?.path ?? ''}`; - return ` - uri - ${url} - ${url} - self - `; - }) - .join(' ')} - ${claims - .map((claim) => { - const url = `${process.env.DAPP_URL}/dpid/${manifest.dpid.id}?claim=${claim.id}`; - - return ` - uri - ${claim.name} by ${claim.community} on DPID://${manifest.dpid.id} - ${url} - self - `; - }) - .join(' ')}`; - - return externalIdPath; + const codeAttr = putCode ? 'put-code="' + putCode + '"' : ''; + const workType = 'preprint'; + const [month, day, year] = publicationDate.split('-'); + const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}/root`; + logger.info({ codeAttr, publicationDate, dataRoot }, 'CODE ATTR'); + return ( + ' ' + + '' + + ` ${manifest.title} + ${manifest.description.trim() ? `${manifest.description.trim()}` : ``} + + ${manifest?.description?.trim() ? `${manifest.description}` : ``} + ${workType} + + ${year} + ${zeropad(month)} + ${zeropad(day)} + + + + uri + ${dataRoot} + ${dataRoot} + self + + + ${generateContributors(manifest.authors ?? [])} + + ` + ); }; const generateContributors = (authors: ResearchObjectV1Author[]) => { diff --git a/desci-server/src/theGraph.ts b/desci-server/src/theGraph.ts index 4772ddc53..36aa904e3 100644 --- a/desci-server/src/theGraph.ts +++ b/desci-server/src/theGraph.ts @@ -7,6 +7,20 @@ import axios from 'axios'; import { logger } from './logger.js'; import { decodeBase64UrlSafeToHex } from './utils.js'; +export interface IndexedResearchObject { + id: string; + id10: string; + owner: string; + recentCid: string; + versions: IndexedResearchObjectVersion[]; +} + +export interface IndexedResearchObjectVersion { + cid: string; + id: string; + time: string; +} + export const getIndexedResearchObjects = async (urlSafe64s: string[]) => { const hex = urlSafe64s.map(decodeBase64UrlSafeToHex).map((h) => `0x${h}`); logger.info({ hex, urlSafe64s }, 'getIndexedResearchObjects'); From 80f775aa02950b5054d59525033bb235797dfee8 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Fri, 10 May 2024 05:04:31 +0200 Subject: [PATCH 128/141] remove /root suffix from external-id urls --- desci-server/src/services/orcid.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index b5c65db90..286c6e3ff 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -447,7 +447,7 @@ const generateClaimWorkRecord = ({ const description = `${claim.name} Attestation`; const [month, day, year] = publicationDate.split('-'); const externalUrl = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/attestation/${claim.id}`; - const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}/root`; + const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}`; logger.info({ codeAttr, workType, publicationDate, day, month, year, externalUrl }, 'CODE ATTR'); return ( ' Date: Fri, 10 May 2024 09:43:57 +0000 Subject: [PATCH 129/141] fixed logic error for new/existing contributor invitation --- desci-server/src/controllers/nodes/contributions/create.ts | 4 ++-- desci-server/src/controllers/nodes/contributions/update.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/desci-server/src/controllers/nodes/contributions/create.ts b/desci-server/src/controllers/nodes/contributions/create.ts index 3b6d23cb7..7d3318a9e 100644 --- a/desci-server/src/controllers/nodes/contributions/create.ts +++ b/desci-server/src/controllers/nodes/contributions/create.ts @@ -78,7 +78,7 @@ export const addContributor = async (req: AddContributorRequest, res: Response
Date: Fri, 10 May 2024 11:31:43 +0000 Subject: [PATCH 130/141] fixed import via google for google proprietary docs (sheets/word) --- .../src/controllers/data/google/import.ts | 21 +++++++++++-- desci-server/src/services/googleApiService.ts | 31 ++++++++++++++++++- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/desci-server/src/controllers/data/google/import.ts b/desci-server/src/controllers/data/google/import.ts index f77a7c6ca..376f87898 100644 --- a/desci-server/src/controllers/data/google/import.ts +++ b/desci-server/src/controllers/data/google/import.ts @@ -2,7 +2,11 @@ import { Request, Response } from 'express'; import { logger as parentLogger } from '../../../logger.js'; import { processS3DataToIpfs } from '../../../services/data/processing.js'; -import { GoogleApiService } from '../../../services/googleApiService.js'; +import { + GoogleApiService, + googleDocsExportMap, + googleDocsMimeExtensionConversionMap, +} from '../../../services/googleApiService.js'; import { ErrorResponse, UpdateResponse } from '../update.js'; interface GoogleImportReqBody { @@ -34,9 +38,20 @@ export const googleImport = async ( const googleService = new GoogleApiService(gAuthAccessToken); // googleService.exchangeCodeForToken(gAuthAccessToken); const fileMd = await googleService.getFileMetadata(googleFileId); - const fileStream = await googleService.getFileStream(googleFileId); + + const isGoogleDoc = googleDocsExportMap.hasOwnProperty(fileMd.mimeType); + let fileStream; + let fileName = fileMd.name; + + if (isGoogleDoc) { + const exportMimeType = googleDocsExportMap[fileMd.mimeType]; + fileStream = await googleService.exportFile(googleFileId, exportMimeType); + fileName = fileMd.name + '.' + googleDocsMimeExtensionConversionMap[fileMd.mimeType]; + } else { + fileStream = await googleService.getFileStream(googleFileId); + } // debugger; - const files = [{ originalname: '/' + fileMd.name, content: fileStream, size: fileMd.size }]; + const files = [{ originalname: '/' + fileName, content: fileStream, size: fileMd.size }]; const { ok, value } = await processS3DataToIpfs({ files, user: owner, diff --git a/desci-server/src/services/googleApiService.ts b/desci-server/src/services/googleApiService.ts index b160db809..7dd079ca4 100644 --- a/desci-server/src/services/googleApiService.ts +++ b/desci-server/src/services/googleApiService.ts @@ -5,6 +5,16 @@ import { google, drive_v3 } from 'googleapis'; import { logger as parentLogger } from '../logger.js'; +export const googleDocsExportMap = { + 'application/vnd.google-apps.document': 'application/pdf', + 'application/vnd.google-apps.spreadsheet': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', +}; + +export const googleDocsMimeExtensionConversionMap = { + 'application/vnd.google-apps.document': 'pdf', + 'application/vnd.google-apps.spreadsheet': 'xlsx', +}; + export class GoogleApiService { private oauth2Client; private driveClient: drive_v3.Drive; @@ -38,6 +48,26 @@ export class GoogleApiService { return response.data; } catch (error) { this.logger.error({ docId, error }, 'Failed to get file stream'); + + throw error; + } + } + + /** + * Files using googles proprietary document formats need to be exported, so far supports google word docs and sheets. + */ + async exportFile(docId: string, mimeType: string): Promise { + try { + const response: GaxiosResponse = await this.driveClient.files.export( + { + fileId: docId, + mimeType: mimeType, + }, + { responseType: 'stream' }, + ); + return response.data; + } catch (error) { + this.logger.error({ docId, mimeType, error }, 'Failed to export file'); throw error; } } @@ -58,7 +88,6 @@ export class GoogleApiService { async exchangeCodeForToken(code: string): Promise { try { const { tokens } = await this.oauth2Client.getToken(code); - debugger; this.oauth2Client.setCredentials(tokens); this.logger.info('Successfully exchanged code for tokens'); } catch (error) { From 8184a38b0c7214b0c4ec3c1878242d0dd9da831e Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Fri, 10 May 2024 14:07:05 +0200 Subject: [PATCH 131/141] non blocking after effects for mailing and orcid writing --- desci-server/src/controllers/attestations/claims.ts | 5 +++-- desci-server/src/controllers/attestations/verification.ts | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 6a7f1d24d..1164d2f1c 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -56,6 +56,9 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex // new attestations should be trigger notification of org members if protected const attestation = await attestationService.findAttestationById(body.attestationId); logger.info({ nodeClaim, attestation }, 'CLAIMED'); + + new SuccessResponse(nodeClaim).send(res); + if (attestation.protected) { const members = await prisma.communityMember.findMany({ where: { communityId: attestation.communityId }, @@ -88,8 +91,6 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex logger.info({ err }, '[EMAIL]::ERROR'); } } - - return new SuccessResponse(nodeClaim).send(res); }; export const removeClaim = async (req: RequestWithUser, res: Response, _next: NextFunction) => { diff --git a/desci-server/src/controllers/attestations/verification.ts b/desci-server/src/controllers/attestations/verification.ts index d52b5d01c..a791f28f3 100644 --- a/desci-server/src/controllers/attestations/verification.ts +++ b/desci-server/src/controllers/attestations/verification.ts @@ -99,6 +99,8 @@ export const addVerification = async ( const attestation = await attestationService.findAttestationById(claim.attestationId); + new SuccessMessageResponse().send(res); + if (attestation.protected) { /** * Update ORCID Profile @@ -107,8 +109,6 @@ export const addVerification = async ( const owner = await prisma.user.findFirst({ where: { id: node.ownerId } }); if (owner.orcid) await orcidApiService.postWorkRecord(node.uuid, owner.orcid); } - - return new SuccessMessageResponse().send(res); }; export const getAttestationVerifications = async (req: Request, res: Response, next: NextFunction) => { From a8d43f880a63470460aa1d47d13631587b75c487 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Fri, 10 May 2024 14:28:31 +0200 Subject: [PATCH 132/141] fix: api code paths build error --- desci-server/src/controllers/attestations/claims.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/desci-server/src/controllers/attestations/claims.ts b/desci-server/src/controllers/attestations/claims.ts index 1164d2f1c..d499fc356 100644 --- a/desci-server/src/controllers/attestations/claims.ts +++ b/desci-server/src/controllers/attestations/claims.ts @@ -42,7 +42,8 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex if (claim && claim.revoked) { const reclaimed = await attestationService.reClaimAttestation(claim.id); - return new SuccessResponse(reclaimed).send(res); + new SuccessResponse(reclaimed).send(res); + return; } const nodeClaim = await attestationService.claimAttestation({ @@ -91,6 +92,8 @@ export const claimAttestation = async (req: RequestWithUser, res: Response, _nex logger.info({ err }, '[EMAIL]::ERROR'); } } + + return; }; export const removeClaim = async (req: RequestWithUser, res: Response, _next: NextFunction) => { From 8cabc5a8e3186ba71151163fdc1ed0772bfbf1ba Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Mon, 13 May 2024 12:01:48 +0200 Subject: [PATCH 133/141] chore: document orcid api service class, methods and utils --- desci-server/src/services/orcid.ts | 104 +++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 7 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index 286c6e3ff..dfa2271d4 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -15,6 +15,11 @@ const ORCID_DOMAIN = process.env.ORCID_API_DOMAIN || 'sandbox.orcid.org'; type Claim = Awaited>[number]; const logger = parentLogger.child({ module: 'ORCIDApiService' }); +/** + * Service class for interfacing with ORCID /works API + * Handles updating orcid work profile entries for users with orcid + * linked to their profiles + */ class OrcidApiService { baseUrl: string; @@ -25,6 +30,12 @@ class OrcidApiService { logger.info({ url: this.baseUrl }, 'Init ORCID Service'); } + /** + * Query user orcid access token from the database and refreshes + * tokens if needed and update database entry valid token + * @param userId unique user identifier + * @returns a valid access token string + */ private async getAccessToken(userId: number) { const authTokens = await prisma.authToken.findMany({ where: { @@ -88,6 +99,16 @@ class OrcidApiService { return authToken.accessToken; } + /** + * Remove an attestation from user's ORCID work profile + * If user has no verified protected attestations, remove research node + * work entry + * @param {Object} argument - The claim argument to process + * @param {number} argument.claimId - The ID of the node attestation to remove + * @param {string} argument.nodeUuid - The uuid of the research node + * @param {string} argument.orcid - The ORCID identifier of the user + * @returns + */ async removeClaimRecord({ claimId, nodeUuid, orcid }: { claimId: number; nodeUuid: string; orcid: string }) { const putCode = await prisma.orcidPutCodes.findFirst({ where: { @@ -132,6 +153,15 @@ class OrcidApiService { logger.info({ userId: user.id, CLAIMS: claims.length, nodeUuid }, '[ORCID::DELETE]:: FINISH'); } + /** + * Execute http request to remove ORCID work entry + * and remove the associated putCode from the database + * @param {Object} argument - The claim argument to process + * @param {string} argument.orcid - The ORCID identifier of the user + * @param {number} argument.putCode - The ORCID /work record putCode + * @param {string} argument.authToken - A valid user orcid access token + * @returns + */ async removeWorkRecord({ putCode, authToken, orcid }: { orcid: string; putCode: OrcidPutCodes; authToken: string }) { const code = putCode.putcode; const url = `${this.baseUrl}/${orcid}/work${code ? '/' + code : ''}`; @@ -172,6 +202,14 @@ class OrcidApiService { ); } + /** + * Update ORCID work summary of a user + * Retrieve a validated protected attestations and post each as a work entry + * Retrieve Research Node with uuid {nodeUuid} and post a work entry + * @param nodeUuid - Research node uuid + * @param orcid - ORCID identifier + * @returns + */ async postWorkRecord(nodeUuid: string, orcid: string) { try { const user = await prisma.user.findUnique({ where: { orcid } }); @@ -225,6 +263,18 @@ class OrcidApiService { } } + /** + * Execute http request to post/update ORCID work entry for a node + * and insert/update the associated putCode in the database + * @param {Object} argument - The Research Node details object + * @param {Object} argument.manifest - The node's manifest + * @param {string} argument.publicationDate - The last publish datetime string in rfc3339 format + * @param {string} argument.uuid - Unique uuid identifier of the node to update + * @param {number} argument.userId - ID of the user (node owner) + * @param {string} argument.authToken - A valid user orcid access token + * @param {string} argument.orcid - The ORCID identifier of the user + * @param {number} argument.nodeVersion - The latest version of the research node + */ async putNodeWorkRecord({ manifest, publicationDate, @@ -248,7 +298,7 @@ class OrcidApiService { }); const putCode = orcidPutCode?.putcode; - let data = generateRootWorkRecord({ manifest, publicationDate, nodeVersion, putCode }); + let data = generateNodeWorkRecord({ manifest, publicationDate, nodeVersion, putCode }); data = data.replace(/\\"/g, '"'); const url = `${this.baseUrl}/${orcid}/work${putCode ? '/' + putCode : ''}`; @@ -316,6 +366,19 @@ class OrcidApiService { } } + /** + * Execute http request to post/update ORCID work entry for an attestation + * and insert/update the associated putCode in the database + * @param {Object} argument - The Research Node details object + * @param {string} argument.authToken - A valid user orcid access token + * @param {Object} argument.claim - The claim object retrieved from the database + * @param {Object} argument.manifest - The node's manifest + * @param {number} argument.nodeVersion - The latest version of the research node + * @param {string} argument.orcid - The ORCID identifier of the user + * @param {string} argument.publicationDate - The last publish datetime string in rfc3339 format + * @param {string} argument.uuid - Unique uuid identifier of the node to update + * @param {number} argument.userId - ID of the user (node owner) + */ async putClaimWorkRecord({ manifest, publicationDate, @@ -421,9 +484,16 @@ class OrcidApiService { } } -const orcidApiService = new OrcidApiService(); -export default orcidApiService; - +/** + * Generate an ORCID work summary xml string based for an attestation/claim + * Model Reference https://github.com/ORCID/orcid-model/blob/master/src/main/resources/record_3.0/work-3.0.xsd + * @param {Object} argument - The Research Node details object + * @param {Object} argument.claim - The claim object retrieved from the database + * @param {Object} argument.manifest - The node's manifest + * @param {number} argument.nodeVersion - The latest version of the research node + * @param {string} argument.publicationDate - The last publish datetime string in rfc3339 format + * @param {number=} argument.putCode - The ORCID /work record putCode + */ const generateClaimWorkRecord = ({ manifest, putCode, @@ -483,9 +553,20 @@ const generateClaimWorkRecord = ({ ` ); }; + const zeropad = (data: string) => (data.length < 2 ? `0${data}` : data); -const generateRootWorkRecord = ({ +/** + * Generate an ORCID work summary xml string based for a research Node + * Model Reference https://github.com/ORCID/orcid-model/blob/master/src/main/resources/record_3.0/work-3.0.xsd + * @param {Object} argument - The Research Node details object + * @param {Object} argument.manifest - The node's manifest + * @param {number} argument.nodeVersion - The latest version of the research node + * @param {string} argument.publicationDate - The last publish datetime string in rfc3339 format + * @param {number=} argument.putCode - The ORCID /work record putCode + * @returns {string} xml string of the constructed work summary data + */ +const generateNodeWorkRecord = ({ manifest, nodeVersion, putCode, @@ -495,7 +576,7 @@ const generateRootWorkRecord = ({ nodeVersion: number; putCode?: string; publicationDate: string; -}) => { +}): string => { const codeAttr = putCode ? 'put-code="' + putCode + '"' : ''; const workType = 'preprint'; const [month, day, year] = publicationDate.split('-'); @@ -530,7 +611,13 @@ const generateRootWorkRecord = ({ ); }; -const generateContributors = (authors: ResearchObjectV1Author[]) => { +/** + * Generate an ORCID work contributors xml string + * Model Reference https://github.com/ORCID/orcid-model/blob/master/src/main/resources/record_3.0/work-3.0.xsd#L160 + * @param authors[] - A list of ResearchObjectV1Author entries + * @returns {string} xml string of the constructed contributor data + */ +const generateContributors = (authors: ResearchObjectV1Author[]): string => { const contributors = authors?.length > 0 ? ` @@ -558,3 +645,6 @@ const generateContributors = (authors: ResearchObjectV1Author[]) => { : ``; return contributors; }; + +const orcidApiService = new OrcidApiService(); +export default orcidApiService; From 65e495456d289933e125e362dbfbee19609200b5 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 15 May 2024 13:04:26 +0200 Subject: [PATCH 134/141] insert orcid auth token on every fresh login attempt --- desci-server/scripts/be-node-dev.sh | 2 +- desci-server/src/controllers/auth/orcid.ts | 2 +- desci-server/src/services/user.ts | 23 ++++++++++------------ 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index 3a7941689..f01296753 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -4,7 +4,7 @@ apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run diff --git a/desci-server/src/controllers/auth/orcid.ts b/desci-server/src/controllers/auth/orcid.ts index 00241fb35..9fc8e8944 100755 --- a/desci-server/src/controllers/auth/orcid.ts +++ b/desci-server/src/controllers/auth/orcid.ts @@ -74,7 +74,7 @@ export const getOrcidRecord = async (orcid: string, accessToken: string): Promis `Fetching OrcId Record for ${orcid}`, ); const { data } = await axios(config); - logger.info({ fn: 'getOrcidRecord', orcid, data }, `Received OrcId Record data`); + logger.info({ fn: 'getOrcidRecord', orcid }, `Received OrcId Record data`); return data as OrcIdRecordData; }; diff --git a/desci-server/src/services/user.ts b/desci-server/src/services/user.ts index ea81ee21b..130d6a39a 100644 --- a/desci-server/src/services/user.ts +++ b/desci-server/src/services/user.ts @@ -131,7 +131,7 @@ export async function connectOrcidToUserIfPossible( ) { logger.info({ fn: 'connectOrcidToUserIfPossible', orcid, accessTokenPresent: !!accessToken }, `doing orcid lookup`); const orcidRecord = await orcidLookup(orcid, accessToken); - logger.info({ fn: 'connectOrcidToUserIfPossible', orcidRecord, orcid }, `found orcid record`); + logger.info({ fn: 'connectOrcidToUserIfPossible', orcid }, `found orcid record`); // if the orcid in the access token doesn't match, we must fail the process because the requestor is not guaranteed to be the owner of the orcid if (orcidRecord['orcid-identifier'].path !== orcid) { @@ -151,8 +151,8 @@ export async function connectOrcidToUserIfPossible( // we are already email auth'd, we have only one to check logger.info({ fn: 'orcidCheck', user }, `Requesting user ${user}`); if (!user.orcid || user.orcid === orcid) { - let nodeConnect; - // debugger; + let nodeConnect: Awaited>; + debugger; if (!user.orcid || !(await isAuthTokenSetForUser(user.id))) { nodeConnect = await setOrcidForUser(user.id, orcid, { accessToken, @@ -167,21 +167,18 @@ export async function connectOrcidToUserIfPossible( } } else { // we are not email auth'd, we have to check all users for this orcid - logger.info({ fn: 'orcidCheck' }, `Orcid first time login, no associated email`); const userFound = await getUserByOrcId(orcid); if (userFound) { - let nodeConnect; - // debugger; - if (!userFound.orcid || !(await isAuthTokenSetForUser(userFound.id))) { - nodeConnect = await setOrcidForUser(userFound.id, orcid, { - accessToken, - refreshToken, - expiresIn, - }); - } + logger.info({ fn: 'orcidCheck' }, `Orcid fresh login, No exisiting auth `); + const nodeConnect = await setOrcidForUser(userFound.id, orcid, { + accessToken, + refreshToken, + expiresIn, + }); const jwt = generateAccessToken({ email: userFound.email }); return { userFound: true, nodeConnect, jwt }; } else { + logger.info({ reason: 'No associated user found, prompt for email' }, 'OrcidCheck'); // we didn't find a user, so we need to prompt for an email verification flow to assign an email to this orcid return { error: 'need to attach email', code: 3, userFound: false, promptEmail: true }; } From a87c8158af0785afeef18d8d8071af3d35d75c53 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Wed, 15 May 2024 13:06:30 +0200 Subject: [PATCH 135/141] restore pg port --- desci-server/scripts/be-node-dev.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desci-server/scripts/be-node-dev.sh b/desci-server/scripts/be-node-dev.sh index f01296753..3a7941689 100755 --- a/desci-server/scripts/be-node-dev.sh +++ b/desci-server/scripts/be-node-dev.sh @@ -4,7 +4,7 @@ apt-get install bash # Exit on error set -e -./desci-server/scripts/wait-for-it.sh $PG_HOST:5433 --timeout=5 --strict -- echo "postgres up and running" +./desci-server/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" # npm run migration:run # npm run seed:run From a53536280e3e40291f65ab8111560e4e31ee88b3 Mon Sep 17 00:00:00 2001 From: Sina Iman Date: Thu, 16 May 2024 04:03:53 +0200 Subject: [PATCH 136/141] fix dpid script --- desci-server/package.json | 1 + desci-server/src/scripts/fix-dpid.ts | 91 ++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 desci-server/src/scripts/fix-dpid.ts diff --git a/desci-server/package.json b/desci-server/package.json index a10510f91..86eb086b5 100755 --- a/desci-server/package.json +++ b/desci-server/package.json @@ -21,6 +21,7 @@ "script:testing": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/testing.ts", "script:migrate-draft-trees": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/migrate-draft-trees.ts", "script:endorse-dpid": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/endorse-dpid.ts", + "script:fix-dpid": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/fix-dpid.ts", "script:seed-social-data": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/seed-social-data.ts", "script:DESTRUCTIVE-clear-social-data": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/DESTRUCTIVE-clear-social-data.ts", "script:seed-community-member": "debug=* node --no-warnings --enable-source-maps --loader ts-node/esm ./src/scripts/seed-community-members.ts", diff --git a/desci-server/src/scripts/fix-dpid.ts b/desci-server/src/scripts/fix-dpid.ts new file mode 100644 index 000000000..9c6a8a528 --- /dev/null +++ b/desci-server/src/scripts/fix-dpid.ts @@ -0,0 +1,91 @@ +// write a script to fix a dpid passed as an arg +import { DataType, Prisma } from '@prisma/client'; + +import { prisma } from '../client.js'; +import { logger as parentLogger } from '../logger.js'; +import { getSizeForCid } from '../services/ipfs.js'; +import { encodeBase64UrlSafe } from '../utils.js'; + +const logger = parentLogger.child({ module: 'FIX DPID' }); + +export const convertHexToUUID = (hex: string): string => { + const num = Buffer.from(hex.substring(2), 'hex'); + const base64safe = encodeBase64UrlSafe(num); + return base64safe; +}; + +const dpid = process.argv[2]; +const fixDpid = async () => { + logger.info({ fixDpid: dpid }); + if (!dpid) { + logger.error('Missing dpid'); + process.exit(1); + } + // lookup dpid in https://beta.dpid.org/api/v1/dpid?page=${parseInt(dpid) + 1}&sort=asc&size=1 + + const data = await fetch(`https://beta.dpid.org/api/v1/dpid?page=${parseInt(dpid) + 1}&sort=asc&size=1`); + const json = (await data.json())[0]; + logger.info(json); + const recentCid = json.recentCid; + + const researchObjectId = json.researchObject.id; + + const uuidFromHex = convertHexToUUID(researchObjectId); + + logger.info({ uuidFromHex }); + + // get nodeId + const node = await prisma.node.findFirst({ + where: { + uuid: uuidFromHex, + }, + }); + + // get latest NodeVersion + const nodeVersion = await prisma.publicDataReference.findFirst({ + where: { + nodeId: node.id, + }, + orderBy: { + createdAt: 'desc', + }, + }); + const nodeVersionId = nodeVersion.versionId; + + const manifestRef = await prisma.publicDataReference.findMany({ + where: { + nodeId: node.id, + versionId: nodeVersionId, + cid: recentCid, + type: DataType.MANIFEST, + }, + }); + + if (!manifestRef.length) { + logger.error('No manifest reference found, adding'); + const manifestEntry: Prisma.PublicDataReferenceCreateManyInput = { + cid: recentCid, + userId: node.ownerId, + root: false, + directory: false, + size: await getSizeForCid(recentCid, false), + type: DataType.MANIFEST, + nodeId: node.id, + versionId: nodeVersionId, + }; + logger.info({ manifestEntry }); + await prisma.publicDataReference.create({ + data: manifestEntry, + }); + logger.info('Manifest reference added'); + process.exit(0); + } else { + logger.info('Manifest reference found'); + process.exit(0); + } + + // ensure recentCid is in the PublicDataReference table for this node +}; + +logger.info({ start: true }); +fixDpid(); From 1b6814cadf4e2351f0a7d38f648e72f76c8422b0 Mon Sep 17 00:00:00 2001 From: Sina Iman Date: Thu, 16 May 2024 04:04:53 +0200 Subject: [PATCH 137/141] add usage instruction to fix-dpid script --- desci-server/src/scripts/fix-dpid.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/desci-server/src/scripts/fix-dpid.ts b/desci-server/src/scripts/fix-dpid.ts index 9c6a8a528..dd9012212 100644 --- a/desci-server/src/scripts/fix-dpid.ts +++ b/desci-server/src/scripts/fix-dpid.ts @@ -14,6 +14,9 @@ export const convertHexToUUID = (hex: string): string => { return base64safe; }; +// usage: npx tsx scripts/fix-dpid.ts 211 +// where 211 is the dpid to fix + const dpid = process.argv[2]; const fixDpid = async () => { logger.info({ fixDpid: dpid }); From d482db16283e171e8f78ad098fc259349f63c756 Mon Sep 17 00:00:00 2001 From: Sina Iman Date: Thu, 16 May 2024 11:34:17 +0200 Subject: [PATCH 138/141] hook up dpid fix to publish flow --- desci-server/src/controllers/nodes/publish.ts | 17 ++- desci-server/src/scripts/fix-dpid.ts | 92 +--------------- desci-server/src/services/fixDpid.ts | 104 ++++++++++++++++++ 3 files changed, 118 insertions(+), 95 deletions(-) create mode 100644 desci-server/src/services/fixDpid.ts diff --git a/desci-server/src/controllers/nodes/publish.ts b/desci-server/src/controllers/nodes/publish.ts index e5f4e2fb3..34e6a8d42 100644 --- a/desci-server/src/controllers/nodes/publish.ts +++ b/desci-server/src/controllers/nodes/publish.ts @@ -5,6 +5,7 @@ import { Request, Response, NextFunction } from 'express'; import { prisma } from '../../client.js'; import { logger as parentLogger } from '../../logger.js'; import { getManifestByCid } from '../../services/data/processing.js'; +import { fixDpid, getTargetDpidUrl } from '../../services/fixDpid.js'; import { saveInteraction, saveInteractionWithoutReq } from '../../services/interactionLog.js'; import { publishResearchObject, @@ -286,16 +287,22 @@ export const publishHandler = async ({ * Initiate IPFS storage upload using Estuary */ const manifest = await getManifestByCid(cid); + + const targetDpidUrl = getTargetDpidUrl(); + // const researchObjectToPublish = { uuid, cid, manifest, ownerId: owner.id }; const sendDiscordNotification = (error: boolean) => { const manifestSource = manifest as ResearchObjectV1; - discordNotify( - `https://${manifestSource.dpid?.prefix}.dpid.org/${manifestSource.dpid?.id}${ - error ? ' (note: estuary-err)' : '' - }`, - ); + discordNotify(`${targetDpidUrl}/${manifestSource.dpid?.id}${error ? ' (note: estuary-err)' : ''}`); }; + // run fix dpid method + if (targetDpidUrl) { + await fixDpid(manifest.dpid.id); + } else { + logger.warn('DPID URL not set, skipping dpid fix'); + } + /** * NOTE: uncomment when reactivating public ref mirroring const handleMirrorSuccess = async (publishedResearchObjectResult) => { diff --git a/desci-server/src/scripts/fix-dpid.ts b/desci-server/src/scripts/fix-dpid.ts index dd9012212..f7e25b92f 100644 --- a/desci-server/src/scripts/fix-dpid.ts +++ b/desci-server/src/scripts/fix-dpid.ts @@ -1,94 +1,6 @@ // write a script to fix a dpid passed as an arg -import { DataType, Prisma } from '@prisma/client'; -import { prisma } from '../client.js'; -import { logger as parentLogger } from '../logger.js'; -import { getSizeForCid } from '../services/ipfs.js'; -import { encodeBase64UrlSafe } from '../utils.js'; - -const logger = parentLogger.child({ module: 'FIX DPID' }); - -export const convertHexToUUID = (hex: string): string => { - const num = Buffer.from(hex.substring(2), 'hex'); - const base64safe = encodeBase64UrlSafe(num); - return base64safe; -}; - -// usage: npx tsx scripts/fix-dpid.ts 211 -// where 211 is the dpid to fix +import { fixDpid } from '../services/fixDpid.js'; const dpid = process.argv[2]; -const fixDpid = async () => { - logger.info({ fixDpid: dpid }); - if (!dpid) { - logger.error('Missing dpid'); - process.exit(1); - } - // lookup dpid in https://beta.dpid.org/api/v1/dpid?page=${parseInt(dpid) + 1}&sort=asc&size=1 - - const data = await fetch(`https://beta.dpid.org/api/v1/dpid?page=${parseInt(dpid) + 1}&sort=asc&size=1`); - const json = (await data.json())[0]; - logger.info(json); - const recentCid = json.recentCid; - - const researchObjectId = json.researchObject.id; - - const uuidFromHex = convertHexToUUID(researchObjectId); - - logger.info({ uuidFromHex }); - - // get nodeId - const node = await prisma.node.findFirst({ - where: { - uuid: uuidFromHex, - }, - }); - - // get latest NodeVersion - const nodeVersion = await prisma.publicDataReference.findFirst({ - where: { - nodeId: node.id, - }, - orderBy: { - createdAt: 'desc', - }, - }); - const nodeVersionId = nodeVersion.versionId; - - const manifestRef = await prisma.publicDataReference.findMany({ - where: { - nodeId: node.id, - versionId: nodeVersionId, - cid: recentCid, - type: DataType.MANIFEST, - }, - }); - - if (!manifestRef.length) { - logger.error('No manifest reference found, adding'); - const manifestEntry: Prisma.PublicDataReferenceCreateManyInput = { - cid: recentCid, - userId: node.ownerId, - root: false, - directory: false, - size: await getSizeForCid(recentCid, false), - type: DataType.MANIFEST, - nodeId: node.id, - versionId: nodeVersionId, - }; - logger.info({ manifestEntry }); - await prisma.publicDataReference.create({ - data: manifestEntry, - }); - logger.info('Manifest reference added'); - process.exit(0); - } else { - logger.info('Manifest reference found'); - process.exit(0); - } - - // ensure recentCid is in the PublicDataReference table for this node -}; - -logger.info({ start: true }); -fixDpid(); +fixDpid(dpid); diff --git a/desci-server/src/services/fixDpid.ts b/desci-server/src/services/fixDpid.ts new file mode 100644 index 000000000..4de297940 --- /dev/null +++ b/desci-server/src/services/fixDpid.ts @@ -0,0 +1,104 @@ +// write a script to fix a dpid passed as an arg +import { DataType, Prisma } from '@prisma/client'; + +import { prisma } from '../client.js'; +import { logger as parentLogger } from '../logger.js'; +import { encodeBase64UrlSafe } from '../utils.js'; + +import { getSizeForCid } from './ipfs.js'; + +const logger = parentLogger.child({ module: 'FIX DPID' }); + +export const convertHexToUUID = (hex: string): string => { + const num = Buffer.from(hex.substring(2), 'hex'); + const base64safe = encodeBase64UrlSafe(num); + return base64safe; +}; + +export const getTargetDpidUrl = () => { + // check target dpid API url + const TARGET_DPID_URL_BY_SERVER_URL = { + 'https://nodes-api-dev.desci.com': 'https://dev-beta.dpid.org', + 'https://nodes-api.desci.com': 'https://beta.dpid.org', + }; + const targetDpidUrl = TARGET_DPID_URL_BY_SERVER_URL[process.env.SERVER_URL]; + return targetDpidUrl; +}; + +// usage: npx tsx scripts/fix-dpid.ts 211 +// where 211 is the dpid to fix + +const fixDpid = async (dpid: string) => { + logger.info({ fixDpid: dpid }); + if (!dpid) { + logger.error('Missing dpid'); + process.exit(1); + } + // lookup dpid in https://beta.dpid.org/api/v1/dpid?page=${parseInt(dpid) + 1}&sort=asc&size=1 + + const targetDpidUrl = getTargetDpidUrl(); + + const data = await fetch(`${targetDpidUrl}/api/v1/dpid?page=${parseInt(dpid) + 1}&sort=asc&size=1`); + const json = (await data.json())[0]; + logger.info(json); + const recentCid = json.recentCid; + + const researchObjectId = json.researchObject.id; + + const uuidFromHex = convertHexToUUID(researchObjectId); + + logger.info({ uuidFromHex }); + + // get nodeId + const node = await prisma.node.findFirst({ + where: { + uuid: uuidFromHex, + }, + }); + + // get latest NodeVersion + const nodeVersion = await prisma.publicDataReference.findFirst({ + where: { + nodeId: node.id, + }, + orderBy: { + createdAt: 'desc', + }, + }); + const nodeVersionId = nodeVersion.versionId; + + const manifestRef = await prisma.publicDataReference.findMany({ + where: { + nodeId: node.id, + versionId: nodeVersionId, + cid: recentCid, + type: DataType.MANIFEST, + }, + }); + + if (!manifestRef.length) { + logger.error('No manifest reference found, adding'); + const manifestEntry: Prisma.PublicDataReferenceCreateManyInput = { + cid: recentCid, + userId: node.ownerId, + root: false, + directory: false, + size: await getSizeForCid(recentCid, false), + type: DataType.MANIFEST, + nodeId: node.id, + versionId: nodeVersionId, + }; + logger.info({ manifestEntry }); + await prisma.publicDataReference.create({ + data: manifestEntry, + }); + logger.info('Manifest reference added'); + process.exit(0); + } else { + logger.info('Manifest reference found'); + process.exit(0); + } + + // ensure recentCid is in the PublicDataReference table for this node +}; +export { fixDpid }; From 90b875f4ae41d73ea6b0cdae15422a7ecd6b91c5 Mon Sep 17 00:00:00 2001 From: Sina Iman Date: Thu, 16 May 2024 12:27:42 +0200 Subject: [PATCH 139/141] move fixdpid to publish handler --- desci-server/src/controllers/nodes/publish.ts | 7 ------- desci-server/src/workers/publish.ts | 12 ++++++++++++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/desci-server/src/controllers/nodes/publish.ts b/desci-server/src/controllers/nodes/publish.ts index 34e6a8d42..364fd9141 100644 --- a/desci-server/src/controllers/nodes/publish.ts +++ b/desci-server/src/controllers/nodes/publish.ts @@ -296,13 +296,6 @@ export const publishHandler = async ({ discordNotify(`${targetDpidUrl}/${manifestSource.dpid?.id}${error ? ' (note: estuary-err)' : ''}`); }; - // run fix dpid method - if (targetDpidUrl) { - await fixDpid(manifest.dpid.id); - } else { - logger.warn('DPID URL not set, skipping dpid fix'); - } - /** * NOTE: uncomment when reactivating public ref mirroring const handleMirrorSuccess = async (publishedResearchObjectResult) => { diff --git a/desci-server/src/workers/publish.ts b/desci-server/src/workers/publish.ts index 06f6c1e23..9eba6971f 100644 --- a/desci-server/src/workers/publish.ts +++ b/desci-server/src/workers/publish.ts @@ -7,6 +7,8 @@ import { prisma } from '../client.js'; import { publishHandler } from '../controllers/nodes/publish.js'; import { logger as parentLogger } from '../logger.js'; import { lockService } from '../redisClient.js'; +import { getManifestByCid } from '../services/data/processing.js'; +import { fixDpid, getTargetDpidUrl } from '../services/fixDpid.js'; enum ProcessOutcome { EmptyQueue, @@ -48,6 +50,16 @@ async function processPublishQueue() { publishHandler(task) .then(async (published) => { if (!process.env.MUTE_PUBLISH_WORKER) logger.info({ task, published }, 'PUBLISH HANDLER SUCCESS'); + // run fix dpid method + + const targetDpidUrl = getTargetDpidUrl(); + + if (targetDpidUrl) { + await fixDpid(task.dpid); + } else { + logger.warn('DPID URL not set, skipping dpid fix'); + } + lockService.freeLock(task.transactionId); }) .catch((err) => { From 541657c7d298ece1250acb84cafa9501124ef025 Mon Sep 17 00:00:00 2001 From: kadami <86646883+kadamidev@users.noreply.github.com> Date: Thu, 16 May 2024 14:26:07 +0000 Subject: [PATCH 140/141] added src for contributor url for unauthed verifiable rendering, added sensible default for invitee name if profile name unassigned --- desci-server/src/templates/emails/ContributorInvite.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/desci-server/src/templates/emails/ContributorInvite.tsx b/desci-server/src/templates/emails/ContributorInvite.tsx index 680b54a4d..56d7998f1 100644 --- a/desci-server/src/templates/emails/ContributorInvite.tsx +++ b/desci-server/src/templates/emails/ContributorInvite.tsx @@ -38,8 +38,9 @@ export const ContributorInvite = ({ newUser, }: ContributorInviteEmailProps) => { if (nodeUuid?.endsWith('.') || nodeUuid?.endsWith('=')) nodeUuid = nodeUuid.slice(0, -1); + inviter = inviter || 'A user'; const privShareUrl = `${DAPP_URL}/node/${nodeUuid}?shareId=${privShareCode}`; - const contributorUrl = `${DAPP_URL}/node/${nodeUuid}/contributors/${contributorId}?shareId=${privShareCode}`; + const contributorUrl = `${DAPP_URL}/node/${nodeUuid}/contributors/${contributorId}?shareId=${privShareCode}&src=inv`; return ( From b0b0cda89b3e619b81e5d8311c88faad78114159 Mon Sep 17 00:00:00 2001 From: shadrach-tayo Date: Fri, 17 May 2024 16:42:43 +0200 Subject: [PATCH 141/141] fix: unique external-ids for work record --- desci-server/src/services/orcid.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/desci-server/src/services/orcid.ts b/desci-server/src/services/orcid.ts index dfa2271d4..682eee87d 100644 --- a/desci-server/src/services/orcid.ts +++ b/desci-server/src/services/orcid.ts @@ -516,7 +516,7 @@ const generateClaimWorkRecord = ({ const description = `${claim.name} Attestation`; const [month, day, year] = publicationDate.split('-'); - const externalUrl = `${process.env.DPID_URL_OVERRIDE}/${manifest.dpid.id}/attestation/${claim.id}`; + const externalUrl = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/attestation/${claim.id}`; const dataRoot = `${DPID_URL_OVERRIDE}/${manifest.dpid.id}/v${nodeVersion}`; logger.info({ codeAttr, workType, publicationDate, day, month, year, externalUrl }, 'CODE ATTR'); return ( @@ -537,13 +537,13 @@ const generateClaimWorkRecord = ({ uri - ${claim.name} URL + ${claim.name} Root ${dataRoot} ${dataRoot} self uri - ${claim.name} by ${claim.community} + ${externalUrl} ${externalUrl} part-of