diff --git a/.env.example b/.env.example index 7734d3e31..1dcf8fd25 100755 --- a/.env.example +++ b/.env.example @@ -90,8 +90,9 @@ ORCID_API_DOMAIN=https://api.sandbox.orcid.org ORCID_CLIENT_ID= ORCID_CLIENT_SECRET= -REPO_SERVER_URL=http://host.docker.internal:5445 +REPO_SERVER_URL=http://host.docker.internal:5484 REPO_SERVICE_SECRET_KEY=secretrepo + # Ceramic publish feature toggle, set to 1 for active TOGGLE_CERAMIC= # If above is set, clone `@desci-labs/desci-codex` and put the path to it here diff --git a/.github/workflows/build-and-test.yaml b/.github/workflows/build-and-test.yaml index 5da51f4b3..b29626fa5 100644 --- a/.github/workflows/build-and-test.yaml +++ b/.github/workflows/build-and-test.yaml @@ -58,7 +58,6 @@ jobs: - name: Run tests run: | cd desci-server && export DOCKER_BUILDKIT=1 && yarn && yarn test - echo "exit code $?" if [ $? -ne 0 ]; then exit 1 - fi \ No newline at end of file + fi diff --git a/Makefile b/Makefile index 81c6f4a86..9de709eb6 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ build: .env desci-contracts/.env $(MAKE) -C desci-models build $(MAKE) -C desci-contracts build $(MAKE) -C desci-server install + $(MAKE) -C desci-repo install .PHONY: sterile sterile: clean-rec @@ -23,6 +24,7 @@ clean-rec: $(MAKE) -C desci-contracts clean $(MAKE) -C desci-models clean $(MAKE) -C desci-server clean + $(MAKE) -C desci-repo clean .PHONY: .env .env: nodes-media/.env desci-repo/.env diff --git a/README.md b/README.md index ee3c683f2..06781b23a 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,11 @@ This is a Typescript types library that describes a spec for Research Objects. I This is a NodeJS backend that manages draft Nodes. It maintains a user auth, verifies wallet credentials, offers 2FA to users, and is the main system that orchestrates between microservices. It maintains version history for each update to Nodes. It interfaces with a Graph index to implement the [DPID](https://dpid.org) Resolution Scheme.

+## **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) +

+ ## **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. diff --git a/bootstrapCeramic.sh b/bootstrapCeramic.sh index 1e37365e2..0c753eb12 100755 --- a/bootstrapCeramic.sh +++ b/bootstrapCeramic.sh @@ -15,7 +15,7 @@ CTX="[bootstrapCeramic.sh]" set -euo pipefail trap catch ERR catch() { - echo "$CTX script failed" + echo "$CTX script failed (are CODEX_REPO_PATH and TOGGLE_CERAMIC set in .env?)" exit 1 } @@ -43,6 +43,13 @@ fi # Setup desci-codex and deploy composites pushd "$CODEX_REPO_PATH" + +# 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 + if [[ ! -d "node_modules" ]]; then echo "$CTX installing deps desci-codex..." npm ci diff --git a/desci-models/package.json b/desci-models/package.json index be668473e..6836ec056 100644 --- a/desci-models/package.json +++ b/desci-models/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/desci-models", - "version": "0.2.1", + "version": "0.2.3-rc1", "description": "Data models for DeSci Nodes", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -16,7 +16,7 @@ "test": "mocha -r ts-node/register --inspect tests/**/*.test.ts", "coverage": "nyc -r lcov -e .ts -x \"*.test.ts\" npm run test", "build": "tsc", - "publish": "npm publish --access public", + "doPublish": "npm publish --access public", "generate": "ts-interface-builder src/ResearchObject.ts src/RoCrate.ts --ignore-generics" }, "author": "", diff --git a/desci-models/src/ResearchObject.ts b/desci-models/src/ResearchObject.ts index 8a97c3ada..267883851 100644 --- a/desci-models/src/ResearchObject.ts +++ b/desci-models/src/ResearchObject.ts @@ -16,19 +16,34 @@ export interface IpldUrl { } export interface ResearchObjectV1 extends ResearchObject { + /** Version of the research object schema*/ version: 'desci-nodes-0.1.0' | 'desci-nodes-0.2.0' | 1; + /** Human-readable title of the publication */ title?: string; + /** Human-readable desciption */ description?: string; + /** The license that applies unless overriden with a component */ defaultLicense?: string; + /** CID of a cover image to the publication */ coverImage?: string | IpldUrl; + /** Metadata additions to DAG entires, or stand-alone entries like external links */ components: ResearchObjectV1Component[]; + /** @deprecated */ validations?: ResearchObjectV1Validation[]; + /* @deprecated **/ attributes?: ResearchObjectV1Attributes[]; + /** History for the object. Not part of the manifest, but can be populated + * by an pplication */ history?: ResearchObjectV1History[]; + /** @deprecated */ tags?: ResearchObjectV1Tags[]; + /** Organizations affiliated with the publication */ organizations?: ResearchObjectV1Organization[]; + /** Assigned dPID of the object, allowing finding the PID from the manifest */ dpid?: ResearchObjectV1Dpid; + /** Research fields relevant for the publication */ researchFields?: string[]; + /** Contributors to this publication */ authors?: ResearchObjectV1Author[]; } @@ -46,35 +61,68 @@ export interface ResearchObjectV1Tags { name: string; } +/** + * Path-invariant metadata about a part of the research object. + * Can be used to tag a directory as code or data, mark a pdf file as + * as the main manuscript, add an external URL to the drive, et cetera. + * + * Mainly used through extension. See PdfComponent and DataComponent for + * example. +*/ export interface ResearchObjectV1Component { + /** Random UUID to identify the component, because paths and CIDs are + * neither unique nor stable. + */ id: string; + /** Human-readable description of the component. */ name: string; + /** Type of payload, which indicates to an app what to do with it. */ type: ResearchObjectComponentType | ResearchObjectComponentTypeMap; + /** @deprecated visual representation for the component */ icon?: any; + /** Description of the component content, see interface extenders. */ payload: any; + /** @deprecated Preferred component to initially load in an app. */ primary?: boolean; + /** Mark component as particularly interesting. */ starred?: boolean; } +/** + * Contributor listing for a research object. +*/ export interface ResearchObjectV1Author { + /** Name of the contributor */ name: string; + /** Orcid handle of the contributor */ orcid?: string; + /** Google Scholar profile of the contributor */ googleScholar?: string; + /** Type of role in the publication */ role: ResearchObjectV1AuthorRole; + /** Organizations the contributor is affiliated with */ organizations?: ResearchObjectV1Organization[]; + /** GitHub profile of the contributor */ github?: string; } export interface ResearchObjectV1History { title: string; - author?: any; // does not refer to ResearchObject author for credit purpose, refers to the on-chain identity of the account who made the publication, this should not be stored in manifest and used in client only + /** does not refer to ResearchObject author for credit purpose, refers to + * the on-chain identity of the account who made the publication, this + * should not be stored in manifest and used in client only + */ + author?: any; content: string; date?: number; // utc seconds transaction?: ResearchObjectTransaction; } +/** Record of publication in the dPID registry contracts */ export interface ResearchObjectTransaction { + /** Transaction hash in hex format */ id: string; + /** Hex-encoded manifest CID as stored in the contract */ cid: string; chainId?: string; } @@ -125,7 +173,8 @@ export enum ResearchObjectComponentType { PDF = 'pdf', CODE = 'code', VIDEO = 'video', - TERMINAL = 'terminal', // not used, TODO: remove + /** @deprecated remove at will */ + TERMINAL = 'terminal', DATA = 'data', LINK = 'link', // external link } @@ -172,15 +221,24 @@ export type ResearchObjectComponentSubtypes = | ResearchObjectComponentLinkSubtype; export interface CommonComponentPayload { + /** Generic title of component */ title?: string; + /** @deprecated Keyword metadata for component */ keywords?: string[]; + /** Description of component */ description?: string; + /** License of component, if other than research object default */ licenseType?: string; - path?: string; + /** Path of component in the drive, starting with `root` */ + path: string; } export interface PdfComponentPayload { - url: string; + /** @deprecated CID of document, as stored in the drive */ + url?: string; + /** CID of document, as stored in the drive */ + cid: string; + /** Annotations on the document */ annotations?: PdfAnnotation[]; } @@ -206,6 +264,19 @@ export interface DataComponentPayload { subMetadata: Record; } +export interface CodeComponentPayload { + /** The main programming language of the code in the component */ + language?: string; + /** @deprecated */ + code?: string; + /** @deprecated CID of the component target */ + url?: string; + /** CID of the component target */ + cid: string; + /** Source URL, if externally imported code bundle */ + externalUrl?: string; +} + export interface DataBucketComponent extends ResearchObjectV1Component { type: ResearchObjectComponentType.DATA_BUCKET; id: 'root'; @@ -237,13 +308,12 @@ export interface DataComponent extends ResearchObjectV1Component { export interface CodeComponent extends ResearchObjectV1Component { type: ResearchObjectComponentType.CODE; subtype?: ResearchObjectComponentCodeSubtype; - payload: { - language?: string; - code?: string; - url?: string; - externalUrl?: string; - } & CommonComponentPayload; + payload: CodeComponentPayload & CommonComponentPayload; } + +/** + * @deprecated remove at will +*/ export interface TerminalComponent extends ResearchObjectV1Component { type: ResearchObjectComponentType.TERMINAL; payload: { @@ -307,3 +377,43 @@ export enum ResearchObjectV1AuthorRole { */ export type ResearchObjectComponentTypeMap = Record; export type FileExtension = string; + +/** A semi-complete selection of license choices */ +export type License = + | 'CC-BY-4.0' + | 'CC-BY' + | 'CC-BY-SA-4.0' + | 'CC-BY-SA' + | 'CC-BY-ND-4.0' + | 'CC-BY-ND' + | 'CC-BY-NC-4.0' + | 'CC-BY-NC' + | 'CC-BY-NC-SA-4.0' + | 'CC-BY-NC-SA' + | 'CC-BY-NC-ND-4.0' + | 'CC-BY-NC-ND' + | 'CC0-1.0' + | 'CC BY' + | 'CC BY-SA' + | 'CC BY-ND' + | 'CC BY-NC' + | 'CC BY-NC-SA' + | 'CC BY-NC-ND' + | 'CC0' + | 'GPL-3.0' + | 'MIT License' + | 'Apache License 2.0' + | 'Apache 2.0' + | 'Mozilla Public License 2.0' + | 'MPL 2.0' + | 'MIT' + | 'BSD-3-Clause' + | 'BSD-2-Clause' + | 'Apache-2.0' + | 'LGPL-3.0' + | 'LGPL-2.1' + | 'MPL-2.0' + | 'CDDL-1.0' + | 'EPL-2.0' + | 'AGPL-3.0' + | 'Unlicense'; diff --git a/desci-models/src/automerge.ts b/desci-models/src/automerge.ts new file mode 100644 index 000000000..618f92b79 --- /dev/null +++ b/desci-models/src/automerge.ts @@ -0,0 +1,57 @@ +/** + * This file contains automerge actions for modifying the manifest file. + * This can be used by applications who wish to build a responsive, + * multi-client application for editing the manifest. + * + * @package +*/ + +import { + ResearchObjectComponentTypeMap, + ResearchObjectV1Author, + ResearchObjectV1Component, + ResearchObjectV1Dpid +} from "./ResearchObject"; + +export type ManifestActions = + | { type: 'Add Components'; components: ResearchObjectV1Component[] } + | { type: 'Delete Components'; paths: string[] } + | { type: 'Rename Component'; path: string; fileName: string } + | { type: 'Rename Component Path'; oldPath: string; newPath: string } + | { + type: 'Update Component'; + component: ResearchObjectV1Component; + componentIndex: number; + } + | { + type: 'Assign Component Type'; + component: ResearchObjectV1Component; + componentTypeMap: ResearchObjectComponentTypeMap; + } + | { type: 'Set Drive Clock'; time: string } + // frontend changes to support + | { type: 'Update Title'; title: string } + | { type: 'Update Description'; description: string } + | { type: 'Update License'; defaultLicense: string } + | { type: 'Update ResearchFields'; researchFields: string[] } + | { type: 'Add Component'; component: ResearchObjectV1Component } + | { type: 'Delete Component'; path: string } + | { type: 'Add Contributor'; author: ResearchObjectV1Author } + | { type: 'Remove Contributor'; contributorIndex: number } + | { type: 'Pin Component'; path: string } + | { type: 'UnPin Component'; path: string } + | { + type: 'Update Component'; + component: ResearchObjectV1Component; + componentIndex: number; + } + | { + type: 'Publish Dpid'; + dpid: ResearchObjectV1Dpid; + } + | { type: 'Remove Dpid' } + | + { + type: "Update CoverImage"; + cid: string | undefined; + }; diff --git a/desci-models/src/fields.ts b/desci-models/src/fields.ts new file mode 100644 index 000000000..e2254297d --- /dev/null +++ b/desci-models/src/fields.ts @@ -0,0 +1,437 @@ +export type ResearchField = + | "Food Security" + | "Hydrogeology" + | "Linguistics" + | "Cartography" + | "Forest Management" + | "Plant Nutrition" + | "Civil Engineering" + | "Farming Systems Research" + | "Plant Cultivation" + | "Agriculture" + | "Agronomy" + | "Econometrics" + | "Economics" + | "Geochemistry" + | "Animal Physiology" + | "Plant Physiology" + | "Ergonomics" + | "Animal Nutrition" + | "Agricultural Law" + | "Economic Policy" + | "Fisheries Science" + | "Geodesy" + | "Geophysics" + | "Logistics Engineering" + | "Environmental Science" + | "Horticulture" + | "Hydraulic Engineering" + | "Hydrology" + | "Urban Planning" + | "Animal Breeding" + | "Life Science" + | "Limnology" + | "Mechanical Engineering" + | "Mineralogy" + | "Acoustics" + | "Plant Genetics" + | "Aquaculture" + | "Photogrammetry" + | "Physical Geography" + | "Plant Breeding" + | "Plant Ecology" + | "Public Finance" + | "Remote Sensing" + | "Rural and Agricultural Sociology" + | "Atmospheric Science" + | "Social Anthropology" + | "Social Policy" + | "Soil Science" + | "Water Management" + | "Animal Husbandry" + | "Agricultural Economics" + | "Agricultural Engineering" + | "Knowledge and Information Systems" + | "Agroecology" + | "Phylogeny" + | "Functional Genomics" + | "Ontology and Terminology" + | "Phylogenomics" + | "Pharmacogenomics" + | "Medicinal Chemistry" + | "Informatics" + | "Taxonomy" + | "Botany" + | "Virology" + | "Comparative Genomics" + | "Cheminformatics" + | "Systems Biology" + | "Molecular biology" + | "Biodiversity" + | "Quantitative Genetics" + | "Population Genetics" + | "Embryology" + | "Anatomy" + | "Data Management" + | "Metabolomics" + | "Epigenomics" + | "Metagenomics" + | "Data Security" + | "Biochemistry" + | "Phylogenetics" + | "Biotechnology" + | "Phenomics" + | "Evolutionary Biology" + | "Physiology" + | "Neurobiology" + | "Computational Biology" + | "Transcriptomics" + | "Mathematics" + | "Computer Science" + | "Physics" + | "Molecular Genetics" + | "Drug Discovery" + | "Translational Medicine" + | "Biomaterials" + | "Chemical Biology" + | "Analytical Chemistry" + | "Synthetic Chemistry" + | "Drug Development" + | "Biotherapeutics" + | "Marine Biology" + | "Molecular Medicine" + | "Nutritional Science" + | "Omics" + | "Systems Medicine" + | "Veterinary Medicine" + | "Geriatric Medicine" + | "Pain Medicine" + | "Anaesthesiology" + | "Critical Care Medicine" + | "Dentistry" + | "Otolaryngology" + | "Gender Medicine" + | "Traumatology" + | "Medical Toxicology" + | "Pediatrics" + | "Traditional Medicine" + | "Applied Mathematics" + | "Pure Mathematics" + | "Data Governance" + | "Freshwater Science" + | "Human Genetics" + | "Tropical Medicine" + | "Medical Biotechnology" + | "Personalized Medicine" + | "Microbial Ecology" + | "Metatranscriptomics" + | "Respiratory Medicine" + | "Vascular Surgery" + | "Proteogenomics" + | "Data Quality" + | "Preclinical Studies" + | "Biomedical Science" + | "Clinical Studies" + | "Health Services Research" + | "Psychotherapy" + | "Glycomics" + | "Anthropology" + | "Architecture" + | "Artificial Intelligence" + | "Biology" + | "Biophysics" + | "Chemical Engineering" + | "Chemistry" + | "Clinical Chemistry" + | "Organic Chemistry" + | "Physical Chemistry" + | "Medical Informatics" + | "Culture" + | "Demographics" + | "Dermatology" + | "Developmental Biology" + | "Ecology" + | "Electrophysiology" + | "Engineering Science" + | "Entomology" + | "Epidemiology" + | "Forensic Medicine" + | "Gastroenterology" + | "Genetics" + | "Geography" + | "Gynecology" + | "Hematology" + | "Immunogenetics" + | "Microbiology" + | "Nephrology" + | "Neurology" + | "Neurophysiology" + | "Nuclear Medicine" + | "Obstetrics" + | "Occupational Medicine" + | "Ophthalmology" + | "Pharmacology" + | "Psychiatry" + | "Psychology" + | "Clinical Psychology" + | "Educational Psychology" + | "Psychosomatic Medicine" + | "Public Health" + | "Radiobiology" + | "Radiology" + | "Rheumatology" + | "Social Science" + | "Software Engineering" + | "Statistics" + | "Surgery" + | "Oral Surgery" + | "Thermodynamics" + | "Toxicology" + | "Urology" + | "Zoology" + | "Digital Image Processing" + | "Policy" + | "Oncology" + | "Microbial Genetics" + | "Bioinformatics" + | "Cell Biology" + | "Immunology" + | "Bioengineering" + | "Developmental Neurobiology" + | "Molecular Dynamics" + | "Structural Biology" + | "Pathology" + | "Human Biology" + | "Computational Chemistry" + | "Nanotechnology" + | "Animal Genetics" + | "Enzymology" + | "Clinical Immunology" + | "Database Management" + | "Developmental Psychology" + | "Microbial Physiology" + | "Medical Microbiology" + | "Polymer Chemistry" + | "Health Science" + | "Electrical Engineering" + | "Mechanics" + | "Proteomics" + | "Structural Genomics" + | "Toxicogenomics" + | "Synthesis Chemistry" + | "Drug Metabolism" + | "Philosophy" + | "History" + | "Genomics" + | "Cardiology" + | "Regenerative Medicine" + | "Neuroscience" + | "Data Visualization" + | "Cognitive Neuroscience" + | "Cultural Anthropology" + | "Archaeology" + | "Art" + | "Automation" + | "Criminal Law" + | "Criminology" + | "Geology" + | "Humanities" + | "Jurisprudence" + | "Medicine" + | "Metallurgy" + | "Oceanography" + | "Musculoskeletal Medicine" + | "Paleontology" + | "Parasitology" + | "Pharmacy" + | "Natural Science" + | "Population Dynamics" + | "Primary Health Care" + | "Medical Psychology" + | "Social Medicine" + | "Global Health" + | "Nonlinear Dynamics" + | "Ecosystem Science" + | "Radiation Oncology" + | "Natural History" + | "Theology" + | "Ancient History" + | "Medieval History" + | "Infectious Disease Medicine" + | "Meteorology" + | "Earth Science" + | "Data Mining" + | "Drug Repositioning" + | "Synthetic Biology" + | "Reproductive Health" + | "Transfusion Medicine" + | "Plant Anatomy" + | "Humanities and Social Science" + | "Ancient Cultures" + | "Prehistory" + | "Classical Philology" + | "Egyptology" + | "Early Modern History" + | "Modern History" + | "History of Science" + | "Fine Arts" + | "Art History" + | "Musicology" + | "Media Studies" + | "Applied Linguistics" + | "Historical Linguistics" + | "Literary Studies" + | "Medieval German Literature" + | "German Literature" + | "European Literature" + | "Comparative Literature" + | "Asian Studies" + | "African Studies" + | "Islamic Studies" + | "Religious Studies" + | "Protestant Theology" + | "Roman Catholic Theology" + | "History of Philosophy" + | "Theoretical Philosophy" + | "Practical Philosophy" + | "Social and Behavioural Science" + | "Education Science" + | "Research on Teaching Learning and Training" + | "Professional Socialization" + | "Biological Psychology" + | "Social Psychology" + | "Differential Psychology" + | "Sociological Theory" + | "Empirical Social Research" + | "Communication Science" + | "Political Science" + | "Economic Theory" + | "Business Administration" + | "Economic and Social History" + | "Philosophy of Law" + | "Private Law" + | "Public Law" + | "Inter-organismic Interactions of Plants" + | "Phytochemistry" + | "Plant Cell Biology" + | "Behavioural Biology" + | "Molecular Microbiology" + | "Applied Microbiology" + | "Molecular Infection Biology" + | "Medical Biometry" + | "Pathobiochemistry" + | "Cardiothoracic Surgery" + | "Medical Physics" + | "Molecular Neuroscience" + | "Cellular Neuroscience" + | "Systemic Neuroscience" + | "Comparative Neurobiology" + | "Molecular Neurology" + | "Biological Psychiatry" + | "Phytomedicine" + | "Clinical Veterinary Medicine" + | "Molecular Chemistry" + | "Inorganic Molecular Chemistry" + | "Organic Molecular Chemistry" + | "Solid-State Chemistry" + | "Molecular Physical Chemistry" + | "Theoretical Chemistry" + | "Biomimetic Chemistry" + | "Food Chemistry" + | "Polymer Research" + | "Polymer Physics" + | "Condensed Matter Physics" + | "Experimental Condensed Matter Physics" + | "Theoretical Condensed Matter Physics" + | "Atomic Molecular Optical and Plasma Physics" + | "Particles Nuclei and Fields" + | "Soft Matter Physics" + | "Astrophysics and Astronomy" + | "Geoinformatics" + | "Human Geography" + | "Water Research" + | "Industrial Engineering" + | "Production Technology" + | "Metal-Cutting Manufacturing Engineering" + | "Primary Shaping Technology" + | "Plastics Engineering" + | "Thermal Engineering" + | "Process Engineering" + | "Technical Chemistry" + | "Mechanical Process Engineering" + | "Biological Process Engineering" + | "Thermal Technology" + | "Energy Engineering" + | "Fluid Mechanics" + | "Materials Engineering" + | "Thermomechanical Processing" + | "Sintering" + | "Composite Materials" + | "Mechanical Behaviour of Construction Materials" + | "Coating and Surface Technology" + | "Materials Science" + | "Functional Materials Research" + | "Microstructural Mechanical Properties of Materials" + | "Materials Structuring and Functionalisation" + | "Systems Engineering" + | "Robotics" + | "Measurement Systems" + | "Microsystems" + | "Human-Machine Systems Engineering" + | "Component Engineering" + | "Telecommunication Engineering" + | "Power Engineering" + | "Theoretical Computer Science" + | "Computer Architecture" + | "Construction Engineering" + | "Construction History" + | "Transportation Planning" + | "Building Engineering Physics" + | "Structural Engineering" + | "Applied Mechanics" + | "Geotechnics" + | "Maritime Engineering" + | "Aerospace Engineering" + | "Building Informatics" + | "Landscape Planning" + | "Sustainable Building Technology" + | "Building Design" + | "Materials Informatics" + | "Neurogenetics" + | "Computational Neuroscience" + | "Mathematical Psychology" + | "Industrial and Organisational Psychology" + | "Surface Science" + | "Area Studies" + | "American Studies" + | "Oceania Studies" + | "Arabian Studies" + | "Jewish Studies" + | "Diabetology" + | "Theatre Studies" + | "Data Integration" + | "Food Process Engineering" + | "Statistical Physics" + | "Angiology" + | "Legal History" + | "American Literature" + | "Cultural Studies" + | "Ancient Near Eastern Studies" + | "Orthopedic Surgery" + | "Community Care" + | "Epigenetics" + | "Medicines Research and Development" + | "Safety Science" + | "Endocrinology" + | "Medical Virology" + | "Subject Agnostic" + | "Scientific Instrument Design" + | "Metataxonomics" + | "Metaproteomics" + | "Selenography" + | "Cosmology" + | "Electromagnetism" + | "Gemology" + | "Bathymetry" + | "Hydrography"; + diff --git a/desci-models/src/index.ts b/desci-models/src/index.ts index acd3254ef..1a66f4338 100644 --- a/desci-models/src/index.ts +++ b/desci-models/src/index.ts @@ -3,3 +3,5 @@ export * from './constants'; export * from './transformers/index'; export * from './trees/treeTools'; export * from './trees/treeTypes'; +export * from './automerge'; +export * from './fields'; diff --git a/desci-models/src/trees/treeTools.ts b/desci-models/src/trees/treeTools.ts index f90439138..58664c322 100644 --- a/desci-models/src/trees/treeTools.ts +++ b/desci-models/src/trees/treeTools.ts @@ -149,7 +149,7 @@ export function convertIpfsTreeToDriveObjectTree( if (branch.external) branch.accessStatus = AccessStatus.EXTERNAL; - branch.metadata = inheritMetadata(branch.path, pathToCompMap); + branch.metadata = inheritMetadata(branch.path, pathToCompMap) as DriveMetadata; branch.starred = component?.starred || false; // branch.lastModified = formatDbDate(branch.lastModified) || tempDate; // LEAVE THIS TO FRONTEND if (branch.contains && branch.contains.length && branch.type === FileType.DIR) { @@ -292,8 +292,8 @@ export function inheritMetadata(path: DrivePath, pathToCompMap: Record { @@ -390,7 +390,7 @@ export function createVirtualDrive({ contains: contains, lastModified: lastModified || tempDate, accessStatus: accessStatus || AccessStatus.PRIVATE, - metadata: metadata || {}, + metadata: metadata || {} as DriveMetadata, cid: cid || '', type: type || FileType.DIR, parent: parent || null, diff --git a/desci-repo/package.json b/desci-repo/package.json index 117760697..88d744f7e 100644 --- a/desci-repo/package.json +++ b/desci-repo/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/desci-repo", - "version": "0.0.1", + "version": "0.0.2", "description": "", "type": "module", "engines": { @@ -68,7 +68,7 @@ "typescript": "5.1.6" }, "dependencies": { - "@desci-labs/desci-models": "^0.2.1", + "@desci-labs/desci-models": "^0.2.3-rc1", "@sentry/node": "^7.84.0", "@sentry/tracing": "^7.84.0", "axios": "^1.6.2", diff --git a/desci-repo/scripts/be-node-dev.sh b/desci-repo/scripts/be-node-dev.sh deleted file mode 100755 index 7b36a9a34..000000000 --- a/desci-repo/scripts/be-node-dev.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -echo "Install bash and execute 'wait-for-it.sh' script" -apt-get add --update bash - -./desci-repo/scripts/wait-for-it.sh $PG_HOST:5432 --timeout=5 --strict -- echo "postgres up and running" - -# npm run migration:run -# npm run seed:run -chmod -R 777 /app/node_modules/.prisma -chmod -R 777 /app/node_modules/prisma -# chmod -R 777 /root/ && chown node:node /root/.cache/prisma/master/2920a97877e12e055c1333079b8d19cee7f33826/debian-openssl-1.1.x/libquery-engine # for prisma studio -# cd desci-repo -yarn -yarn dev diff --git a/desci-repo/src/controllers/nodes/documents.ts b/desci-repo/src/controllers/nodes/documents.ts index 0037cd44a..3a70577eb 100644 --- a/desci-repo/src/controllers/nodes/documents.ts +++ b/desci-repo/src/controllers/nodes/documents.ts @@ -4,12 +4,13 @@ import { logger } from '../../logger.js'; import { AutomergeUrl, DocumentId } from '@automerge/automerge-repo'; import { RequestWithNode } from '../../middleware/guard.js'; import { backendRepo } from '../../repo.js'; -import { ManifestActions, getAutomergeUrl, getDocumentUpdater } from '../../services/manifestRepo.js'; +import { getAutomergeUrl, getDocumentUpdater } from '../../services/manifestRepo.js'; import { findNodeByUuid, query } from '../../db/index.js'; import { Doc } from '@automerge/automerge'; import { ZodError } from 'zod'; import { actionsSchema } from '../../validators/schema.js'; import { ensureUuidEndsWithDot } from './utils.js'; +import { ManifestActions } from '@desci-labs/desci-models'; export const createNodeDocument = async function (req: Request, res: Response) { logger.info('START [CreateNodeDocument]', req.body, req.params); diff --git a/desci-repo/src/services/manifestRepo.ts b/desci-repo/src/services/manifestRepo.ts index c65cc4255..7f8ae945a 100644 --- a/desci-repo/src/services/manifestRepo.ts +++ b/desci-repo/src/services/manifestRepo.ts @@ -7,10 +7,10 @@ import { PdfComponent, ResearchObjectComponentType, ResearchObjectComponentTypeMap, - ResearchObjectV1Author, ResearchObjectV1Component, ResearchObjectV1Dpid, isResearchObjectComponentTypeMap, + ManifestActions, } from '@desci-labs/desci-models'; import isEqual from 'deep-equal'; @@ -31,42 +31,6 @@ export function assertNever(value: never) { throw Error('Not Possible'); } -export type ManifestActions = - | { type: 'Add Components'; components: ResearchObjectV1Component[] } - | { type: 'Delete Components'; paths: string[] } - | { type: 'Rename Component'; path: string; fileName: string } - | { type: 'Rename Component Path'; oldPath: string; newPath: string } - | { - type: 'Update Component'; - component: ResearchObjectV1Component; - componentIndex: number; - } - | { - type: 'Assign Component Type'; - component: ResearchObjectV1Component; - componentTypeMap: ResearchObjectComponentTypeMap; - } - | { type: 'Set Drive Clock'; time: string } - // frontend changes to support - | { type: 'Update Title'; title: string } - | { type: 'Update Description'; description: string } - | { type: 'Update License'; defaultLicense: string } - | { type: 'Update ResearchFields'; researchFields: string[] } - | { type: 'Add Component'; component: ResearchObjectV1Component } - | { type: 'Delete Component'; path: string } - | { type: 'Add Contributor'; author: ResearchObjectV1Author } - | { type: 'Remove Contributor'; contributorIndex: number } - | { type: 'Pin Component'; path: string } - | { type: 'UnPin Component'; path: string } - | { - type: 'Update Component'; - component: ResearchObjectV1Component; - componentIndex: number; - } - | { - type: 'Publish Dpid'; - dpid: ResearchObjectV1Dpid; - }; export const getDocumentUpdater = (documentId: DocumentId) => { const automergeUrl = getAutomergeUrl(documentId); @@ -253,6 +217,14 @@ export const getDocumentUpdater = (documentId: DocumentId) => { { time: Date.now(), message: action.type }, ); break; + case "Remove Dpid": + handle.change( + (document) => { + removeDpid(document); + }, + { time: Date.now(), message: action.type } + ); + break; case 'Pin Component': let componentIndex = latestDocument?.manifest.components.findIndex((c) => c.payload?.path === action.path); if (componentIndex && componentIndex != -1) { @@ -292,6 +264,18 @@ export const getDocumentUpdater = (documentId: DocumentId) => { { time: Date.now(), message: action.type }, ); break; + case 'Update CoverImage': + handle.change( + (document) => { + if (!action.cid) { + delete document.manifest.coverImage; + } else { + document.manifest.coverImage = action.cid; + } + }, + { time: Date.now(), message: action.type }, + ); + break; default: assertNever(action); } @@ -309,8 +293,10 @@ const updateComponentTypeMap = ( doc: Doc, path: string, compTypeMap: ResearchObjectComponentTypeMap, -) => { - const currentComponent = doc.manifest.components.find((c) => c.payload?.path === path); +): void => { + const currentComponent = doc.manifest.components.find( + (c) => c.payload?.path === path + ); if (!currentComponent) return; const existingType = currentComponent.type; @@ -330,30 +316,53 @@ const updateComponentTypeMap = ( }); }; -const addManifestComponent = (doc: Doc, component: ResearchObjectV1Component) => { +const addManifestComponent = ( + doc: Doc, + component: ResearchObjectV1Component +): void => { doc.manifest.components.push(component); }; -const deleteComponent = (doc: Doc, path: string) => { - const deleteIdx = doc.manifest.components.findIndex((component) => component?.payload?.path === path); +const deleteComponent = ( + doc: Doc, + path: string +): void => { + const deleteIdx = doc.manifest.components.findIndex( + (component) => component?.payload?.path === path + ); if (deleteIdx !== -1) doc.manifest.components.splice(deleteIdx, 1); }; -const togglePin = (doc: Doc, componentIndex: number, pin: boolean) => { +const togglePin = ( + doc: Doc, + componentIndex: number, pin: boolean +): void => { const currentComponent = doc.manifest.components[componentIndex]; currentComponent.starred = pin; }; -const addDpid = (doc: Doc, dpid: ResearchObjectV1Dpid) => { +const addDpid = ( + doc: Doc, + dpid: ResearchObjectV1Dpid +): void => { if (doc.manifest.dpid) return; doc.manifest.dpid = dpid; }; +/** In an unavilable optimistic dPID was written to the manifest, it must + * be removed again. +*/ +const removeDpid = ( + doc: Doc +): void => { + delete doc.manifest.dpid; +}; + const updateManifestComponent = ( doc: Doc, component: ResearchObjectV1Component, componentIndex: number, -) => { +): void => { if (componentIndex === -1 || componentIndex === undefined) return; const currentComponent = doc.manifest.components[componentIndex]; @@ -406,7 +415,9 @@ const updateManifestComponent = ( } }; -const getTypeDefault = (value: unknown) => { +type TypeInitialisers = {} | '' | 0 | []; + +const getTypeDefault = (value: unknown): TypeInitialisers => { if (Array.isArray(value)) return []; if (typeof value === 'string') return ''; if (typeof value === 'number') return 0; diff --git a/desci-repo/src/validators/schema.ts b/desci-repo/src/validators/schema.ts index 3cf4d9b09..e80528833 100644 --- a/desci-repo/src/validators/schema.ts +++ b/desci-repo/src/validators/schema.ts @@ -5,6 +5,7 @@ import { ResearchObjectV1Component, ResearchObjectV1Dpid, ResearchObjectV1Organization, + ManifestActions, } from '@desci-labs/desci-models'; const researchObject = z @@ -59,18 +60,23 @@ const componentSchema: z.ZodType = z }) .passthrough(); +type Action = ManifestActions["type"]; + export const actionsSchema = z.array( z.discriminatedUnion('type', [ - z.object({ type: z.literal('Publish dPID'), dpid: dpid }), - z.object({ type: z.literal('Update Title'), title: z.string() }), - z.object({ type: z.literal('Update Description'), description: z.string() }), - z.object({ type: z.literal('Update License'), defaultLicense: z.string() }), - z.object({ type: z.literal('Update ResearchFields'), researchFields: z.array(z.string()) }), - z.object({ type: z.literal('Add Component'), component: componentSchema }), - z.object({ type: z.literal('Delete Component'), path: z.string() }), - z.object({ type: z.literal('Add Contributor'), author: contributor }), - z.object({ type: z.literal('Remove Contributor'), contributorIndex: z.number() }), - z.object({ type: z.literal('Pin Component'), componentIndex: z.number() }), - z.object({ type: z.literal('UnPin Component'), componentIndex: z.number() }), + z.object({ type: z.literal('Publish Dpid'), dpid: dpid }), + z.object({ type: z.literal('Remove Dpid')}), + z.object({ type: z.literal('Update Title'), title: z.string() }), + z.object({ type: z.literal('Update Description'), description: z.string() }), + z.object({ type: z.literal('Update License'), defaultLicense: z.string() }), + z.object({ type: z.literal('Update ResearchFields'), researchFields: z.array(z.string()) }), + z.object({ type: z.literal('Add Component'), component: componentSchema }), + z.object({ type: z.literal('Delete Component'), path: z.string() }), + z.object({ type: z.literal('Update Component'), component: componentSchema }), + z.object({ type: z.literal('Add Contributor'), author: contributor }), + z.object({ type: z.literal('Remove Contributor'), contributorIndex: z.number() }), + z.object({ type: z.literal('Pin Component'), componentIndex: z.number() }), + z.object({ type: z.literal('UnPin Component'), componentIndex: z.number() }), + z.object({ type: z.literal('Update CoverImage'), cid: z.string().optional() }), ]), ); diff --git a/desci-repo/src/validators/test/schema.spec.ts b/desci-repo/src/validators/test/schema.spec.ts index c8fc08ca5..58ea7a8a8 100644 --- a/desci-repo/src/validators/test/schema.spec.ts +++ b/desci-repo/src/validators/test/schema.spec.ts @@ -42,24 +42,31 @@ describe('ManifestActions Schema', () => { describe('Publish Dpid', () => { it('should validate dPID action', () => { - const validated = actionsSchema.safeParse([{ type: 'Publish dPID', dpid: { prefix: 'beta', id: '1' } }]); + const validated = actionsSchema.safeParse([{ type: 'Publish Dpid', dpid: { prefix: 'beta', id: '1' } }]); console.log(validated); expect(validated.success).to.be.true; }); it('should reject invalid dPID action data', () => { - const validated = actionsSchema.safeParse([{ type: 'Publish dPID', dpid: { prefix: 'beta', ids: '1' } }]); + const validated = actionsSchema.safeParse([{ type: 'Publish Dpid', dpid: { prefix: 'beta', ids: '1' } }]); console.log(validated); expect(validated.success).to.be.false; }); it('should reject invalid dPID action', () => { - const validated = actionsSchema.safeParse([{ type: 'Publish dPID', invalidKey: '' }]); + const validated = actionsSchema.safeParse([{ type: 'Publish Dpid', invalidKey: '' }]); console.log(validated); expect(validated.success).to.be.false; }); }); + describe('Remove Dpid', () => { + it('should validate dPID action', () => { + const validated = actionsSchema.safeParse([{ type: 'Remove Dpid' }]); + expect(validated.success).to.be.true; + }); + }); + describe('Validate Description', () => { it('should validate description action', () => { const validated = actionsSchema.safeParse([{ type: 'Update Description', description: 'No title' }]); @@ -126,7 +133,11 @@ describe('ManifestActions Schema', () => { starred: false, type: ResearchObjectComponentType.CODE, subtype: ResearchObjectComponentCodeSubtype.SOFTWARE_PACKAGE, - payload: { path: 'root/external links/', url: 'https://google.com', language: 'typescript' }, + payload: { + path: 'root/external links/', + cid: 'bafybeicrsddlvfbbo5s3upvjbtb5flc73iupxfy2kf3rv43kkbvegbqbwq', + language: 'typescript' + }, }; it('should validate Add Component action', async () => { @@ -174,7 +185,11 @@ describe('ManifestActions Schema', () => { starred: false, type: ResearchObjectComponentType.CODE, subtype: ResearchObjectComponentCodeSubtype.SOFTWARE_PACKAGE, - payload: { path: 'root/external links/', url: 'https://google.com', language: 'typescript' }, + payload: { + path: 'root/external links/', + cid: 'bafybeicrsddlvfbbo5s3upvjbtb5flc73iupxfy2kf3rv43kkbvegbqbwq', + language: 'typescript' + }, }; const validated = await actionsSchema.safeParseAsync([{ type: 'Add Component', component: invalidComponent }]); diff --git a/desci-repo/yarn.lock b/desci-repo/yarn.lock index 1131e392f..cd6974ac8 100644 --- a/desci-repo/yarn.lock +++ b/desci-repo/yarn.lock @@ -131,10 +131,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@desci-labs/desci-models@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@desci-labs/desci-models/-/desci-models-0.2.1.tgz#b13ecbd4ba8ef69e1b6083d678f3257482f4bc70" - integrity sha512-rJL7NxgeGp4hhegiqAFLExnTyUJM1Bmuemjv/oon4DEyF2feI49OsPIaxY+SQaEQawFfE8wxwJHW76iIOZduog== +"@desci-labs/desci-models@^0.2.3-rc1": + version "0.2.3-rc1" + resolved "https://registry.yarnpkg.com/@desci-labs/desci-models/-/desci-models-0.2.3-rc1.tgz#9583455b59966d9e50bae1c2e2c6701e529e3990" + integrity sha512-FW74CkgfZTNhky0Q6Sk3lCoBZ+Yl5D4KVTTLBv/NG+e8qH9jyT6DVbiXvaThQWZQNulFXJg2UFZm73AVInu3wA== dependencies: jsonld "^8.1.1" schema-dts "^1.1.2" diff --git a/desci-server/package.json b/desci-server/package.json index 1738b90d4..29fd95b4e 100755 --- a/desci-server/package.json +++ b/desci-server/package.json @@ -1,6 +1,6 @@ { "name": "@desci-labs/desci-server", - "version": "0.3.3", + "version": "0.3.4", "description": "Manage DeSci Nodes state: users, nodes orchestration, decentralized storage, blockchain resolvers", "engines": { "node": ">=16.14" @@ -36,7 +36,7 @@ "prettier": "prettier --config .prettierrc --write './**/*.{ts,js,css,scss,json,md}'", "test:destructive": "NODE_OPTIONS=\"--experimental-specifier-resolution=node --loader=ts-node/esm\" mocha --colors --require ts-node/register 'test/integration/**/*.test.ts' --timeout 20000 --exit", "test:destructive:debug": "yarn test:destructive --inspect=0.0.0.0:9227", - "test": "yarn docker:test && docker-compose --file ../docker-compose.test.yml --compatibility down", + "test": "yarn docker:test; docker-compose --file ../docker-compose.test.yml --compatibility down", "coverage:destructive": "nyc --all --parser-plugins='[\"importAssertions\"]' -r lcov -e .ts -x \"*.test.ts\" npm run test:destructive", "coverage:destructive:debug": "nyc --all --parser-plugins='[\"importAssertions\"]' -r lcov -e .ts -x \"*.test.ts\" npm run test:destructive:debug", "commit": "git-cz", diff --git a/desci-server/src/controllers/data/update.ts b/desci-server/src/controllers/data/update.ts index 0718beb0b..235943183 100644 --- a/desci-server/src/controllers/data/update.ts +++ b/desci-server/src/controllers/data/update.ts @@ -6,7 +6,6 @@ import { logger as parentLogger } from '../../logger.js'; import { RequestWithNode } from '../../middleware/authorisation.js'; import { processExternalUrlDataToIpfs } from '../../services/data/externalUrlProcessing.js'; import { processNewFolder, processS3DataToIpfs } from '../../services/data/processing.js'; -import { IpfsPinnedResult } from '../../services/ipfs.js'; import { arrayXor, ensureUuidEndsWithDot } from '../../utils.js'; export interface UpdateResponse { status?: number; @@ -59,7 +58,6 @@ export const update = async (req: RequestWithNode, res: Response 0) return res.status(400).json({ error: 'EXTERNAL CID PASSED IN, use externalCid update route instead' }); @@ -80,8 +78,6 @@ export const update = async (req: RequestWithNode, res: Response) => { +export type ExternalCid = { + cid: string, + name: string, +}; + +export type ExternalCidPayload = { + uuid: string, + contextPath: string, + externalCids: ExternalCid[], + componentType: ResearchObjectComponentType, + componentSubtype: ResearchObjectComponentSubtypes, +}; + +/** + * Add an external UnixFS tree to the drive, without actually getting the files, + * by fetching the leafless DAG and pinning it. +*/ +export const updateExternalCid = async ( + req: Request, + res: Response +) => { const owner = (req as any).user as User; - const { uuid, contextPath, componentType, componentSubtype } = req.body; - const { externalCids } = req.body; + const { + uuid, + contextPath, + externalCids, + componentType, + componentSubtype + } = req.body; const logger = parentLogger.child({ // id: req.id, module: 'DATA::UpdateExternalCidController', userId: owner.id, - uuid: uuid, - contextPath: contextPath, - componentType: componentType, + uuid, + contextPath, + componentType, componentSubtype, externalCids, }); logger.trace(`[UPDATE DATASET] Updating in context: ${contextPath}`); - if (uuid === undefined || contextPath === undefined || externalCids === undefined) + if (uuid === undefined || contextPath === undefined || !Array.isArray(externalCids)) return res.status(400).json({ error: 'uuid, manifest, contextPath required, externalCids required' }); //validate requester owns the node @@ -35,6 +61,7 @@ export const updateExternalCid = async (req: Request, res: Response = {}; - if (externalCids && externalCids.length) { - try { - externalCids = externalCids.map((extCid) => ({ ...extCid, cid: convertToCidV1(extCid.cid) })); - for (const extCid of externalCids) { - const { isDirectory, size } = await getExternalCidSizeAndType(extCid.cid); - if (size !== undefined && isDirectory !== undefined) { - cidTypesSizes[extCid.cid] = { size, isDirectory }; - } else { - throw new Error(`Failed to get size and type of external CID: ${extCid}`); - } + try { + externalCids = externalCids.map( + (extCid) => ({ ...extCid, cid: convertToCidV1(extCid.cid) }) + ); + for (const extCid of externalCids) { + const { isDirectory, size } = await getExternalCidSizeAndType(extCid.cid); + if (size !== undefined && isDirectory !== undefined) { + cidTypesSizes[extCid.cid] = { size, isDirectory }; + } else { + throw new Error(`Failed to get size and type of external CID: ${extCid}`); } - } catch (e: any) { - logger.warn(`[UPDATE DAG] External CID Method: ${e}`); - throw createIpfsUnresolvableError(`Failed to resolve external CID`); } + } catch (e: any) { + logger.warn(`[UPDATE DAG] External CID Method: ${e}`); + throw createIpfsUnresolvableError(`Failed to resolve external CID`); } /** @@ -237,7 +236,7 @@ export async function processExternalCidDataToIpfs({ } catch (error) { // DB status to failed // Socket emit to client - logger.error({ error }, 'Error processing S3 data to IPFS'); + logger.error({ error }, 'Error processing external CID to IPFS'); const controlledErr = 'type' in error ? error : createUnhandledError(error); return { ok: false, value: controlledErr }; } diff --git a/desci-server/src/services/data/externalUrlProcessing.ts b/desci-server/src/services/data/externalUrlProcessing.ts index 9d4621c22..c76219cfd 100644 --- a/desci-server/src/services/data/externalUrlProcessing.ts +++ b/desci-server/src/services/data/externalUrlProcessing.ts @@ -182,7 +182,7 @@ export async function processExternalUrlDataToIpfs({ const flatUploadedTree = recursiveFlattenTree(uploadedTree); const parsedContextPath = isCodeRepo ? contextPath + '/' + externalUrl.path : contextPath; - const draftNodeTreeEntries: Prisma.DraftNodeTreeCreateManyInput[] = await ipfsDagToDraftNodeTreeEntries({ + const draftNodeTreeEntries: Prisma.DraftNodeTreeCreateManyInput[] = ipfsDagToDraftNodeTreeEntries({ ipfsTree: flatUploadedTree, node, user, @@ -196,7 +196,7 @@ export async function processExternalUrlDataToIpfs({ logger.info(`Successfully added ${addedEntries.count} entries to DraftNodeTree`); // debugger; - const { filesToAddToDag, filteredFiles } = filterFirstNestings(pinResult); + const { filteredFiles } = filterFirstNestings(pinResult); /** * Repull latest node, to avoid stale manifest that may of been modified since last pull diff --git a/desci-server/src/services/data/processing.ts b/desci-server/src/services/data/processing.ts index d1f8dcddb..0b1eba75d 100644 --- a/desci-server/src/services/data/processing.ts +++ b/desci-server/src/services/data/processing.ts @@ -9,7 +9,6 @@ import { ResearchObjectV1, extractExtension, isNodeRoot, - isResearchObjectComponentTypeMap, neutralizePath, recursiveFlattenTree, } from '@desci-labs/desci-models'; @@ -33,7 +32,7 @@ import { } from '../../services/ipfs.js'; import { fetchFileStreamFromS3, isS3Configured } from '../../services/s3.js'; import { ResearchObjectDocument } from '../../types/documents.js'; -import { prepareDataRefs, prepareDataRefsForDraftTrees } from '../../utils/dataRefTools.js'; +import { prepareDataRefsForDraftTrees } from '../../utils/dataRefTools.js'; import { DRAFT_CID, DRAFT_DIR_CID, ipfsDagToDraftNodeTreeEntries } from '../../utils/draftTreeUtils.js'; import { ExtensionDataTypeMap, @@ -42,7 +41,6 @@ import { generateManifestPathsToDbTypeMap, getTreeAndFill, inheritComponentType, - urlOrCid, } from '../../utils/driveUtils.js'; import { EXTENSION_MAP } from '../../utils/extensions.js'; import { cleanupManifestUrl } from '../../utils/manifest.js'; @@ -86,8 +84,6 @@ export async function processS3DataToIpfs({ user, node, contextPath, - componentType, - componentSubtype, }: ProcessS3DataToIpfsParams): Promise> { let pinResult: IpfsPinnedResult[] = []; let manifestPathsToTypesPrune: Record = {}; @@ -110,7 +106,7 @@ export async function processS3DataToIpfs({ const root = pinResult[pinResult.length - 1]; const rootTree = (await getDirectoryTree(root.cid, {})) as RecursiveLsResult[]; // debugger; - const draftNodeTreeEntries: Prisma.DraftNodeTreeCreateManyInput[] = await ipfsDagToDraftNodeTreeEntries({ + const draftNodeTreeEntries: Prisma.DraftNodeTreeCreateManyInput[] = ipfsDagToDraftNodeTreeEntries({ ipfsTree: rootTree, node, user, @@ -697,7 +693,7 @@ export async function assignTypeMapInManifest( name: compName, type: compTypeMap, payload: { - ...urlOrCid(contextPathNewCid, ResearchObjectComponentType.DATA), + cid: contextPathNewCid, path: contextPath, }, }; diff --git a/desci-server/src/services/ipfs.ts b/desci-server/src/services/ipfs.ts index c25478bf3..d8a56b5b0 100644 --- a/desci-server/src/services/ipfs.ts +++ b/desci-server/src/services/ipfs.ts @@ -130,26 +130,29 @@ export const downloadFilesAndMakeManifest = async ({ title, defaultLicense, pdf, }, }; - const pdfComponents = (await pdfHashes).map((d: UrlWithCid) => { + const pdfComponents = pdfHashes.map((d: UrlWithCid) => { + const cid = makePublic([d])[0].val; const objectComponent: PdfComponent = { id: d.cid, name: 'Research Report', type: ResearchObjectComponentType.PDF, payload: { - url: makePublic([d])[0].val, + cid, annotations: [], + path: DRIVE_NODE_ROOT_PATH + '/Research Report', }, }; return objectComponent; }); - const codeComponents = (await codeHashes).map((d: UrlWithCid) => { + const codeComponents = codeHashes.map((d: UrlWithCid) => { const objectComponent: CodeComponent = { id: d.cid, name: 'Code', type: ResearchObjectComponentType.CODE, payload: { language: 'bash', - code: makePublic([d])[0].val, + cid: makePublic([d])[0].val, + path: DRIVE_NODE_ROOT_PATH + '/Code', }, }; return objectComponent; @@ -227,28 +230,30 @@ export const downloadFile = async (url: string, key: string): Promise => { if (url.indexOf('github.com') > -1) { const file = await processUrls('code', getUrlsFromParam([url]))[0]; - const component: CodeComponent = { id: file.cid, name: 'Code', type: ResearchObjectComponentType.CODE, payload: { - url: makePublic([file])[0].val, + cid: makePublic([file])[0].val, externalUrl: await getGithubExternalUrl(url), + path: DRIVE_NODE_ROOT_PATH + '/Code', }, }; return { component, file }; } const file = await processUrls('pdf', getUrlsFromParam([url]))[0]; - + const cid = makePublic([file])[0].val; const component: PdfComponent = { id: file.cid, name: 'Research Report', type: ResearchObjectComponentType.PDF, payload: { - url: makePublic([file])[0].val, + url: cid, + cid, annotations: [], + path: DRIVE_NODE_ROOT_PATH + '/Research Report', }, }; diff --git a/desci-server/src/services/manifestRepo.ts b/desci-server/src/services/manifestRepo.ts index 56108ea61..4afc6ab50 100644 --- a/desci-server/src/services/manifestRepo.ts +++ b/desci-server/src/services/manifestRepo.ts @@ -1,18 +1,6 @@ -import { Doc, getHeads } from '@automerge/automerge'; import { AutomergeUrl, DocumentId } from '@automerge/automerge-repo'; -import { - ResearchObjectComponentTypeMap, - ResearchObjectV1Author, - ResearchObjectV1Component, - ResearchObjectV1Dpid, - isResearchObjectComponentTypeMap, -} from '@desci-labs/desci-models'; import { Node } from '@prisma/client'; - import { logger } from '../logger.js'; -import { backendRepo } from '../repo.js'; -import { ResearchObjectDocument } from '../types/documents.js'; - import { getManifestFromNode } from './data/processing.js'; import repoService from './repoService.js'; @@ -35,80 +23,4 @@ export const getLatestManifestFromNode = async (node: Node) => { export function assertNever(value: never) { console.error('Unknown value', value); throw Error('Not Possible'); -} - -export type ManifestActions = - | { type: 'Add Components'; components: ResearchObjectV1Component[] } - | { type: 'Delete Components'; paths: string[] } - | { type: 'Rename Component'; path: string; fileName: string } - | { type: 'Rename Component Path'; oldPath: string; newPath: string } - | { - type: 'Update Component'; - component: ResearchObjectV1Component; - componentIndex: number; - } - | { - type: 'Assign Component Type'; - component: ResearchObjectV1Component; - componentTypeMap: ResearchObjectComponentTypeMap; - } - | { type: 'Set Drive Clock'; time: string } - // frontend changes to support - | { type: 'Update Title'; title: string } - | { type: 'Update Description'; description: string } - | { type: 'Update License'; defaultLicense: string } - | { type: 'Update ResearchFields'; researchFields: string[] } - | { type: 'Add Component'; component: ResearchObjectV1Component } - | { type: 'Delete Component'; path: string } - | { type: 'Add Contributor'; author: ResearchObjectV1Author } - | { type: 'Remove Contributor'; contributorIndex: number } - | { type: 'Pin Component'; path: string } - | { type: 'UnPin Component'; path: string } - | { - type: 'Update Component'; - component: ResearchObjectV1Component; - componentIndex: number; - } - | { - type: 'Publish Dpid'; - dpid: ResearchObjectV1Dpid; - }; - -const updateManifestComponent = ( - doc: Doc, - component: ResearchObjectV1Component, - componentIndex: number, -) => { - if (componentIndex === -1 || componentIndex === undefined) return; - - const currentComponent = doc.manifest.components[componentIndex]; - currentComponent.type = component?.type || currentComponent.type; - - if (!currentComponent.starred) currentComponent.starred = false; - currentComponent.starred = component?.starred || currentComponent.starred; -}; - -const updateComponentTypeMap = ( - doc: Doc, - path: string, - compTypeMap: ResearchObjectComponentTypeMap, -) => { - const currentComponent = doc.manifest.components.find((c) => c.payload?.path === path); - if (!currentComponent) return; - - const existingType = currentComponent.type; - if (!isResearchObjectComponentTypeMap(existingType)) { - currentComponent.type = {}; - } - - const componentType = currentComponent.type; - const update = { - ...(isResearchObjectComponentTypeMap(existingType) && { ...existingType }), - ...compTypeMap, - }; - - Object.entries(update).forEach(([key, value]) => { - if (!componentType[key]) componentType[key] = ''; - componentType[key] = value; - }); }; diff --git a/desci-server/src/services/nodeManager.ts b/desci-server/src/services/nodeManager.ts index 76d0097e7..4a83f629f 100644 --- a/desci-server/src/services/nodeManager.ts +++ b/desci-server/src/services/nodeManager.ts @@ -9,7 +9,7 @@ import { uploadDataToEstuary } from '../services/estuary.js'; import { getIndexedResearchObjects } from '../theGraph.js'; import { generateDataReferences } from '../utils/dataRefTools.js'; import { cleanupManifestUrl } from '../utils/manifest.js'; -import { hexToCid, randomUUID64, asyncMap } from '../utils.js'; +import { hexToCid, randomUUID64, asyncMap, ensureUuidEndsWithDot } from '../utils.js'; import { addBufferToIpfs, downloadFilesAndMakeManifest, getSizeForCid, resolveIpfsData } from './ipfs.js'; @@ -56,7 +56,7 @@ export const createNodeDraftBlank = async ( export const setCeramicStream = async (uuid: string, ceramicStream: string) => { logger.debug({ fn: 'setCeramicStream', uuid, ceramicStream }, 'node::setCeramicStream'); - uuid = uuid.endsWith('.') ? uuid : uuid + '.'; + uuid = ensureUuidEndsWithDot(uuid); return await prisma.node.update({ data: { ceramicStream, diff --git a/desci-server/src/services/repoService.ts b/desci-server/src/services/repoService.ts index 0cec60b0f..1affe3e1d 100644 --- a/desci-server/src/services/repoService.ts +++ b/desci-server/src/services/repoService.ts @@ -1,11 +1,11 @@ import { DocumentId } from '@automerge/automerge-repo'; -import { ResearchObjectV1 } from '@desci-labs/desci-models'; +import { ResearchObjectV1, ManifestActions } from '@desci-labs/desci-models'; import axios, { AxiosInstance } from 'axios'; import { logger as parentLogger } from '../logger.js'; import { ResearchObjectDocument } from '../types/documents.js'; -import { ManifestActions, NodeUuid } from './manifestRepo.js'; +import { NodeUuid } from './manifestRepo.js'; const logger = parentLogger.child({ module: 'Repo Service' }); diff --git a/desci-server/src/utils/draftTreeUtils.ts b/desci-server/src/utils/draftTreeUtils.ts index 79a36acff..b1483113a 100644 --- a/desci-server/src/utils/draftTreeUtils.ts +++ b/desci-server/src/utils/draftTreeUtils.ts @@ -47,7 +47,6 @@ interface IpfsDagToDraftNodeTreeEntriesParams { export function ipfsDagToDraftNodeTreeEntries({ ipfsTree, node, - user, timestampMap, contextPath, }: IpfsDagToDraftNodeTreeEntriesParams): Prisma.DraftNodeTreeCreateManyInput[] { diff --git a/desci-server/src/utils/driveUtils.ts b/desci-server/src/utils/driveUtils.ts index de0c2148a..b42152929 100644 --- a/desci-server/src/utils/driveUtils.ts +++ b/desci-server/src/utils/driveUtils.ts @@ -14,6 +14,7 @@ import { fillIpfsTree, isNodeRoot, isResearchObjectComponentTypeMap, + ManifestActions, } from '@desci-labs/desci-models'; import { DataReference, DataType, Node } from '@prisma/client'; @@ -22,7 +23,7 @@ import { DataReferenceSrc } from '../controllers/data/retrieve.js'; import { logger } from '../logger.js'; import { getOrCache } from '../redisClient.js'; import { getDirectoryTree, type RecursiveLsResult } from '../services/ipfs.js'; -import { ManifestActions, NodeUuid } from '../services/manifestRepo.js'; +import { NodeUuid } from '../services/manifestRepo.js'; import repoService from '../services/repoService.js'; import { getIndexedResearchObjects } from '../theGraph.js'; import { ensureUuidEndsWithDot } from '../utils.js'; @@ -351,24 +352,6 @@ export function inheritComponentType(path, pathToDbTypeMap: Record /dev/null; then echo "[dockerDev] NVM_DIR not set, please install NVM" echo "[dockerDev] curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash" exit 1 @@ -41,6 +41,7 @@ init_node() { assert_command_available "docker" assert_command_available "docker-compose" assert_command_available "lsof" +assert_command_available "make" init_node npm i -g hardhat diff --git a/nodes-lib/.env.example b/nodes-lib/.env.example new file mode 100644 index 000000000..d6aa61c07 --- /dev/null +++ b/nodes-lib/.env.example @@ -0,0 +1,54 @@ +## 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/.gitignore b/nodes-lib/.gitignore new file mode 100644 index 000000000..bc5c2b24a --- /dev/null +++ b/nodes-lib/.gitignore @@ -0,0 +1,4 @@ +node_modules +demo.ts +dist +.env diff --git a/nodes-lib/LICENSE b/nodes-lib/LICENSE new file mode 100644 index 000000000..8b144126a --- /dev/null +++ b/nodes-lib/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 DeSci Labs AG + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/nodes-lib/README.md b/nodes-lib/README.md new file mode 100644 index 000000000..bedf7f779 --- /dev/null +++ b/nodes-lib/README.md @@ -0,0 +1,135 @@ +# Nodes integration library +This package allows programmatic interaction with the backend of [DeSci Nodes](https://nodes.desci.com), simplifying creation of research publications by abstracting away a lot of low level detail. In particular, constructing correctly formatted manifest files and handling pinning. + + +## Core concepts +Some terms are regularly referred to in the code documentation. When programmatically creating nodes, it's important to understand what these things are for the end results to make sense. The corresponding types for these data structures are available in [desci-models](https://github.com/desci-labs/nodes/blob/develop/desci-models/src/ResearchObject.ts). + +### The manifest +The data structure of a research object is a JSON file which holds all information for the object, +either directly through constant fields, or indirectly through IPLD or web links. + +Here is an example manifest file, we'll go through it piece by piece. +```json +manifest: { + "version": "desci-nodes-0.2.0", + "components": [ + { + "id": "root", + "name": "root", + "type": "data-bucket", + "payload": { + "cid": "bafybeicrsddlvfbbo5s3upvjbtb5flc73iupxfy2kf3rv43kkbvegbqbwq", + "path": "root" + } + }, + { + "id": "05d6cfe7-d3f8-4590-97ee-bec0a4806c3c", + "name": "manuscript.pdf", + "type": "pdf", + "subtype": "manuscript", + "payload": { + "cid": "bafybeiamslevhsvjlnfejg7p2rzk6bncioaapwb3oauu7zqwmfpwko5ho4", + "path": "root/manuscript.pdf", + "externalUrl": "https://mydomain.com/papers/manuscript.pdf" + }, + "starred": true + }, + { + "id": "0b6afb37-0e95-49d4-80e3-1a3724979594", + "name": "my search engine", + "type": "link", + "payload": { + "url": "http://google.com", + "path": "root" + }, + "starred": false + } + ], + "authors": [], + "title": "My Node", + "defaultLicense": "CC BY", + "researchFields": [] +} +``` + +### Components +In the manifest above, we see a `components` array. The first entry is a special one, the type `data-bucket` indicates that it holds the CID to the drive. The drive is an [UnixFS](https://github.com/ipfs/specs/blob/main/UNIXFS.md) tree that holds all of the actual data included in the research object. + +Other components exist to attach metadata to individual files or folders inside the drive. This allows metadata to be added without changing the CID of the files and drive, and allows you to add metadata to external CID's and URL's. + +The components are equipped with a UUID to allow moving files and updating files without the metadata mapping to break. + +We can see two examples of other components. One is a file entry for a manuscript, which was added from an external URL, but is identified uniquely inside the node by the `path` and `cid` entires in the `payload`. + +The other component (`my search engine`) is an external link, which is the one type of component which doesn't refer to an entry in the drive. + +### Other fields +The other top-level fields contain a human-readable title, simple metadata about authorship, relevant research fields, and license information. + +## 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. Ensure NODES_API_KEY is set. + +Some variables have different values depending on environment, re-set them as necessary. 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). + +### 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. + +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. + +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 `NODES_LIB_PUBLISH_PKEY` and it will be used in interaction with the dPID registry on-chain, and as your DID in the Codex/Ceramic case. + +### Summarized API +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. + +#### Node operations +- `createDraftNode`: initializes a new, empty, private node. +- `prepublishDraftNode`: instructs the backend to re-compute the DAG, which is emulated to speed up operations in the drive. This is called automatically in `publishNode`, so in general it doesn't need to be invoked explicitly. +- `listNodes`: list existing nodes for the authenticated user. +- `retrieveDraftFileTree`: get the drive file tree. +- `deleteDraftNode`: remove a draft node. + +#### Manifest operations +Pretty self explanatory; these update the top-level metadata fields in the manifest: +- `updateTitle` +- `updateDescription` +- `updateLicense` +- `updateResearchFields` +- `addContributor` +- `removeContributor` + +#### File operations +These functions adds, removes, and organizes files in the drive. Everything operates on absolute drive paths; there are no relative-path operations. +- `uploadFiles`: upload one or more local files to the node drive. +- `createNewFolder`: creates an empty folder in the drive, which can be used as a target for uploading/moving files. +- `moveData`: move a file or directory to a new path in the drive. Note that this covers rename operations. +- `deleteData`: delete a path (and its potential subtree) from the drive. + +#### External import +These imports automatically create components for attaching metadata, in addition to creating the files in the drive. +- `uploadPdfFromUrl`: let the backend get a PDF from URL and add it to the drive. +- `uploadGithubRepoFromUrl`: let the backend download a snapshot of the repo and add it to the drive. +- `addExternalUnixFsTree`: upload the structure of an external UnixFS tree to the drive, without the actual files. They can then be resolved through regular IPFS means, but the file structure can be browsed in the node. + +#### Publishing +Until a publish operation has been run, the entire content of a node is private. +- `publishNode`: publishes said node to the dPID registry on the Görli testnet, and Codex on Ceramic. +- `getDpidHistory`: fetch the dPID registry history, as the backend is aware of it. +- `getManifestDocument`: get the state of the node manifest. +- `addLinkComponent`: create a link to an external resource. +- `addPdfComponent`: create a component for adding metadata to a PDF document in the drive. +- `addCodeComponent`: create a component for adding metadata to code in the drive. +- `deleteComponent`: remove a component from the manifest. +- `addRawComponent`: create a new component in the node. +- `changeManifest`: make an arbitrary change to the manifest. + +## Application ideas +Some random ideas of cool stuff you can build with this library: +- A CLI tool for uploading large datasets to nodes +- A tool which parses your ORCiD or Google Scholar profile and creates a node for each publication +- An automatic Node manager which regularly pushes new data to a node and publishes it +- Custom importer, allowing creating nodes from other input formats diff --git a/nodes-lib/package-lock.json b/nodes-lib/package-lock.json new file mode 100644 index 000000000..84c7718ad --- /dev/null +++ b/nodes-lib/package-lock.json @@ -0,0 +1,8383 @@ +{ + "name": "@desci-labs/nodes-lib", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@desci-labs/nodes-lib", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@desci-labs/desci-codex-lib": "^1.0.5", + "@desci-labs/desci-models": "^0.2.3-rc1", + "axios": "^1.6.5", + "dotenv": "^16.4.4", + "ethers": "^5.7.2", + "form-data": "^4.0.0", + "mime-types": "^2.1.35", + "multiformats": "^13.0.1", + "url-safe-base64": "^1.3.0" + }, + "devDependencies": { + "@desci-labs/desci-contracts": "^0.2.0-rc1", + "@types/mime-types": "^2.1.4", + "@types/node": "^20.11.5", + "typescript": "^5.3.3", + "vitest": "^1.2.1", + "vitest-github-actions-reporter": "^0.11.1" + } + }, + "../desci-contracts": { + "name": "@desci-labs/desci-contracts", + "version": "0.2.0", + "extraneous": true, + "license": "BSD-4-Clause", + "dependencies": { + "@openzeppelin/contracts": "^4.8.1", + "cids": "^1.1.9", + "dotenv": "^10.0.0", + "openzeppelin-solidity": "https://github.com/OpenZeppelin/openzeppelin-contracts#dc739dcbe34fb0c7b15c4e197c6ba3fe9b0c8946" + }, + "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", + "@openzeppelin/hardhat-upgrades": "^1.20.0", + "@typechain/ethers-v5": "^9.0.0", + "@typechain/hardhat": "^4.0.0", + "@types/chai": "^4.2.21", + "@types/mocha": "^9.0.0", + "@types/node": "^16.4.10", + "as-base64": "^0.2.0", + "chai": "^4.3.4", + "ethereum-waffle": "^3.4.0", + "ethers": "^5.4.4", + "ganache": "^7.8.0", + "hardhat": "^2.19.2", + "hardhat-deploy": "^0.8.11", + "hardhat-deploy-ethers": "^0.3.0-beta.10", + "hardhat-gas-reporter": "^1.0.4", + "mocha": "^9.0.3", + "ts-generator": "^0.1.1", + "ts-morph": "^11.0.3", + "ts-node": "^10.1.0", + "typechain": "^7.0.0", + "typescript": "^4.3.5" + } + }, + "node_modules/@actions/core": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", + "dev": true, + "dependencies": { + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + } + }, + "node_modules/@actions/core/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@actions/http-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", + "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", + "dev": true, + "dependencies": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" + }, + "node_modules/@ceramicnetwork/codecs": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-2.4.1.tgz", + "integrity": "sha512-QhdUHp7PJm+qL05f6ovlUe7K85urBt3V7JKQrmq33jCYt4YlVT2bTyUdsrgcyA+IJZnXP1KEWuSdcpE1V3Qe/A==", + "dependencies": { + "@ceramicnetwork/streamid": "^3.4.1", + "cartonne": "^3.0.1", + "codeco": "^1.1.0", + "dag-jose": "^4.0.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/@ceramicnetwork/codecs/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@ceramicnetwork/common": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-3.4.1.tgz", + "integrity": "sha512-SVtPG6tkaDF77iM2mweXV+JSgZa3tKvuku0TIrA+pZswa1EHtnRHssSilaj4q91JNaTy2Gsk86oK6MuQp9+LKg==", + "dependencies": { + "@ceramicnetwork/codecs": "^2.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@didtools/cacao": "^3.0.0", + "@didtools/pkh-ethereum": "^0.2.0", + "@didtools/pkh-solana": "^0.2.0", + "@didtools/pkh-stacks": "^0.2.0", + "@didtools/pkh-tezos": "^0.3.0", + "@stablelib/random": "^1.0.1", + "caip": "~1.1.0", + "flat": "^5.0.2", + "it-first": "^3.0.4", + "jet-logger": "1.2.2", + "lodash.clonedeep": "^4.5.0", + "logfmt": "^1.3.2", + "multiformats": "^13.0.0", + "rxjs": "^7.8.1", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/@ceramicnetwork/common/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@ceramicnetwork/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-ihnX2Gkc77IqnokF3vU1IDoWYGbU7fnXpgrTqU7MkjiT5GrpERjhu1Z64Hs3IIklyEfau5zqa7X1zQuvce7QMg==", + "dependencies": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/stream-caip10-link": "^3.4.1", + "@ceramicnetwork/stream-model": "^2.4.1", + "@ceramicnetwork/stream-model-instance": "^2.4.1", + "@ceramicnetwork/stream-tile": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@scarf/scarf": "^1.1.1", + "query-string": "^7.1.0", + "rxjs": "^7.8.1" + } + }, + "node_modules/@ceramicnetwork/stream-caip10-link": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-3.4.1.tgz", + "integrity": "sha512-M6e3nP7Wq4XOF1BNskK7MOdCB69Cyoc+WbJIicO28lMPouK4FzsOZn2F7z2807JhYJaapWYft4Ab0EXaZKqqGA==", + "dependencies": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "caip": "~1.1.0", + "did-resolver": "^4.0.1", + "lodash.clonedeep": "^4.5.0" + } + }, + "node_modules/@ceramicnetwork/stream-model": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-2.4.1.tgz", + "integrity": "sha512-H2oy9h2372B0ATyZLzR9cJKQbalfC58D4e5TXWl/EsVB3C2jslZPDyDODdqtQV44SM3QHp6sfAXf3/ds2S9mhQ==", + "dependencies": { + "@ceramicnetwork/codecs": "^2.4.1", + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/random": "^1.0.1", + "ajv": "^8.8.2", + "ajv-formats": "^2.1.1", + "codeco": "^1.1.0", + "fast-json-patch": "^3.1.0", + "json-schema-typed": "^8.0.1", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/@ceramicnetwork/stream-model-instance": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-2.4.1.tgz", + "integrity": "sha512-vp+oY27BFM64pXN2l4riwK3/3rN1DCEZe/iBrWWJ79SC99S9jFsSnx2TB0RLkBF+n87IsWi+t1WA+FR1KNIe/Q==", + "dependencies": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/random": "^1.0.1", + "fast-json-patch": "^3.1.0", + "object-sizeof": "^2.6.1", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/@ceramicnetwork/stream-model-instance/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@ceramicnetwork/stream-model/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@ceramicnetwork/stream-tile": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-3.4.1.tgz", + "integrity": "sha512-oTgG1sRPNS/eG+Df9O2CXOjWRzgs+mwYtF6/qY2jayWp+1t5BDdSKBefa427lekJEXn+IS5w2FesOAY5/3ddPQ==", + "dependencies": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/random": "^1.0.1", + "dids": "^5.0.0", + "fast-json-patch": "^3.1.0", + "lodash.clonedeep": "^4.5.0", + "uint8arrays": "^5.0.1" + } + }, + "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==", + "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/@ceramicnetwork/stream-tile/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_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.1.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz", + "integrity": "sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ==", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.0.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" + } + }, + "node_modules/@ceramicnetwork/stream-tile/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@ceramicnetwork/streamid": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/streamid/-/streamid-3.4.1.tgz", + "integrity": "sha512-m6uZjcdMdwzyO6TIVTJF4IJYjuceflmYDrlRxDcXrZySBNNKnL40tSHbzpcTfOy5YcIsTqJFxqUZQrFrC0mlDA==", + "dependencies": { + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/sha256": "^1.0.1", + "cborg": "^1.10.2", + "mapmoize": "^1.2.1", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", + "varint": "^6.0.0" + } + }, + "node_modules/@ceramicnetwork/streamid/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@composedb/client": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/client/-/client-0.6.0.tgz", + "integrity": "sha512-vqA7gMxdUq9UATM4bgvFx5Wk2BFYoc/rmCceM9KqCaY3yHohtOPxlty1L6/Fl1Md98hmgQkY45lvHiD4ajA1Kg==", + "dependencies": { + "@ceramicnetwork/http-client": "^3.0.5", + "@ceramicnetwork/stream-model": "^2.0.5", + "@ceramicnetwork/stream-model-instance": "^2.0.5", + "@composedb/constants": "^0.6.0", + "@composedb/graphql-scalars": "^0.6.0", + "@composedb/runtime": "^0.6.0", + "@graphql-tools/batch-execute": "^9.0.2", + "@graphql-tools/stitch": "^9.0.3", + "@graphql-tools/utils": "^10.0.11", + "dataloader": "^2.2.2", + "graphql": "^16.8.1", + "graphql-relay": "^0.10.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@composedb/constants": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/constants/-/constants-0.6.0.tgz", + "integrity": "sha512-18rysTgKUTgapwaDEJOI063WSWlwbvowEnRZkFrZpciHPHjgfdry9XTht4ygYkGzx9TE+zGsVmgJfF0LlbTFMg==", + "engines": { + "node": ">=20" + } + }, + "node_modules/@composedb/graphql-scalars": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/graphql-scalars/-/graphql-scalars-0.6.0.tgz", + "integrity": "sha512-9GssARG72pXb2SEYK6Zozz92tl37WnI9fCgKiTKBIjisoUGpUnTv2sRNRJV8X9j4CgawvCm4Yb/SH+CtUXuZew==", + "dependencies": { + "@ceramicnetwork/streamid": "^3.0.5", + "@composedb/types": "^0.6.0", + "caip": "^1.1.0", + "graphql": "^16.8.1", + "graphql-scalars": "^1.22.4", + "multiformats": "^12.1.3" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@composedb/graphql-scalars/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/@composedb/runtime": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/runtime/-/runtime-0.6.0.tgz", + "integrity": "sha512-HZRFa7KVqEPAQY9umPzpdRoblHIn/QVk/55T5TPLv6VTEDmUmw0W3Nv+vNH7kvq++SdIuikbRPSW7eci9wUTCw==", + "dependencies": { + "@ceramicnetwork/http-client": "^3.0.5", + "@ceramicnetwork/stream-model": "^2.0.5", + "@ceramicnetwork/stream-model-instance": "^2.0.5", + "@ceramicnetwork/streamid": "^3.0.5", + "@composedb/graphql-scalars": "^0.6.0", + "dataloader": "^2.2.2", + "graphql": "^16.8.1", + "graphql-relay": "^0.10.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@composedb/types": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/types/-/types-0.6.0.tgz", + "integrity": "sha512-Bpt85C/bIByqFx87OC14DBGfXCV7tj9IsZ5AQ0fv53bGATs+otEj+tnz5UxDRcSSuT9iLOLa8XLLKiEKkwmecQ==", + "dependencies": { + "@ceramicnetwork/common": "^3.0.5", + "@ceramicnetwork/stream-model": "^2.0.5", + "@ceramicnetwork/stream-model-instance": "^2.0.5", + "dids": "^4.0.4", + "json-schema-typed": "^8.0.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@desci-labs/desci-codex-composedb": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-composedb/-/desci-codex-composedb-1.0.1.tgz", + "integrity": "sha512-8SGGvm+NKYiNctOQ9+086/zSUdYgsvecg4PnQ3HZ+lJGd4GSOGwI9cfnDPl+Bu7yTXEimCRZvaQ4q/b4CPCxTg==", + "dependencies": { + "@composedb/types": "^0.6.0" + } + }, + "node_modules/@desci-labs/desci-codex-lib": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.0.6.tgz", + "integrity": "sha512-+sVL2DEiAr57UbDybWU6crd54uUZEvTsIvyBP3iAaci373+o2CpT9SUOLd6L3lcxAoc3TLXxXOrVvNmRs8U89w==", + "dependencies": { + "@composedb/client": "^0.6.0", + "@desci-labs/desci-codex-composedb": "^1.0.1", + "dids": "^4.0.4", + "gql-query-builder": "^3.8.0", + "graphql": "^16.8.0", + "key-did-provider-ed25519": "^3.0.2", + "key-did-resolver": "^3.0.0", + "uint8arrays": "^4.0.6" + } + }, + "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==", + "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" + } + }, + "node_modules/@desci-labs/desci-models": { + "version": "0.2.3-rc1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-models/-/desci-models-0.2.3-rc1.tgz", + "integrity": "sha512-FW74CkgfZTNhky0Q6Sk3lCoBZ+Yl5D4KVTTLBv/NG+e8qH9jyT6DVbiXvaThQWZQNulFXJg2UFZm73AVInu3wA==", + "dependencies": { + "jsonld": "^8.1.1", + "schema-dts": "^1.1.2" + } + }, + "node_modules/@didtools/cacao": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-3.0.1.tgz", + "integrity": "sha512-vV1JirxqVsBf2dqdvoS/msNN8fabvMfseZB0kf1FG8TbosrHd81+hgDOlQMZit7zJbTk5g3CGkZg3b7iYKkynw==", + "dependencies": { + "@didtools/codecs": "^3.0.0", + "@didtools/siwx": "2.0.0", + "@ipld/dag-cbor": "^9.0.7", + "caip": "^1.1.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", + "viem": "^1.21.4" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/cacao/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==", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@didtools/cacao/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_modules/@didtools/cacao/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@didtools/codecs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-3.0.0.tgz", + "integrity": "sha512-TemoVySZrs1XflMtOkwVTATtZEs42Mh2yk9SoYvBXES6Mz30PBJCm8v7U/2y1N5lrjb2cAPWs48Ryc7paetSxQ==", + "dependencies": { + "codeco": "^1.2.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/codecs/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "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==", + "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/@didtools/pkh-ethereum/node_modules/@didtools/cacao/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-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==", + "dependencies": { + "codeco": "^1.1.0", + "multiformats": "^11.0.1", + "uint8arrays": "^4.0.3" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/pkh-ethereum/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/@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==", + "dependencies": { + "codeco": "^1.1.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/pkh-ethereum/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==", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@didtools/pkh-ethereum/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_modules/@didtools/pkh-solana": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-solana/-/pkh-solana-0.2.0.tgz", + "integrity": "sha512-wOfa+hbWo1ok8YnR8tq2mZKbcyEv9qrxtTR5jXOuhOqCkz30/qu9e2Wib/byx7Kx5/ik/2z1nd2YPL0vrA+TxQ==", + "dependencies": { + "@didtools/cacao": "^3.0.0", + "@noble/curves": "^1.2.0", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/pkh-solana/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@didtools/pkh-stacks": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-stacks/-/pkh-stacks-0.2.0.tgz", + "integrity": "sha512-lXe8ZURCYCDQXrjaM7A4p1RCKrVsQ+NbO7bI70pRfjven82BPLDiqEJbhRGnWKbjQD1CQe9MJXLy3AuStKc7qw==", + "dependencies": { + "@didtools/cacao": "^3.0.0", + "@stablelib/random": "^1.0.2", + "@stacks/common": "^6.10.0", + "@stacks/encryption": "^6.10.0", + "@stacks/transactions": "^6.10.0", + "caip": "^1.1.0", + "jsontokens": "^4.0.1" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/pkh-tezos": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-tezos/-/pkh-tezos-0.3.0.tgz", + "integrity": "sha512-AB8drOnBkDSE9KolsiSShPwVOVbRXM2G5T//b+GgX9potVRTcRsD0z59x/6mU1e9g2kxpScOhjRrZsC0c+SQNw==", + "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", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@didtools/pkh-tezos/node_modules/uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@didtools/siwx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-2.0.0.tgz", + "integrity": "sha512-eqBtI5dZrptXTCyadnhvU0di/KvumoByT7F8KB/8BLU7M1lltfEmvf/c5AnsyrWO9338ygCs2u5mKz1p1Zdj5A==", + "dependencies": { + "codeco": "^1.2.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "dependencies": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + }, + "engines": { + "node": ">=14.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/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@graphql-tools/batch-delegate": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-delegate/-/batch-delegate-9.0.0.tgz", + "integrity": "sha512-23NmxcHQeKcfhMQyrRPTZfW4/+bSpAyR/qAhRjx+/hikDIa1Uv2XVgV9jIitSgM0OEk/KGPB4VQv+LCOWvAYiw==", + "dependencies": { + "@graphql-tools/delegate": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "dataloader": "2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/batch-execute": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz", + "integrity": "sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==", + "dependencies": { + "@graphql-tools/utils": "^10.0.5", + "dataloader": "^2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/delegate": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.3.tgz", + "integrity": "sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==", + "dependencies": { + "@graphql-tools/batch-execute": "^9.0.1", + "@graphql-tools/executor": "^1.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.5", + "dataloader": "^2.2.2", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/executor": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.0.tgz", + "integrity": "sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==", + "dependencies": { + "@graphql-tools/utils": "^10.0.0", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/merge": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", + "dependencies": { + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/schema": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", + "dependencies": { + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/stitch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/stitch/-/stitch-9.0.3.tgz", + "integrity": "sha512-G03XahiHDu1pnaS8z2GNfsV/5BribMEUATT5dCHBAqj13Te5y1amZNQePrmw8DLtbf5qDbU6CO7kGHPxv0XO9A==", + "dependencies": { + "@graphql-tools/batch-delegate": "^9.0.0", + "@graphql-tools/delegate": "^10.0.1", + "@graphql-tools/executor": "^1.0.0", + "@graphql-tools/merge": "^9.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/wrap": "^10.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/utils": { + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.13.tgz", + "integrity": "sha512-fMILwGr5Dm2zefNItjQ6C2rauigklv69LIwppccICuGTnGaOp3DspLt/6Lxj72cbg5d9z60Sr+Egco3CJKLsNg==", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", + "dset": "^3.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-tools/wrap": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.1.tgz", + "integrity": "sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==", + "dependencies": { + "@graphql-tools/delegate": "^10.0.3", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" + } + }, + "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/@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/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" + }, + "node_modules/@noble/ciphers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", + "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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==", + "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", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "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/@repeaterjs/repeater": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.5.tgz", + "integrity": "sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scarf/scarf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.3.0.tgz", + "integrity": "sha512-lHKK8M5CTcpFj2hZDB3wIjb0KAbEOgDmiJGDv1WBRfQgRm/a8/XMEkG/N1iM01xgbUDsPQwi42D+dFo1XPAKew==", + "hasInstallScript": true + }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", + "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "dependencies": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha256": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "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==", + "dependencies": { + "@types/bn.js": "^5.1.0", + "@types/node": "^18.0.4" + } + }, + "node_modules/@stacks/common/node_modules/@types/node": { + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@stacks/encryption": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.11.3.tgz", + "integrity": "sha512-nUA/21L8NnCw1vPetczWz3fjBCleqRgYfNGJX98AIDs9sjRQkxUfUGYz+3PlbpYgHWHIeRZafitQhMRpVhsbkQ==", + "dependencies": { + "@noble/hashes": "1.1.5", + "@noble/secp256k1": "1.7.1", + "@scure/bip39": "1.1.0", + "@stacks/common": "^6.10.0", + "@types/node": "^18.0.4", + "base64-js": "^1.5.1", + "bs58": "^5.0.0", + "ripemd160-min": "^0.0.6", + "varuint-bitcoin": "^1.1.2" + } + }, + "node_modules/@stacks/encryption/node_modules/@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@stacks/encryption/node_modules/@types/node": { + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "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==", + "dependencies": { + "@stacks/common": "^6.10.0", + "cross-fetch": "^3.1.5" + } + }, + "node_modules/@stacks/transactions": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.11.3.tgz", + "integrity": "sha512-Zb7ONYt8OJPTTdXQHobWqZ2mwTALpGt43PEsy2FpDgQzOodGk1lWDo1Jhzs3hhw/2ib5FE3iDMc6jptKe9miCg==", + "dependencies": { + "@noble/hashes": "1.1.5", + "@noble/secp256k1": "1.7.1", + "@stacks/common": "^6.10.0", + "@stacks/network": "^6.11.3", + "c32check": "^2.0.0", + "lodash.clonedeep": "^4.5.0" + } + }, + "node_modules/@stacks/transactions/node_modules/@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@vitest/expect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz", + "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==", + "dev": true, + "dependencies": { + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz", + "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "1.2.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz", + "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz", + "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/abitype": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.8.tgz", + "integrity": "sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "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-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "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/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/c32check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-2.0.0.tgz", + "integrity": "sha512-rpwfAcS/CMqo0oCqDf3r9eeLgScRE3l/xHDCXhM3UyrfvIn7PrLq63uHh7yYbv8NzaZn5MVsVhIRpQ+5GZ5HyA==", + "dependencies": { + "@noble/hashes": "^1.1.2", + "base-x": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/caip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.0.tgz", + "integrity": "sha512-yOO3Fu4ygyKYAdznuoaqschMKIZzcdgyMpBNtrIfrUhnOeaOWG+dh0c13wcOS6B/46IGGbncoyzJlio79jU7rw==" + }, + "node_modules/canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + }, + "node_modules/cartonne": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cartonne/-/cartonne-3.0.1.tgz", + "integrity": "sha512-Y8DH//DthEUbfvOMGYj/9K3F1RcWkiVu2dB9tGkiBnMqojAXTpu+TUs9FNNx202H0TQdJgbPsQl7Q6NuJ48dCw==", + "dependencies": { + "@ipld/dag-cbor": "^9.0.7", + "multiformats": "^13.0.0", + "multihashes-sync": "^2.0.0", + "varintes": "^2.0.5" + } + }, + "node_modules/cartonne/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==", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/cartonne/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_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", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "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.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "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/codeco": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/codeco/-/codeco-1.2.0.tgz", + "integrity": "sha512-SHTBW7QsiDtHGqEyhX10gZesmWlWV00gXteFyU2xLqyZmy658/+HlPyXG5EvY05+csQNWjBIfGg2mZrklR1RtQ==" + }, + "node_modules/colors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", + "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "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/dag-jose": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dag-jose/-/dag-jose-4.0.0.tgz", + "integrity": "sha512-tw595L3UYoOUT9dSJPbBEG/qpRpw24kRZxa5SLRnlnr+g5L7O8oEs1d3W5TiVA1oJZbthVsf0Vi3zFN66qcEBA==", + "dependencies": { + "@ipld/dag-cbor": "^9.0.0", + "multiformats": "^11.0.0" + } + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz", + "integrity": "sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ==", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/dag-jose/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/dag-jose/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_modules/dag-jose/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/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/did-jwt": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.4.7.tgz", + "integrity": "sha512-Apz7nIfIHSKWIMaEP5L/K8xkwByvjezjTG0xiqwKdnNj1x8M0+Yasury5Dm/KPltxi2PlGfRPf3IejRKZrT8mQ==", + "dependencies": { + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@scure/base": "^1.1.3", + "canonicalize": "^2.0.0", + "did-resolver": "^4.1.0", + "multibase": "^4.0.6", + "multiformats": "^9.6.2", + "uint8arrays": "3.1.1" + } + }, + "node_modules/did-jwt/node_modules/canonicalize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" + }, + "node_modules/did-jwt/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/did-jwt/node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/did-resolver": { + "version": "4.1.0", + "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==", + "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/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==", + "dependencies": { + "codeco": "^1.1.0", + "multiformats": "^11.0.1", + "uint8arrays": "^4.0.3" + }, + "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==", + "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/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==", + "dependencies": { + "codeco": "^1.1.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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==", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + }, + "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_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/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "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", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "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/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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==" + }, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" + }, + "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==" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "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/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gql-query-builder": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/gql-query-builder/-/gql-query-builder-3.8.0.tgz", + "integrity": "sha512-q0PncZTrLDeyiH4R7YH1ISM+XGB4NvQ8eTm/Wr/sHSuquFZvqvDpGyMhbgoCZDc8kNAK8GOdfh3nI2GCLREFvw==" + }, + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-relay": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.10.0.tgz", + "integrity": "sha512-44yBuw2/DLNEiMypbNZBt1yMDbBmyVPVesPywnteGGALiBmdyy1JP8jSg8ClLePg8ZZxk0O4BLhd1a6U/1jDOQ==", + "engines": { + "node": "^12.20.0 || ^14.15.0 || >= 15.9.0" + }, + "peerDependencies": { + "graphql": "^16.2.0" + } + }, + "node_modules/graphql-scalars": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.22.4.tgz", + "integrity": "sha512-ILnv7jq5VKHLUyoaTFX7lgYrjCd6vTee9i8/B+D4zJKJT5TguOl0KkpPEbXHjmeor8AZYrVsrYUHdqRBMX1pjA==", + "dependencies": { + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "graphql": "^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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/isows": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", + "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wagmi-dev" + } + ], + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/it-first": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", + "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" + }, + "node_modules/jet-logger": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jet-logger/-/jet-logger-1.2.2.tgz", + "integrity": "sha512-Kbw4G3BC45+Umz5XBnsE50pHplruJTVKGRy5X1YfCu3Te7f8ggTL8Tm10YegAD2QP41MVQ3o/Y9MFAZzfythqw==", + "dependencies": { + "colors": "1.3.0" + } + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-schema-typed": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.1.tgz", + "integrity": "sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==" + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "node_modules/jsonld": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", + "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", + "dependencies": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsontokens": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-4.0.1.tgz", + "integrity": "sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==", + "dependencies": { + "@noble/hashes": "^1.1.2", + "@noble/secp256k1": "^1.6.3", + "base64-js": "^1.5.1" + } + }, + "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==", + "dependencies": { + "@noble/curves": "^1.1.0", + "did-jwt": "^7.2.0", + "dids": "^4.0.4", + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^4.0.3" + }, + "engines": { + "node": ">=14.14" + } + }, + "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==", + "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", + "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/ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "dependencies": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky-universal?sponsor=1" + }, + "peerDependencies": { + "ky": ">=0.31.4", + "web-streams-polyfill": ">=3.2.1" + }, + "peerDependenciesMeta": { + "web-streams-polyfill": { + "optional": true + } + } + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/logfmt": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/logfmt/-/logfmt-1.4.0.tgz", + "integrity": "sha512-p1Ow0C2dDJYaQBhRHt+HVMP6ELuBm4jYSYNHPMfz0J5wJ9qA6/7oBOlBZBfT1InqguTYcvJzNea5FItDxTcbyw==", + "dependencies": { + "split": "0.2.x", + "through": "2.3.x" + }, + "bin": { + "logfmt": "bin/logfmt" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mapmoize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/mapmoize/-/mapmoize-1.2.1.tgz", + "integrity": "sha512-LK8ArSM1wbfRPTnl+LpdxW1pwkfY6GxtM9p+STr6aDtM7ImR8jLuf4ekei43/AN0f7XDSrohzwwK57eGHSDAuA==", + "engines": { + "node": "^14.0.0 || ^16.0.0 || >=18.0.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "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/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "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==", + "dev": true + }, + "node_modules/multibase": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "deprecated": "This module has been superseded by the multiformats module", + "dependencies": { + "@multiformats/base-x": "^4.0.1" + }, + "engines": { + "node": ">=12.0.0", + "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.0.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + }, + "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", + "integrity": "sha512-hoBamCqXuVmeo4NAY52dbYuUIKHy3/FcqxyKZSbhqicR2SbUjgiY4FoDvE8BV40dPfAJTT6pQpqYeuKxqKwOLQ==", + "dependencies": { + "@noble/hashes": "^1.3.3", + "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/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-sizeof": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/object-sizeof/-/object-sizeof-2.6.4.tgz", + "integrity": "sha512-YuJAf7Bi61KROcYmXm8RCeBrBw8UOaJDzTm1gp0eU7RjYi1xEte3/Nmg/VyPaHcJZ3sNojs1Y0xvSrgwkLmcFw==", + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "dependencies": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "dependencies": { + "setimmediate": "^1.0.5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "fsevents": "~2.3.2" + } + }, + "node_modules/rpc-utils": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rpc-utils/-/rpc-utils-0.6.2.tgz", + "integrity": "sha512-kzk1OflbBckfDBAo8JwsmtQSHzj+6hxRt5G+u8A8ZSmunBw1nhWvRkSq8j1+EvWBqBRLy1aiGLUW5644CZqQtA==", + "dependencies": { + "nanoid": "^3.3.1" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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/schema-dts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz", + "integrity": "sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==", + "peerDependencies": { + "typescript": ">=4.1.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "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/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", + "integrity": "sha512-e0pKq+UUH2Xq/sXbYpZBZc3BawsfDZ7dgv+JtRTUPNcvF5CMR4Y9cvJqkMY0MoxWzTHvZuz1beg6pNEKlszPiQ==", + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/tinybench": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "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/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/undici": { + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", + "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "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/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-safe-base64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/url-safe-base64/-/url-safe-base64-1.3.0.tgz", + "integrity": "sha512-MasquJt1L8/W996LP1BSsDL6UbApCv0Xal0eeeXUIfNXPEj3zM82XETcQSdurbmCmbeJnqRlhszHnWQzMiAZeQ==" + }, + "node_modules/value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "node_modules/varintes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/varintes/-/varintes-2.0.5.tgz", + "integrity": "sha512-iF3jlHLko9NrYjaUZvT3VwypP3V20KNNhT1tzqblyIyrVjNiW7HseGOhuP+apgZBp9X/8+5pxa7kNikhJeZlIw==" + }, + "node_modules/varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/viem": { + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/viem/-/viem-1.21.4.tgz", + "integrity": "sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz", + "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz", + "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==", + "dev": true, + "dependencies": { + "@vitest/expect": "1.2.1", + "@vitest/runner": "1.2.1", + "@vitest/snapshot": "1.2.1", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "acorn-walk": "^8.3.2", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.2.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "^1.0.0", + "@vitest/ui": "^1.0.0", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest-github-actions-reporter": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/vitest-github-actions-reporter/-/vitest-github-actions-reporter-0.11.1.tgz", + "integrity": "sha512-ZHHB0wBgOPhMYCB17WKVlJZa+5SdudBZFoVoebwfq3ioIUTeLQGYHwh85vpdJAxRghLP8d0qI/6eCTueGyDVXA==", + "dev": true, + "dependencies": { + "@actions/core": "^1.10.0" + }, + "engines": { + "node": ">=14.16.0" + }, + "peerDependencies": { + "vitest": ">=0.28.5" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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/why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@actions/core": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", + "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", + "dev": true, + "requires": { + "@actions/http-client": "^2.0.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "@actions/http-client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", + "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", + "dev": true, + "requires": { + "tunnel": "^0.0.6", + "undici": "^5.25.4" + } + }, + "@adraffy/ens-normalize": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz", + "integrity": "sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==" + }, + "@ceramicnetwork/codecs": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/codecs/-/codecs-2.4.1.tgz", + "integrity": "sha512-QhdUHp7PJm+qL05f6ovlUe7K85urBt3V7JKQrmq33jCYt4YlVT2bTyUdsrgcyA+IJZnXP1KEWuSdcpE1V3Qe/A==", + "requires": { + "@ceramicnetwork/streamid": "^3.4.1", + "cartonne": "^3.0.1", + "codeco": "^1.1.0", + "dag-jose": "^4.0.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@ceramicnetwork/common": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/common/-/common-3.4.1.tgz", + "integrity": "sha512-SVtPG6tkaDF77iM2mweXV+JSgZa3tKvuku0TIrA+pZswa1EHtnRHssSilaj4q91JNaTy2Gsk86oK6MuQp9+LKg==", + "requires": { + "@ceramicnetwork/codecs": "^2.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@didtools/cacao": "^3.0.0", + "@didtools/pkh-ethereum": "^0.2.0", + "@didtools/pkh-solana": "^0.2.0", + "@didtools/pkh-stacks": "^0.2.0", + "@didtools/pkh-tezos": "^0.3.0", + "@stablelib/random": "^1.0.1", + "caip": "~1.1.0", + "flat": "^5.0.2", + "it-first": "^3.0.4", + "jet-logger": "1.2.2", + "lodash.clonedeep": "^4.5.0", + "logfmt": "^1.3.2", + "multiformats": "^13.0.0", + "rxjs": "^7.8.1", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@ceramicnetwork/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-ihnX2Gkc77IqnokF3vU1IDoWYGbU7fnXpgrTqU7MkjiT5GrpERjhu1Z64Hs3IIklyEfau5zqa7X1zQuvce7QMg==", + "requires": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/stream-caip10-link": "^3.4.1", + "@ceramicnetwork/stream-model": "^2.4.1", + "@ceramicnetwork/stream-model-instance": "^2.4.1", + "@ceramicnetwork/stream-tile": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@scarf/scarf": "^1.1.1", + "query-string": "^7.1.0", + "rxjs": "^7.8.1" + } + }, + "@ceramicnetwork/stream-caip10-link": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-caip10-link/-/stream-caip10-link-3.4.1.tgz", + "integrity": "sha512-M6e3nP7Wq4XOF1BNskK7MOdCB69Cyoc+WbJIicO28lMPouK4FzsOZn2F7z2807JhYJaapWYft4Ab0EXaZKqqGA==", + "requires": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "caip": "~1.1.0", + "did-resolver": "^4.0.1", + "lodash.clonedeep": "^4.5.0" + } + }, + "@ceramicnetwork/stream-model": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model/-/stream-model-2.4.1.tgz", + "integrity": "sha512-H2oy9h2372B0ATyZLzR9cJKQbalfC58D4e5TXWl/EsVB3C2jslZPDyDODdqtQV44SM3QHp6sfAXf3/ds2S9mhQ==", + "requires": { + "@ceramicnetwork/codecs": "^2.4.1", + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/random": "^1.0.1", + "ajv": "^8.8.2", + "ajv-formats": "^2.1.1", + "codeco": "^1.1.0", + "fast-json-patch": "^3.1.0", + "json-schema-typed": "^8.0.1", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@ceramicnetwork/stream-model-instance": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-model-instance/-/stream-model-instance-2.4.1.tgz", + "integrity": "sha512-vp+oY27BFM64pXN2l4riwK3/3rN1DCEZe/iBrWWJ79SC99S9jFsSnx2TB0RLkBF+n87IsWi+t1WA+FR1KNIe/Q==", + "requires": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/random": "^1.0.1", + "fast-json-patch": "^3.1.0", + "object-sizeof": "^2.6.1", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@ceramicnetwork/stream-tile": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/stream-tile/-/stream-tile-3.4.1.tgz", + "integrity": "sha512-oTgG1sRPNS/eG+Df9O2CXOjWRzgs+mwYtF6/qY2jayWp+1t5BDdSKBefa427lekJEXn+IS5w2FesOAY5/3ddPQ==", + "requires": { + "@ceramicnetwork/common": "^3.4.1", + "@ceramicnetwork/streamid": "^3.4.1", + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/random": "^1.0.1", + "dids": "^5.0.0", + "fast-json-patch": "^3.1.0", + "lodash.clonedeep": "^4.5.0", + "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.0.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", + "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==" + }, + "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" + }, + "dependencies": { + "@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==", + "requires": { + "cborg": "^4.0.0", + "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.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@ceramicnetwork/streamid": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ceramicnetwork/streamid/-/streamid-3.4.1.tgz", + "integrity": "sha512-m6uZjcdMdwzyO6TIVTJF4IJYjuceflmYDrlRxDcXrZySBNNKnL40tSHbzpcTfOy5YcIsTqJFxqUZQrFrC0mlDA==", + "requires": { + "@ipld/dag-cbor": "^7.0.0", + "@stablelib/sha256": "^1.0.1", + "cborg": "^1.10.2", + "mapmoize": "^1.2.1", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", + "varint": "^6.0.0" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@composedb/client": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/client/-/client-0.6.0.tgz", + "integrity": "sha512-vqA7gMxdUq9UATM4bgvFx5Wk2BFYoc/rmCceM9KqCaY3yHohtOPxlty1L6/Fl1Md98hmgQkY45lvHiD4ajA1Kg==", + "requires": { + "@ceramicnetwork/http-client": "^3.0.5", + "@ceramicnetwork/stream-model": "^2.0.5", + "@ceramicnetwork/stream-model-instance": "^2.0.5", + "@composedb/constants": "^0.6.0", + "@composedb/graphql-scalars": "^0.6.0", + "@composedb/runtime": "^0.6.0", + "@graphql-tools/batch-execute": "^9.0.2", + "@graphql-tools/stitch": "^9.0.3", + "@graphql-tools/utils": "^10.0.11", + "dataloader": "^2.2.2", + "graphql": "^16.8.1", + "graphql-relay": "^0.10.0" + } + }, + "@composedb/constants": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/constants/-/constants-0.6.0.tgz", + "integrity": "sha512-18rysTgKUTgapwaDEJOI063WSWlwbvowEnRZkFrZpciHPHjgfdry9XTht4ygYkGzx9TE+zGsVmgJfF0LlbTFMg==" + }, + "@composedb/graphql-scalars": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/graphql-scalars/-/graphql-scalars-0.6.0.tgz", + "integrity": "sha512-9GssARG72pXb2SEYK6Zozz92tl37WnI9fCgKiTKBIjisoUGpUnTv2sRNRJV8X9j4CgawvCm4Yb/SH+CtUXuZew==", + "requires": { + "@ceramicnetwork/streamid": "^3.0.5", + "@composedb/types": "^0.6.0", + "caip": "^1.1.0", + "graphql": "^16.8.1", + "graphql-scalars": "^1.22.4", + "multiformats": "^12.1.3" + }, + "dependencies": { + "multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==" + } + } + }, + "@composedb/runtime": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/runtime/-/runtime-0.6.0.tgz", + "integrity": "sha512-HZRFa7KVqEPAQY9umPzpdRoblHIn/QVk/55T5TPLv6VTEDmUmw0W3Nv+vNH7kvq++SdIuikbRPSW7eci9wUTCw==", + "requires": { + "@ceramicnetwork/http-client": "^3.0.5", + "@ceramicnetwork/stream-model": "^2.0.5", + "@ceramicnetwork/stream-model-instance": "^2.0.5", + "@ceramicnetwork/streamid": "^3.0.5", + "@composedb/graphql-scalars": "^0.6.0", + "dataloader": "^2.2.2", + "graphql": "^16.8.1", + "graphql-relay": "^0.10.0" + } + }, + "@composedb/types": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@composedb/types/-/types-0.6.0.tgz", + "integrity": "sha512-Bpt85C/bIByqFx87OC14DBGfXCV7tj9IsZ5AQ0fv53bGATs+otEj+tnz5UxDRcSSuT9iLOLa8XLLKiEKkwmecQ==", + "requires": { + "@ceramicnetwork/common": "^3.0.5", + "@ceramicnetwork/stream-model": "^2.0.5", + "@ceramicnetwork/stream-model-instance": "^2.0.5", + "dids": "^4.0.4", + "json-schema-typed": "^8.0.1" + } + }, + "@desci-labs/desci-codex-composedb": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-composedb/-/desci-codex-composedb-1.0.1.tgz", + "integrity": "sha512-8SGGvm+NKYiNctOQ9+086/zSUdYgsvecg4PnQ3HZ+lJGd4GSOGwI9cfnDPl+Bu7yTXEimCRZvaQ4q/b4CPCxTg==", + "requires": { + "@composedb/types": "^0.6.0" + } + }, + "@desci-labs/desci-codex-lib": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-codex-lib/-/desci-codex-lib-1.0.6.tgz", + "integrity": "sha512-+sVL2DEiAr57UbDybWU6crd54uUZEvTsIvyBP3iAaci373+o2CpT9SUOLd6L3lcxAoc3TLXxXOrVvNmRs8U89w==", + "requires": { + "@composedb/client": "^0.6.0", + "@desci-labs/desci-codex-composedb": "^1.0.1", + "dids": "^4.0.4", + "gql-query-builder": "^3.8.0", + "graphql": "^16.8.0", + "key-did-provider-ed25519": "^3.0.2", + "key-did-resolver": "^3.0.0", + "uint8arrays": "^4.0.6" + } + }, + "@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==", + "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 + } + } + }, + "@desci-labs/desci-models": { + "version": "0.2.3-rc1", + "resolved": "https://registry.npmjs.org/@desci-labs/desci-models/-/desci-models-0.2.3-rc1.tgz", + "integrity": "sha512-FW74CkgfZTNhky0Q6Sk3lCoBZ+Yl5D4KVTTLBv/NG+e8qH9jyT6DVbiXvaThQWZQNulFXJg2UFZm73AVInu3wA==", + "requires": { + "jsonld": "^8.1.1", + "schema-dts": "^1.1.2" + } + }, + "@didtools/cacao": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@didtools/cacao/-/cacao-3.0.1.tgz", + "integrity": "sha512-vV1JirxqVsBf2dqdvoS/msNN8fabvMfseZB0kf1FG8TbosrHd81+hgDOlQMZit7zJbTk5g3CGkZg3b7iYKkynw==", + "requires": { + "@didtools/codecs": "^3.0.0", + "@didtools/siwx": "2.0.0", + "@ipld/dag-cbor": "^9.0.7", + "caip": "^1.1.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1", + "viem": "^1.21.4" + }, + "dependencies": { + "@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==", + "requires": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + } + }, + "cborg": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", + "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==" + }, + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@didtools/codecs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@didtools/codecs/-/codecs-3.0.0.tgz", + "integrity": "sha512-TemoVySZrs1XflMtOkwVTATtZEs42Mh2yk9SoYvBXES6Mz30PBJCm8v7U/2y1N5lrjb2cAPWs48Ryc7paetSxQ==", + "requires": { + "codeco": "^1.2.0", + "multiformats": "^13.0.0", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@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" + }, + "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==" + } + } + }, + "@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" + }, + "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==" + } + } + }, + "@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.1.0", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz", + "integrity": "sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ==", + "requires": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + } + }, + "cborg": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", + "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==" + } + } + }, + "@didtools/pkh-solana": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-solana/-/pkh-solana-0.2.0.tgz", + "integrity": "sha512-wOfa+hbWo1ok8YnR8tq2mZKbcyEv9qrxtTR5jXOuhOqCkz30/qu9e2Wib/byx7Kx5/ik/2z1nd2YPL0vrA+TxQ==", + "requires": { + "@didtools/cacao": "^3.0.0", + "@noble/curves": "^1.2.0", + "@stablelib/random": "^1.0.2", + "caip": "^1.1.0", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@didtools/pkh-stacks": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-stacks/-/pkh-stacks-0.2.0.tgz", + "integrity": "sha512-lXe8ZURCYCDQXrjaM7A4p1RCKrVsQ+NbO7bI70pRfjven82BPLDiqEJbhRGnWKbjQD1CQe9MJXLy3AuStKc7qw==", + "requires": { + "@didtools/cacao": "^3.0.0", + "@stablelib/random": "^1.0.2", + "@stacks/common": "^6.10.0", + "@stacks/encryption": "^6.10.0", + "@stacks/transactions": "^6.10.0", + "caip": "^1.1.0", + "jsontokens": "^4.0.1" + } + }, + "@didtools/pkh-tezos": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@didtools/pkh-tezos/-/pkh-tezos-0.3.0.tgz", + "integrity": "sha512-AB8drOnBkDSE9KolsiSShPwVOVbRXM2G5T//b+GgX9potVRTcRsD0z59x/6mU1e9g2kxpScOhjRrZsC0c+SQNw==", + "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", + "uint8arrays": "^5.0.1" + }, + "dependencies": { + "uint8arrays": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.1.tgz", + "integrity": "sha512-ND5RpJAnPgHmZT7hWD/2T4BwRp04j8NLKvMKC/7bhiEwEjUMkQ4kvBKiH6hOqbljd6qJ2xS8reL3vl1e33grOQ==", + "requires": { + "multiformats": "^13.0.0" + } + } + } + }, + "@didtools/siwx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@didtools/siwx/-/siwx-2.0.0.tgz", + "integrity": "sha512-eqBtI5dZrptXTCyadnhvU0di/KvumoByT7F8KB/8BLU7M1lltfEmvf/c5AnsyrWO9338ygCs2u5mKz1p1Zdj5A==", + "requires": { + "codeco": "^1.2.0" + } + }, + "@digitalbazaar/http-client": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", + "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "requires": { + "ky": "^0.33.3", + "ky-universal": "^0.11.0", + "undici": "^5.21.2" + } + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@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==", + "dev": true, + "optional": true + }, + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "requires": { + "@ethersproject/abi": "^5.7.0", + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0" + } + }, + "@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/pbkdf2": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==" + }, + "@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "requires": { + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/hdnode": "^5.7.0", + "@ethersproject/json-wallets": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/wordlists": "^5.7.0" + } + }, + "@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "requires": { + "@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": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==" + }, + "@graphql-tools/batch-delegate": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-delegate/-/batch-delegate-9.0.0.tgz", + "integrity": "sha512-23NmxcHQeKcfhMQyrRPTZfW4/+bSpAyR/qAhRjx+/hikDIa1Uv2XVgV9jIitSgM0OEk/KGPB4VQv+LCOWvAYiw==", + "requires": { + "@graphql-tools/delegate": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "dataloader": "2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/batch-execute": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-9.0.2.tgz", + "integrity": "sha512-Y2uwdZI6ZnatopD/SYfZ1eGuQFI7OU2KGZ2/B/7G9ISmgMl5K+ZZWz/PfIEXeiHirIDhyk54s4uka5rj2xwKqQ==", + "requires": { + "@graphql-tools/utils": "^10.0.5", + "dataloader": "^2.2.2", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/delegate": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-10.0.3.tgz", + "integrity": "sha512-Jor9oazZ07zuWkykD3OOhT/2XD74Zm6Ar0ENZMk75MDD51wB2UWUIMljtHxbJhV5A6UBC2v8x6iY0xdCGiIlyw==", + "requires": { + "@graphql-tools/batch-execute": "^9.0.1", + "@graphql-tools/executor": "^1.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.5", + "dataloader": "^2.2.2", + "tslib": "^2.5.0" + } + }, + "@graphql-tools/executor": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.2.0.tgz", + "integrity": "sha512-SKlIcMA71Dha5JnEWlw4XxcaJ+YupuXg0QCZgl2TOLFz4SkGCwU/geAsJvUJFwK2RbVLpQv/UMq67lOaBuwDtg==", + "requires": { + "@graphql-tools/utils": "^10.0.0", + "@graphql-typed-document-node/core": "3.2.0", + "@repeaterjs/repeater": "^3.0.4", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/merge": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/merge/-/merge-9.0.1.tgz", + "integrity": "sha512-hIEExWO9fjA6vzsVjJ3s0cCQ+Q/BEeMVJZtMXd7nbaVefVy0YDyYlEkeoYYNV3NVVvu1G9lr6DM1Qd0DGo9Caw==", + "requires": { + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/schema": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@graphql-tools/schema/-/schema-10.0.2.tgz", + "integrity": "sha512-TbPsIZnWyDCLhgPGnDjt4hosiNU2mF/rNtSk5BVaXWnZqvKJ6gzJV4fcHcvhRIwtscDMW2/YTnK6dLVnk8pc4w==", + "requires": { + "@graphql-tools/merge": "^9.0.1", + "@graphql-tools/utils": "^10.0.10", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-tools/stitch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@graphql-tools/stitch/-/stitch-9.0.3.tgz", + "integrity": "sha512-G03XahiHDu1pnaS8z2GNfsV/5BribMEUATT5dCHBAqj13Te5y1amZNQePrmw8DLtbf5qDbU6CO7kGHPxv0XO9A==", + "requires": { + "@graphql-tools/batch-delegate": "^9.0.0", + "@graphql-tools/delegate": "^10.0.1", + "@graphql-tools/executor": "^1.0.0", + "@graphql-tools/merge": "^9.0.0", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "@graphql-tools/wrap": "^10.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.11" + } + }, + "@graphql-tools/utils": { + "version": "10.0.13", + "resolved": "https://registry.npmjs.org/@graphql-tools/utils/-/utils-10.0.13.tgz", + "integrity": "sha512-fMILwGr5Dm2zefNItjQ6C2rauigklv69LIwppccICuGTnGaOp3DspLt/6Lxj72cbg5d9z60Sr+Egco3CJKLsNg==", + "requires": { + "@graphql-typed-document-node/core": "^3.1.1", + "cross-inspect": "1.0.0", + "dset": "^3.1.2", + "tslib": "^2.4.0" + } + }, + "@graphql-tools/wrap": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-10.0.1.tgz", + "integrity": "sha512-Cw6hVrKGM2OKBXeuAGltgy4tzuqQE0Nt7t/uAqnuokSXZhMHXJUb124Bnvxc2gPZn5chfJSDafDe4Cp8ZAVJgg==", + "requires": { + "@graphql-tools/delegate": "^10.0.3", + "@graphql-tools/schema": "^10.0.0", + "@graphql-tools/utils": "^10.0.0", + "tslib": "^2.4.0", + "value-or-promise": "^1.0.12" + } + }, + "@graphql-typed-document-node/core": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.2.0.tgz", + "integrity": "sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==", + "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==" + } + } + }, + "@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.27.8" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@multiformats/base-x": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" + }, + "@noble/ciphers": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", + "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==" + }, + "@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "requires": { + "@noble/hashes": "1.3.3" + } + }, + "@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/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==" + }, + "@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 + }, + "@repeaterjs/repeater": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@repeaterjs/repeater/-/repeater-3.0.5.tgz", + "integrity": "sha512-l3YHBLAol6d/IKnB9LhpD0cEZWAoe3eFKUyTYWmFmCO2Q/WOckxLQAUyMZWwZV2M/m3+4vgRoaolFqaII82/TA==" + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "dev": true, + "optional": true + }, + "@scarf/scarf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.3.0.tgz", + "integrity": "sha512-lHKK8M5CTcpFj2hZDB3wIjb0KAbEOgDmiJGDv1WBRfQgRm/a8/XMEkG/N1iM01xgbUDsPQwi42D+dFo1XPAKew==" + }, + "@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==" + }, + "@scure/bip32": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.2.tgz", + "integrity": "sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==", + "requires": { + "@noble/curves": "~1.2.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.2" + }, + "dependencies": { + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "requires": { + "@noble/hashes": "1.3.2" + } + }, + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" + } + } + }, + "@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", + "requires": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==" + } + } + }, + "@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "requires": { + "@stablelib/int": "^1.0.1" + } + }, + "@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "requires": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/sha256": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", + "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "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==", + "requires": { + "@types/bn.js": "^5.1.0", + "@types/node": "^18.0.4" + }, + "dependencies": { + "@types/node": { + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", + "requires": { + "undici-types": "~5.26.4" + } + } + } + }, + "@stacks/encryption": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@stacks/encryption/-/encryption-6.11.3.tgz", + "integrity": "sha512-nUA/21L8NnCw1vPetczWz3fjBCleqRgYfNGJX98AIDs9sjRQkxUfUGYz+3PlbpYgHWHIeRZafitQhMRpVhsbkQ==", + "requires": { + "@noble/hashes": "1.1.5", + "@noble/secp256k1": "1.7.1", + "@scure/bip39": "1.1.0", + "@stacks/common": "^6.10.0", + "@types/node": "^18.0.4", + "base64-js": "^1.5.1", + "bs58": "^5.0.0", + "ripemd160-min": "^0.0.6", + "varuint-bitcoin": "^1.1.2" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==" + }, + "@types/node": { + "version": "18.19.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.14.tgz", + "integrity": "sha512-EnQ4Us2rmOS64nHDWr0XqAD8DsO6f3XR6lf9UIIrZQpUzPVdN/oPuEzfDWNHSyXLvoGgjuEm/sPwFGSSs35Wtg==", + "requires": { + "undici-types": "~5.26.4" + } + } + } + }, + "@stacks/network": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.11.3.tgz", + "integrity": "sha512-c4ClCU/QUwuu8NbHtDKPJNa0M5YxauLN3vYaR0+S4awbhVIKFQSxirm9Q9ckV1WBh7FtD6u2S0x+tDQGAODjNg==", + "requires": { + "@stacks/common": "^6.10.0", + "cross-fetch": "^3.1.5" + } + }, + "@stacks/transactions": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.11.3.tgz", + "integrity": "sha512-Zb7ONYt8OJPTTdXQHobWqZ2mwTALpGt43PEsy2FpDgQzOodGk1lWDo1Jhzs3hhw/2ib5FE3iDMc6jptKe9miCg==", + "requires": { + "@noble/hashes": "1.1.5", + "@noble/secp256k1": "1.7.1", + "@stacks/common": "^6.10.0", + "@stacks/network": "^6.11.3", + "c32check": "^2.0.0", + "lodash.clonedeep": "^4.5.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.5.tgz", + "integrity": "sha512-LTMZiiLc+V4v1Yi16TD6aX2gmtKszNye0pQgbaLqkvhIqP7nVsSaJsWloGQjJfJ8offaoP5GtX3yY5swbcJxxQ==" + } + } + }, + "@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "requires": { + "@types/node": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true + }, + "@types/node": { + "version": "20.11.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz", + "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==", + "requires": { + "undici-types": "~5.26.4" + } + }, + "@vitest/expect": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.1.tgz", + "integrity": "sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==", + "dev": true, + "requires": { + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "chai": "^4.3.10" + } + }, + "@vitest/runner": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.1.tgz", + "integrity": "sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==", + "dev": true, + "requires": { + "@vitest/utils": "1.2.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + } + }, + "@vitest/snapshot": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.1.tgz", + "integrity": "sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==", + "dev": true, + "requires": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + } + }, + "@vitest/spy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.1.tgz", + "integrity": "sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==", + "dev": true, + "requires": { + "tinyspy": "^2.2.0" + } + }, + "@vitest/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==", + "dev": true, + "requires": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + } + }, + "abitype": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.9.8.tgz", + "integrity": "sha512-puLifILdm+8sjyss4S+fsUN09obiT1g2YW6CtcQF+QDzxR0euzgEB29MZujC6zMk2a6SVmtttq1fc6+YFA7WYQ==", + "requires": {} + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true + }, + "acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", + "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "requires": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + }, + "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==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "requires": { + "base-x": "^4.0.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "c32check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/c32check/-/c32check-2.0.0.tgz", + "integrity": "sha512-rpwfAcS/CMqo0oCqDf3r9eeLgScRE3l/xHDCXhM3UyrfvIn7PrLq63uHh7yYbv8NzaZn5MVsVhIRpQ+5GZ5HyA==", + "requires": { + "@noble/hashes": "^1.1.2", + "base-x": "^4.0.0" + } + }, + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, + "caip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/caip/-/caip-1.1.0.tgz", + "integrity": "sha512-yOO3Fu4ygyKYAdznuoaqschMKIZzcdgyMpBNtrIfrUhnOeaOWG+dh0c13wcOS6B/46IGGbncoyzJlio79jU7rw==" + }, + "canonicalize": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + }, + "cartonne": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cartonne/-/cartonne-3.0.1.tgz", + "integrity": "sha512-Y8DH//DthEUbfvOMGYj/9K3F1RcWkiVu2dB9tGkiBnMqojAXTpu+TUs9FNNx202H0TQdJgbPsQl7Q6NuJ48dCw==", + "requires": { + "@ipld/dag-cbor": "^9.0.7", + "multiformats": "^13.0.0", + "multihashes-sync": "^2.0.0", + "varintes": "^2.0.5" + }, + "dependencies": { + "@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==", + "requires": { + "cborg": "^4.0.0", + "multiformats": "^13.0.0" + } + }, + "cborg": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.0.8.tgz", + "integrity": "sha512-/6QDK0Hw//cV4YNWZZjdIUMFNw0DZmb56jdVGJPwXP7874gSN0AMYqM07mVKpAm+6Nn7U8lvYFzPgBGatC+5xw==" + } + } + }, + "cborg": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-1.10.2.tgz", + "integrity": "sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==" + }, + "chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "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.8" + } + }, + "check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } + }, + "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" + } + } + } + }, + "codeco": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/codeco/-/codeco-1.2.0.tgz", + "integrity": "sha512-SHTBW7QsiDtHGqEyhX10gZesmWlWV00gXteFyU2xLqyZmy658/+HlPyXG5EvY05+csQNWjBIfGg2mZrklR1RtQ==" + }, + "colors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", + "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "requires": { + "node-fetch": "^2.6.12" + }, + "dependencies": { + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "cross-inspect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cross-inspect/-/cross-inspect-1.0.0.tgz", + "integrity": "sha512-4PFfn4b5ZN6FMNGSZlyb7wUhuN8wvj8t/VQHZdM4JsDcruGJ8L2kf9zao98QIrBPFCpdk27qst/AGTl7pL3ypQ==", + "requires": { + "tslib": "^2.4.0" + } + }, + "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, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dag-jose": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dag-jose/-/dag-jose-4.0.0.tgz", + "integrity": "sha512-tw595L3UYoOUT9dSJPbBEG/qpRpw24kRZxa5SLRnlnr+g5L7O8oEs1d3W5TiVA1oJZbthVsf0Vi3zFN66qcEBA==", + "requires": { + "@ipld/dag-cbor": "^9.0.0", + "multiformats": "^11.0.0" + }, + "dependencies": { + "@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==", + "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==" + } + } + }, + "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": { + "multiformats": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-11.0.2.tgz", + "integrity": "sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==" + } + } + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + }, + "dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" + }, + "deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "did-jwt": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.4.7.tgz", + "integrity": "sha512-Apz7nIfIHSKWIMaEP5L/K8xkwByvjezjTG0xiqwKdnNj1x8M0+Yasury5Dm/KPltxi2PlGfRPf3IejRKZrT8mQ==", + "requires": { + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.0.0", + "@noble/hashes": "^1.3.0", + "@scure/base": "^1.1.3", + "canonicalize": "^2.0.0", + "did-resolver": "^4.1.0", + "multibase": "^4.0.6", + "multiformats": "^9.6.2", + "uint8arrays": "3.1.1" + }, + "dependencies": { + "canonicalize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.0.0.tgz", + "integrity": "sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==" + }, + "multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + }, + "uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "requires": { + "multiformats": "^9.4.2" + } + } + } + }, + "did-resolver": { + "version": "4.1.0", + "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==", + "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" + }, + "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" + } + }, + "@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==", + "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==" + } + } + }, + "diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true + }, + "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", + "integrity": "sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==" + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "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" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "requires": { + "@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" + } + }, + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, + "ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "requires": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/abstract-provider": "5.7.0", + "@ethersproject/abstract-signer": "5.7.0", + "@ethersproject/address": "5.7.0", + "@ethersproject/base64": "5.7.0", + "@ethersproject/basex": "5.7.0", + "@ethersproject/bignumber": "5.7.0", + "@ethersproject/bytes": "5.7.0", + "@ethersproject/constants": "5.7.0", + "@ethersproject/contracts": "5.7.0", + "@ethersproject/hash": "5.7.0", + "@ethersproject/hdnode": "5.7.0", + "@ethersproject/json-wallets": "5.7.0", + "@ethersproject/keccak256": "5.7.0", + "@ethersproject/logger": "5.7.0", + "@ethersproject/networks": "5.7.1", + "@ethersproject/pbkdf2": "5.7.0", + "@ethersproject/properties": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@ethersproject/random": "5.7.0", + "@ethersproject/rlp": "5.7.0", + "@ethersproject/sha2": "5.7.0", + "@ethersproject/signing-key": "5.7.0", + "@ethersproject/solidity": "5.7.0", + "@ethersproject/strings": "5.7.0", + "@ethersproject/transactions": "5.7.0", + "@ethersproject/units": "5.7.0", + "@ethersproject/wallet": "5.7.0", + "@ethersproject/web": "5.7.1", + "@ethersproject/wordlists": "5.7.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + } + }, + "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==" + }, + "fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" + }, + "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==" + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==" + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" + }, + "follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, + "get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true + }, + "gql-query-builder": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/gql-query-builder/-/gql-query-builder-3.8.0.tgz", + "integrity": "sha512-q0PncZTrLDeyiH4R7YH1ISM+XGB4NvQ8eTm/Wr/sHSuquFZvqvDpGyMhbgoCZDc8kNAK8GOdfh3nI2GCLREFvw==" + }, + "graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==" + }, + "graphql-relay": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/graphql-relay/-/graphql-relay-0.10.0.tgz", + "integrity": "sha512-44yBuw2/DLNEiMypbNZBt1yMDbBmyVPVesPywnteGGALiBmdyy1JP8jSg8ClLePg8ZZxk0O4BLhd1a6U/1jDOQ==", + "requires": {} + }, + "graphql-scalars": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/graphql-scalars/-/graphql-scalars-1.22.4.tgz", + "integrity": "sha512-ILnv7jq5VKHLUyoaTFX7lgYrjCd6vTee9i8/B+D4zJKJT5TguOl0KkpPEbXHjmeor8AZYrVsrYUHdqRBMX1pjA==", + "requires": { + "tslib": "^2.5.0" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isows": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.3.tgz", + "integrity": "sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==", + "requires": {} + }, + "it-first": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz", + "integrity": "sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg==" + }, + "jet-logger": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jet-logger/-/jet-logger-1.2.2.tgz", + "integrity": "sha512-Kbw4G3BC45+Umz5XBnsE50pHplruJTVKGRy5X1YfCu3Te7f8ggTL8Tm10YegAD2QP41MVQ3o/Y9MFAZzfythqw==", + "requires": { + "colors": "1.3.0" + } + }, + "js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json-schema-typed": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.1.tgz", + "integrity": "sha512-XQmWYj2Sm4kn4WeTYvmpKEbyPsL7nBsb647c7pMe6l02/yx2+Jfc4dT6UZkEXnIUb5LhD55r2HPsJ1milQ4rDg==" + }, + "jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", + "dev": true + }, + "jsonld": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.2.tgz", + "integrity": "sha512-MwBbq95szLwt8eVQ1Bcfwmgju/Y5P2GdtlHE2ncyfuYjIdEhluUVyj1eudacf1mOkWIoS9GpDBTECqhmq7EOaA==", + "requires": { + "@digitalbazaar/http-client": "^3.4.1", + "canonicalize": "^1.0.1", + "lru-cache": "^6.0.0", + "rdf-canonize": "^3.4.0" + } + }, + "jsontokens": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsontokens/-/jsontokens-4.0.1.tgz", + "integrity": "sha512-+MO415LEN6M+3FGsRz4wU20g7N2JA+2j9d9+pGaNJHviG4L8N0qzavGyENw6fJqsq9CcrHOIL6iWX5yeTZ86+Q==", + "requires": { + "@noble/hashes": "^1.1.2", + "@noble/secp256k1": "^1.6.3", + "base64-js": "^1.5.1" + } + }, + "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==", + "requires": { + "@noble/curves": "^1.1.0", + "did-jwt": "^7.2.0", + "dids": "^4.0.4", + "fast-json-stable-stringify": "^2.1.0", + "rpc-utils": "^0.6.2", + "uint8arrays": "^4.0.3" + } + }, + "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==", + "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", + "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==" + } + } + }, + "ky": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", + "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==" + }, + "ky-universal": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", + "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "requires": { + "abort-controller": "^3.0.0", + "node-fetch": "^3.2.10" + } + }, + "local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dev": true, + "requires": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + } + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "logfmt": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/logfmt/-/logfmt-1.4.0.tgz", + "integrity": "sha512-p1Ow0C2dDJYaQBhRHt+HVMP6ELuBm4jYSYNHPMfz0J5wJ9qA6/7oBOlBZBfT1InqguTYcvJzNea5FItDxTcbyw==", + "requires": { + "split": "0.2.x", + "through": "2.3.x" + } + }, + "loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "requires": { + "get-func-name": "^2.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "mapmoize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/mapmoize/-/mapmoize-1.2.1.tgz", + "integrity": "sha512-LK8ArSM1wbfRPTnl+LpdxW1pwkfY6GxtM9p+STr6aDtM7ImR8jLuf4ekei43/AN0f7XDSrohzwwK57eGHSDAuA==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "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==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dev": true, + "requires": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multibase": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", + "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", + "requires": { + "@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.0.1", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz", + "integrity": "sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA==" + }, + "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", + "integrity": "sha512-hoBamCqXuVmeo4NAY52dbYuUIKHy3/FcqxyKZSbhqicR2SbUjgiY4FoDvE8BV40dPfAJTT6pQpqYeuKxqKwOLQ==", + "requires": { + "@noble/hashes": "^1.3.3", + "multiformats": "^13.0.0" + } + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "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-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "npm-run-path": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", + "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "object-sizeof": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/object-sizeof/-/object-sizeof-2.6.4.tgz", + "integrity": "sha512-YuJAf7Bi61KROcYmXm8RCeBrBw8UOaJDzTm1gp0eU7RjYi1xEte3/Nmg/VyPaHcJZ3sNojs1Y0xvSrgwkLmcFw==", + "requires": { + "buffer": "^6.0.3" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "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-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "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 + }, + "pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "dev": true, + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "query-string": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz", + "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==", + "requires": { + "decode-uri-component": "^0.2.2", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "rdf-canonize": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", + "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "requires": { + "setimmediate": "^1.0.5" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "ripemd160-min": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz", + "integrity": "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==" + }, + "rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "rpc-utils": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rpc-utils/-/rpc-utils-0.6.2.tgz", + "integrity": "sha512-kzk1OflbBckfDBAo8JwsmtQSHzj+6hxRt5G+u8A8ZSmunBw1nhWvRkSq8j1+EvWBqBRLy1aiGLUW5644CZqQtA==", + "requires": { + "nanoid": "^3.3.1" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "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==" + }, + "schema-dts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz", + "integrity": "sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==", + "requires": {} + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "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, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "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 + }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "split": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", + "integrity": "sha512-e0pKq+UUH2Xq/sXbYpZBZc3BawsfDZ7dgv+JtRTUPNcvF5CMR4Y9cvJqkMY0MoxWzTHvZuz1beg6pNEKlszPiQ==", + "requires": { + "through": "2" + } + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" + }, + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "requires": { + "acorn": "^8.10.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "tinybench": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", + "dev": true + }, + "tinypool": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", + "dev": true + }, + "tinyspy": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", + "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "dev": true + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" + }, + "ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "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==" + } + } + }, + "undici": { + "version": "5.28.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.2.tgz", + "integrity": "sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==", + "requires": { + "@fastify/busboy": "^2.0.0" + } + }, + "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==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-safe-base64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/url-safe-base64/-/url-safe-base64-1.3.0.tgz", + "integrity": "sha512-MasquJt1L8/W996LP1BSsDL6UbApCv0Xal0eeeXUIfNXPEj3zM82XETcQSdurbmCmbeJnqRlhszHnWQzMiAZeQ==" + }, + "value-or-promise": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.12.tgz", + "integrity": "sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==" + }, + "varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==" + }, + "varintes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/varintes/-/varintes-2.0.5.tgz", + "integrity": "sha512-iF3jlHLko9NrYjaUZvT3VwypP3V20KNNhT1tzqblyIyrVjNiW7HseGOhuP+apgZBp9X/8+5pxa7kNikhJeZlIw==" + }, + "varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "viem": { + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/viem/-/viem-1.21.4.tgz", + "integrity": "sha512-BNVYdSaUjeS2zKQgPs+49e5JKocfo60Ib2yiXOWBT6LuVxY1I/6fFX3waEtpXvL1Xn4qu+BVitVtMh9lyThyhQ==", + "requires": { + "@adraffy/ens-normalize": "1.10.0", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@scure/bip32": "1.3.2", + "@scure/bip39": "1.2.1", + "abitype": "0.9.8", + "isows": "1.0.3", + "ws": "8.13.0" + }, + "dependencies": { + "@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "requires": { + "@noble/hashes": "1.3.2" + } + }, + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" + }, + "@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "requires": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} + } + } + }, + "vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dev": true, + "requires": { + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + } + }, + "vite-node": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.1.tgz", + "integrity": "sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + } + }, + "vitest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.1.tgz", + "integrity": "sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==", + "dev": true, + "requires": { + "@vitest/expect": "1.2.1", + "@vitest/runner": "1.2.1", + "@vitest/snapshot": "1.2.1", + "@vitest/spy": "1.2.1", + "@vitest/utils": "1.2.1", + "acorn-walk": "^8.3.2", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^1.3.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.1", + "vite": "^5.0.0", + "vite-node": "1.2.1", + "why-is-node-running": "^2.2.2" + } + }, + "vitest-github-actions-reporter": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/vitest-github-actions-reporter/-/vitest-github-actions-reporter-0.11.1.tgz", + "integrity": "sha512-ZHHB0wBgOPhMYCB17WKVlJZa+5SdudBZFoVoebwfq3ioIUTeLQGYHwh85vpdJAxRghLP8d0qI/6eCTueGyDVXA==", + "dev": true, + "requires": { + "@actions/core": "^1.10.0" + } + }, + "web-streams-polyfill": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", + "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "why-is-node-running": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", + "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "requires": {} + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } +} diff --git a/nodes-lib/package.json b/nodes-lib/package.json new file mode 100644 index 000000000..2cafcf32f --- /dev/null +++ b/nodes-lib/package.json @@ -0,0 +1,47 @@ +{ + "name": "@desci-labs/nodes-lib", + "version": "0.0.1", + "homepage": "https://github.com/desci-labs/nodes#readme", + "description": "Stand-alone client library for interacting with desci-server", + "repository": { + "type": "git", + "url": "git+https://github.com/desci-labs/nodes.git" + }, + "author": "Edvard Hübinette", + "license": "MIT", + "bugs": { + "url": "https://github.com/desci-labs/nodes/issues" + }, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "files": [ + "/dist", + "/.env.example" + ], + "scripts": { + "build": "rm -r dist; tsc --project tsconfig.build.json", + "doPublish": "npm run build && npm publish --access public --dry-run", + "test": "vitest --run --config vitest.config.ts", + "test:debug": "npm run test -- --inspect-brk --no-file-parallelism --test-timeout 99999999" + }, + "dependencies": { + "@desci-labs/desci-codex-lib": "^1.0.5", + "@desci-labs/desci-models": "^0.2.3-rc1", + "axios": "^1.6.5", + "dotenv": "^16.4.4", + "ethers": "^5.7.2", + "form-data": "^4.0.0", + "mime-types": "^2.1.35", + "multiformats": "^13.0.1", + "url-safe-base64": "^1.3.0" + }, + "devDependencies": { + "@desci-labs/desci-contracts": "^0.2.0-rc1", + "@types/mime-types": "^2.1.4", + "@types/node": "^20.11.5", + "typescript": "^5.3.3", + "vitest": "^1.2.1", + "vitest-github-actions-reporter": "^0.11.1" + } +} diff --git a/nodes-lib/src/abi/DpidRegistry.json b/nodes-lib/src/abi/DpidRegistry.json new file mode 100644 index 000000000..659f0a75e --- /dev/null +++ b/nodes-lib/src/abi/DpidRegistry.json @@ -0,0 +1,428 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DpidRegistry", + "sourceName": "contracts/DpidRegistry.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "entryId", + "type": "uint256" + } + ], + "name": "Register", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "registrant", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "tokenGate", + "type": "address[]" + } + ], + "name": "RegisterOrganization", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "registrant", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "tokenGate", + "type": "address[]" + } + ], + "name": "UpdateOrganization", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "entryId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "entryId", + "type": "uint256" + } + ], + "name": "get", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOrgFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + } + ], + "name": "getOrganization", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "organizations", + "outputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "registrant", + "type": "address" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "entry", + "type": "uint256" + } + ], + "name": "put", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + } + ], + "name": "registerOrg", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "tokenGate", + "type": "address[]" + } + ], + "name": "registerOrgWithGate", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "gweiFee", + "type": "uint256" + } + ], + "name": "setFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "gweiFee", + "type": "uint256" + } + ], + "name": "setOrgFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "source", + "type": "string" + } + ], + "name": "stringToBytes32", + "outputs": [ + { + "internalType": "bytes32", + "name": "result", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "tokenGate", + "type": "address[]" + } + ], + "name": "updateOrg", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + } + ], + "name": "validateCharacters", + "outputs": [ + { + "internalType": "bool", + "name": "valid", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000127565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e4919062000149565b60405180910390a15b565b6000620000fe60278362000166565b91506200010b8262000184565b604082019050919050565b620001218162000177565b82525050565b600060208201905081810360008301526200014281620000ef565b9050919050565b600060208201905062000160600083018462000116565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b61230880620001e36000396000f3fe6080604052600436106101145760003560e01c80638129fc1c116100a0578063ced72f8711610064578063ced72f871461037f578063cef25dbc146103aa578063cfb51928146103c6578063da4a984214610403578063f2fde38b1461043357610114565b80638129fc1c146102aa57806381e104ca146102c15780638da5cb5b146102ec578063a40a990b14610317578063ba51b14e1461034057610114565b80634b22d5d0116100e75780634b22d5d0146101c75780634fb6020e146102045780635cb316351461022d57806369fe0e2d1461026a578063715018a61461029357610114565b80631785b6771461011957806318ae19c21461013557806322b3cd4e146101725780633ccfd60b146101b0575b600080fd5b610133600480360381019061012e9190611889565b61045c565b005b34801561014157600080fd5b5061015c60048036038101906101579190611906565b6104d8565b6040516101699190611e0a565b60405180910390f35b34801561017e57600080fd5b5061019960048036038101906101949190611889565b610568565b6040516101a7929190611e25565b60405180910390f35b3480156101bc57600080fd5b506101c561060e565b005b3480156101d357600080fd5b506101ee60048036038101906101e99190611889565b61066c565b6040516101fb9190611bfb565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190611983565b610845565b005b34801561023957600080fd5b50610254600480360381019061024f9190611906565b610857565b6040516102619190611bfb565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190611983565b6108d8565b005b34801561029f57600080fd5b506102a86108ea565b005b3480156102b657600080fd5b506102bf6108fe565b005b3480156102cd57600080fd5b506102d6610cfa565b6040516102e39190611e0a565b60405180910390f35b3480156102f857600080fd5b50610301610d04565b60405161030e9190611be0565b60405180910390f35b34801561032357600080fd5b5061033e600480360381019061033991906118b2565b610d2e565b005b34801561034c57600080fd5b5061036760048036038101906103629190611889565b610e52565b60405161037693929190611c6f565b60405180910390f35b34801561038b57600080fd5b50610394610e9c565b6040516103a19190611e0a565b60405180910390f35b6103c460048036038101906103bf91906118b2565b610ea6565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190611942565b610f41565b6040516103fa9190611c16565b60405180910390f35b61041d60048036038101906104189190611906565b610f6b565b60405161042a9190611e0a565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190611860565b611227565b005b6104d581600067ffffffffffffffff8111156104a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156104cf5781602001602082028036833780820191505090505b50610ea6565b50565b600082606560008581526020019081526020016000206000015414610532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052990611d6a565b60405180910390fd5b60006065600085815260200190815260200160002090508060030160008481526020019081526020016000205491505092915050565b600080826065600085815260200190815260200160002060000154146105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90611d6a565b60405180910390fd5b600060656000858152602001908152602001600020905080600401548160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250925050915091565b6106166112ab565b6000610620610d04565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610668573d6000803e3d6000fd5b5050565b600080600090506000806040518060600160405280602781526020016122ac60279139905060005b602060ff1681101561082357600060f81b8682602081106106de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561071257809250610823565b60005b825181101561080f57828181518110610757577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168783602081106107bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156107fc5784806107f490611fcb565b95505061080f565b808061080790611fcb565b915050610715565b50808061081b90611fcb565b915050610694565b50818310156108385760009350505050610840565b600193505050505b919050565b61084d6112ab565b8060678190555050565b6000826065600085815260200190815260200160002060000154146108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890611d6a565b60405180910390fd5b60006065600085815260200190815260200160002090508060040154831091505092915050565b6108e06112ab565b8060668190555050565b6108f26112ab565b6108fc6000611329565b565b60008060019054906101000a900460ff1615905080801561092f5750600160008054906101000a900460ff1660ff16105b8061095c575061093e306113ef565b15801561095b5750600160008054906101000a900460ff1660ff16145b5b61099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290611d8a565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109d8576001600060016101000a81548160ff0219169083151502179055505b6601c6bf526340006066819055506706f05b59d3b2000060678190555060008067ffffffffffffffff811115610a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a655781602001602082028036833780820191505090505b509050610a73600082611412565b610a9d7f647069640000000000000000000000000000000000000000000000000000000082611412565b610ac77f646369746500000000000000000000000000000000000000000000000000000082611412565b610af17f646576000000000000000000000000000000000000000000000000000000000082611412565b610b1b7f737461676500000000000000000000000000000000000000000000000000000082611412565b610b457f626574610000000000000000000000000000000000000000000000000000000082611412565b610b6f7f646573636900000000000000000000000000000000000000000000000000000082611412565b610b997f6e6f64650000000000000000000000000000000000000000000000000000000082611412565b610bc37f6e6f64657300000000000000000000000000000000000000000000000000000082611412565b610bed7f646f69000000000000000000000000000000000000000000000000000000000082611412565b610c177f610000000000000000000000000000000000000000000000000000000000000082611412565b610c417f640000000000000000000000000000000000000000000000000000000000000082611412565b610c6b7f780000000000000000000000000000000000000000000000000000000000000082611412565b610c957f7a0000000000000000000000000000000000000000000000000000000000000082611412565b610c9d6115a5565b508015610cf75760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610cee9190611ccf565b60405180910390a15b50565b6000606754905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b81610d376115fe565b73ffffffffffffffffffffffffffffffffffffffff166065600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190611d4a565b60405180910390fd5b600060656000858152602001908152602001600020905082816002019080519060200190610e09929190611667565b507f2f78800ab5b47f6617eaf3124043ced0ee3ae49c0b4a77167ee4cd2fbc674f0484610e346115fe565b85604051610e4493929190611c31565b60405180910390a150505050565b60656020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b6000606654905090565b606754341015610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290611dea565b60405180910390fd5b610ef48261066c565b610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90611d6a565b60405180910390fd5b610f3d8282611412565b5050565b600080829050600081511415610f5d576000801b915050610f66565b60208301519150505b919050565b6000606654341015610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990611dea565b60405180910390fd5b8260656000858152602001908152602001600020600001541461100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190611d6a565b60405180910390fd5b60006065600085815260200190815260200160002090506000816002018054905011156111a6576000816002018054905090506000805b82811015611162576000846002018281548110611087577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a082316110da6115fe565b6040518263ffffffff1660e01b81526004016110f69190611be0565b60206040518083038186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906119ac565b1115611156576001925050611162565b81600101915050611041565b50806111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90611d2a565b60405180910390fd5b50505b60008160040154905083826003016000838152602001908152602001600020819055507fd5fa0e9a716b3ec4895a48223ad309e2d3fa5e27f04d8dc9b3c33cc738a50eb085826040516111fa929190611ca6565b60405180910390a181600401600081548092919061121790611fcb565b9190505550809250505092915050565b61122f6112ab565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561129f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129690611d0a565b60405180910390fd5b6112a881611329565b50565b6112b36115fe565b73ffffffffffffffffffffffffffffffffffffffff166112d1610d04565b73ffffffffffffffffffffffffffffffffffffffff1614611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90611daa565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000801b606560008481526020019081526020016000206000015414801561149c5750600073ffffffffffffffffffffffffffffffffffffffff166065600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290611cea565b60405180910390fd5b60006065600084815260200190815260200160002090506114fa6115fe565b8160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508281600001819055508181600201908051906020019061155d929190611667565b507f1603286ac6b9f753cbc1a1d33146ab15a401314d80d8553aa8fb1473df47f3ec836115886115fe565b8460405161159893929190611c31565b60405180910390a1505050565b600060019054906101000a900460ff166115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90611dca565b60405180910390fd5b6115fc611606565b565b600033905090565b600060019054906101000a900460ff16611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90611dca565b60405180910390fd5b6116656116606115fe565b611329565b565b8280548282559060005260206000209081019282156116e0579160200282015b828111156116df5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190611687565b5b5090506116ed91906116f1565b5090565b5b8082111561170a5760008160009055506001016116f2565b5090565b600061172161171c84611e73565b611e4e565b9050808382526020820190508285602086028201111561174057600080fd5b60005b85811015611770578161175688826117b8565b845260208401935060208301925050600181019050611743565b5050509392505050565b600061178d61178884611e9f565b611e4e565b9050828152602081018484840111156117a557600080fd5b6117b0848285611f8b565b509392505050565b6000813590506117c781612266565b92915050565b600082601f8301126117de57600080fd5b81356117ee84826020860161170e565b91505092915050565b6000813590506118068161227d565b92915050565b600082601f83011261181d57600080fd5b813561182d84826020860161177a565b91505092915050565b60008135905061184581612294565b92915050565b60008151905061185a81612294565b92915050565b60006020828403121561187257600080fd5b6000611880848285016117b8565b91505092915050565b60006020828403121561189b57600080fd5b60006118a9848285016117f7565b91505092915050565b600080604083850312156118c557600080fd5b60006118d3858286016117f7565b925050602083013567ffffffffffffffff8111156118f057600080fd5b6118fc858286016117cd565b9150509250929050565b6000806040838503121561191957600080fd5b6000611927858286016117f7565b925050602061193885828601611836565b9150509250929050565b60006020828403121561195457600080fd5b600082013567ffffffffffffffff81111561196e57600080fd5b61197a8482850161180c565b91505092915050565b60006020828403121561199557600080fd5b60006119a384828501611836565b91505092915050565b6000602082840312156119be57600080fd5b60006119cc8482850161184b565b91505092915050565b60006119e183836119ed565b60208301905092915050565b6119f681611f1a565b82525050565b611a0581611f1a565b82525050565b6000611a1682611ee0565b611a208185611ef8565b9350611a2b83611ed0565b8060005b83811015611a5c578151611a4388826119d5565b9750611a4e83611eeb565b925050600181019050611a2f565b5085935050505092915050565b611a7281611f2c565b82525050565b611a8181611f38565b82525050565b611a9081611f79565b82525050565b6000611aa3600c83611f09565b9150611aae82612083565b602082019050919050565b6000611ac6602683611f09565b9150611ad1826120ac565b604082019050919050565b6000611ae9601883611f09565b9150611af4826120fb565b602082019050919050565b6000611b0c601283611f09565b9150611b1782612124565b602082019050919050565b6000611b2f600e83611f09565b9150611b3a8261214d565b602082019050919050565b6000611b52602e83611f09565b9150611b5d82612176565b604082019050919050565b6000611b75602083611f09565b9150611b80826121c5565b602082019050919050565b6000611b98602b83611f09565b9150611ba3826121ee565b604082019050919050565b6000611bbb600c83611f09565b9150611bc68261223d565b602082019050919050565b611bda81611f62565b82525050565b6000602082019050611bf560008301846119fc565b92915050565b6000602082019050611c106000830184611a69565b92915050565b6000602082019050611c2b6000830184611a78565b92915050565b6000606082019050611c466000830186611a78565b611c5360208301856119fc565b8181036040830152611c658184611a0b565b9050949350505050565b6000606082019050611c846000830186611a78565b611c9160208301856119fc565b611c9e6040830184611bd1565b949350505050565b6000604082019050611cbb6000830185611a78565b611cc86020830184611bd1565b9392505050565b6000602082019050611ce46000830184611a87565b92915050565b60006020820190508181036000830152611d0381611a96565b9050919050565b60006020820190508181036000830152611d2381611ab9565b9050919050565b60006020820190508181036000830152611d4381611adc565b9050919050565b60006020820190508181036000830152611d6381611aff565b9050919050565b60006020820190508181036000830152611d8381611b22565b9050919050565b60006020820190508181036000830152611da381611b45565b9050919050565b60006020820190508181036000830152611dc381611b68565b9050919050565b60006020820190508181036000830152611de381611b8b565b9050919050565b60006020820190508181036000830152611e0381611bae565b9050919050565b6000602082019050611e1f6000830184611bd1565b92915050565b6000604082019050611e3a6000830185611bd1565b611e4760208301846119fc565b9392505050565b6000611e58611e69565b9050611e648282611f9a565b919050565b6000604051905090565b600067ffffffffffffffff821115611e8e57611e8d612043565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611eba57611eb9612043565b5b611ec382612072565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611f2582611f42565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611f8482611f6c565b9050919050565b82818337600083830152505050565b611fa382612072565b810181811067ffffffffffffffff82111715611fc257611fc1612043565b5b80604052505050565b6000611fd682611f62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561200957612008612014565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5072656669782074616b656e0000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f556e617574686f72697a65643a20546f6b656e20676174650000000000000000600082015250565b7f4f6e6c79206f776e657220757064617465730000000000000000000000000000600082015250565b7f496e76616c696420707265666978000000000000000000000000000000000000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f4665652072657175697265640000000000000000000000000000000000000000600082015250565b61226f81611f1a565b811461227a57600080fd5b50565b61228681611f38565b811461229157600080fd5b50565b61229d81611f62565b81146122a857600080fd5b5056fe6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f2ea2646970667358221220b8cac9a8d8f3de013face3e7fec9a14f0a1e3f3d09fe342a5252c76f07a42da364736f6c63430008040033", + "deployedBytecode": "0x6080604052600436106101145760003560e01c80638129fc1c116100a0578063ced72f8711610064578063ced72f871461037f578063cef25dbc146103aa578063cfb51928146103c6578063da4a984214610403578063f2fde38b1461043357610114565b80638129fc1c146102aa57806381e104ca146102c15780638da5cb5b146102ec578063a40a990b14610317578063ba51b14e1461034057610114565b80634b22d5d0116100e75780634b22d5d0146101c75780634fb6020e146102045780635cb316351461022d57806369fe0e2d1461026a578063715018a61461029357610114565b80631785b6771461011957806318ae19c21461013557806322b3cd4e146101725780633ccfd60b146101b0575b600080fd5b610133600480360381019061012e9190611889565b61045c565b005b34801561014157600080fd5b5061015c60048036038101906101579190611906565b6104d8565b6040516101699190611e0a565b60405180910390f35b34801561017e57600080fd5b5061019960048036038101906101949190611889565b610568565b6040516101a7929190611e25565b60405180910390f35b3480156101bc57600080fd5b506101c561060e565b005b3480156101d357600080fd5b506101ee60048036038101906101e99190611889565b61066c565b6040516101fb9190611bfb565b60405180910390f35b34801561021057600080fd5b5061022b60048036038101906102269190611983565b610845565b005b34801561023957600080fd5b50610254600480360381019061024f9190611906565b610857565b6040516102619190611bfb565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190611983565b6108d8565b005b34801561029f57600080fd5b506102a86108ea565b005b3480156102b657600080fd5b506102bf6108fe565b005b3480156102cd57600080fd5b506102d6610cfa565b6040516102e39190611e0a565b60405180910390f35b3480156102f857600080fd5b50610301610d04565b60405161030e9190611be0565b60405180910390f35b34801561032357600080fd5b5061033e600480360381019061033991906118b2565b610d2e565b005b34801561034c57600080fd5b5061036760048036038101906103629190611889565b610e52565b60405161037693929190611c6f565b60405180910390f35b34801561038b57600080fd5b50610394610e9c565b6040516103a19190611e0a565b60405180910390f35b6103c460048036038101906103bf91906118b2565b610ea6565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190611942565b610f41565b6040516103fa9190611c16565b60405180910390f35b61041d60048036038101906104189190611906565b610f6b565b60405161042a9190611e0a565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190611860565b611227565b005b6104d581600067ffffffffffffffff8111156104a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156104cf5781602001602082028036833780820191505090505b50610ea6565b50565b600082606560008581526020019081526020016000206000015414610532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052990611d6a565b60405180910390fd5b60006065600085815260200190815260200160002090508060030160008481526020019081526020016000205491505092915050565b600080826065600085815260200190815260200160002060000154146105c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ba90611d6a565b60405180910390fd5b600060656000858152602001908152602001600020905080600401548160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250925050915091565b6106166112ab565b6000610620610d04565b90508073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610668573d6000803e3d6000fd5b5050565b600080600090506000806040518060600160405280602781526020016122ac60279139905060005b602060ff1681101561082357600060f81b8682602081106106de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141561071257809250610823565b60005b825181101561080f57828181518110610757577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168783602081106107bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614156107fc5784806107f490611fcb565b95505061080f565b808061080790611fcb565b915050610715565b50808061081b90611fcb565b915050610694565b50818310156108385760009350505050610840565b600193505050505b919050565b61084d6112ab565b8060678190555050565b6000826065600085815260200190815260200160002060000154146108b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a890611d6a565b60405180910390fd5b60006065600085815260200190815260200160002090508060040154831091505092915050565b6108e06112ab565b8060668190555050565b6108f26112ab565b6108fc6000611329565b565b60008060019054906101000a900460ff1615905080801561092f5750600160008054906101000a900460ff1660ff16105b8061095c575061093e306113ef565b15801561095b5750600160008054906101000a900460ff1660ff16145b5b61099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290611d8a565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109d8576001600060016101000a81548160ff0219169083151502179055505b6601c6bf526340006066819055506706f05b59d3b2000060678190555060008067ffffffffffffffff811115610a37577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a655781602001602082028036833780820191505090505b509050610a73600082611412565b610a9d7f647069640000000000000000000000000000000000000000000000000000000082611412565b610ac77f646369746500000000000000000000000000000000000000000000000000000082611412565b610af17f646576000000000000000000000000000000000000000000000000000000000082611412565b610b1b7f737461676500000000000000000000000000000000000000000000000000000082611412565b610b457f626574610000000000000000000000000000000000000000000000000000000082611412565b610b6f7f646573636900000000000000000000000000000000000000000000000000000082611412565b610b997f6e6f64650000000000000000000000000000000000000000000000000000000082611412565b610bc37f6e6f64657300000000000000000000000000000000000000000000000000000082611412565b610bed7f646f69000000000000000000000000000000000000000000000000000000000082611412565b610c177f610000000000000000000000000000000000000000000000000000000000000082611412565b610c417f640000000000000000000000000000000000000000000000000000000000000082611412565b610c6b7f780000000000000000000000000000000000000000000000000000000000000082611412565b610c957f7a0000000000000000000000000000000000000000000000000000000000000082611412565b610c9d6115a5565b508015610cf75760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610cee9190611ccf565b60405180910390a15b50565b6000606754905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b81610d376115fe565b73ffffffffffffffffffffffffffffffffffffffff166065600083815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190611d4a565b60405180910390fd5b600060656000858152602001908152602001600020905082816002019080519060200190610e09929190611667565b507f2f78800ab5b47f6617eaf3124043ced0ee3ae49c0b4a77167ee4cd2fbc674f0484610e346115fe565b85604051610e4493929190611c31565b60405180910390a150505050565b60656020528060005260406000206000915090508060000154908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b6000606654905090565b606754341015610eeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee290611dea565b60405180910390fd5b610ef48261066c565b610f33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2a90611d6a565b60405180910390fd5b610f3d8282611412565b5050565b600080829050600081511415610f5d576000801b915050610f66565b60208301519150505b919050565b6000606654341015610fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa990611dea565b60405180910390fd5b8260656000858152602001908152602001600020600001541461100a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100190611d6a565b60405180910390fd5b60006065600085815260200190815260200160002090506000816002018054905011156111a6576000816002018054905090506000805b82811015611162576000846002018281548110611087577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a082316110da6115fe565b6040518263ffffffff1660e01b81526004016110f69190611be0565b60206040518083038186803b15801561110e57600080fd5b505afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114691906119ac565b1115611156576001925050611162565b81600101915050611041565b50806111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90611d2a565b60405180910390fd5b50505b60008160040154905083826003016000838152602001908152602001600020819055507fd5fa0e9a716b3ec4895a48223ad309e2d3fa5e27f04d8dc9b3c33cc738a50eb085826040516111fa929190611ca6565b60405180910390a181600401600081548092919061121790611fcb565b9190505550809250505092915050565b61122f6112ab565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561129f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129690611d0a565b60405180910390fd5b6112a881611329565b50565b6112b36115fe565b73ffffffffffffffffffffffffffffffffffffffff166112d1610d04565b73ffffffffffffffffffffffffffffffffffffffff1614611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e90611daa565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000801b606560008481526020019081526020016000206000015414801561149c5750600073ffffffffffffffffffffffffffffffffffffffff166065600084815260200190815260200160002060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290611cea565b60405180910390fd5b60006065600084815260200190815260200160002090506114fa6115fe565b8160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508281600001819055508181600201908051906020019061155d929190611667565b507f1603286ac6b9f753cbc1a1d33146ab15a401314d80d8553aa8fb1473df47f3ec836115886115fe565b8460405161159893929190611c31565b60405180910390a1505050565b600060019054906101000a900460ff166115f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115eb90611dca565b60405180910390fd5b6115fc611606565b565b600033905090565b600060019054906101000a900460ff16611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90611dca565b60405180910390fd5b6116656116606115fe565b611329565b565b8280548282559060005260206000209081019282156116e0579160200282015b828111156116df5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190611687565b5b5090506116ed91906116f1565b5090565b5b8082111561170a5760008160009055506001016116f2565b5090565b600061172161171c84611e73565b611e4e565b9050808382526020820190508285602086028201111561174057600080fd5b60005b85811015611770578161175688826117b8565b845260208401935060208301925050600181019050611743565b5050509392505050565b600061178d61178884611e9f565b611e4e565b9050828152602081018484840111156117a557600080fd5b6117b0848285611f8b565b509392505050565b6000813590506117c781612266565b92915050565b600082601f8301126117de57600080fd5b81356117ee84826020860161170e565b91505092915050565b6000813590506118068161227d565b92915050565b600082601f83011261181d57600080fd5b813561182d84826020860161177a565b91505092915050565b60008135905061184581612294565b92915050565b60008151905061185a81612294565b92915050565b60006020828403121561187257600080fd5b6000611880848285016117b8565b91505092915050565b60006020828403121561189b57600080fd5b60006118a9848285016117f7565b91505092915050565b600080604083850312156118c557600080fd5b60006118d3858286016117f7565b925050602083013567ffffffffffffffff8111156118f057600080fd5b6118fc858286016117cd565b9150509250929050565b6000806040838503121561191957600080fd5b6000611927858286016117f7565b925050602061193885828601611836565b9150509250929050565b60006020828403121561195457600080fd5b600082013567ffffffffffffffff81111561196e57600080fd5b61197a8482850161180c565b91505092915050565b60006020828403121561199557600080fd5b60006119a384828501611836565b91505092915050565b6000602082840312156119be57600080fd5b60006119cc8482850161184b565b91505092915050565b60006119e183836119ed565b60208301905092915050565b6119f681611f1a565b82525050565b611a0581611f1a565b82525050565b6000611a1682611ee0565b611a208185611ef8565b9350611a2b83611ed0565b8060005b83811015611a5c578151611a4388826119d5565b9750611a4e83611eeb565b925050600181019050611a2f565b5085935050505092915050565b611a7281611f2c565b82525050565b611a8181611f38565b82525050565b611a9081611f79565b82525050565b6000611aa3600c83611f09565b9150611aae82612083565b602082019050919050565b6000611ac6602683611f09565b9150611ad1826120ac565b604082019050919050565b6000611ae9601883611f09565b9150611af4826120fb565b602082019050919050565b6000611b0c601283611f09565b9150611b1782612124565b602082019050919050565b6000611b2f600e83611f09565b9150611b3a8261214d565b602082019050919050565b6000611b52602e83611f09565b9150611b5d82612176565b604082019050919050565b6000611b75602083611f09565b9150611b80826121c5565b602082019050919050565b6000611b98602b83611f09565b9150611ba3826121ee565b604082019050919050565b6000611bbb600c83611f09565b9150611bc68261223d565b602082019050919050565b611bda81611f62565b82525050565b6000602082019050611bf560008301846119fc565b92915050565b6000602082019050611c106000830184611a69565b92915050565b6000602082019050611c2b6000830184611a78565b92915050565b6000606082019050611c466000830186611a78565b611c5360208301856119fc565b8181036040830152611c658184611a0b565b9050949350505050565b6000606082019050611c846000830186611a78565b611c9160208301856119fc565b611c9e6040830184611bd1565b949350505050565b6000604082019050611cbb6000830185611a78565b611cc86020830184611bd1565b9392505050565b6000602082019050611ce46000830184611a87565b92915050565b60006020820190508181036000830152611d0381611a96565b9050919050565b60006020820190508181036000830152611d2381611ab9565b9050919050565b60006020820190508181036000830152611d4381611adc565b9050919050565b60006020820190508181036000830152611d6381611aff565b9050919050565b60006020820190508181036000830152611d8381611b22565b9050919050565b60006020820190508181036000830152611da381611b45565b9050919050565b60006020820190508181036000830152611dc381611b68565b9050919050565b60006020820190508181036000830152611de381611b8b565b9050919050565b60006020820190508181036000830152611e0381611bae565b9050919050565b6000602082019050611e1f6000830184611bd1565b92915050565b6000604082019050611e3a6000830185611bd1565b611e4760208301846119fc565b9392505050565b6000611e58611e69565b9050611e648282611f9a565b919050565b6000604051905090565b600067ffffffffffffffff821115611e8e57611e8d612043565b5b602082029050602081019050919050565b600067ffffffffffffffff821115611eba57611eb9612043565b5b611ec382612072565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611f2582611f42565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611f8482611f6c565b9050919050565b82818337600083830152505050565b611fa382612072565b810181811067ffffffffffffffff82111715611fc257611fc1612043565b5b80604052505050565b6000611fd682611f62565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561200957612008612014565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5072656669782074616b656e0000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f556e617574686f72697a65643a20546f6b656e20676174650000000000000000600082015250565b7f4f6e6c79206f776e657220757064617465730000000000000000000000000000600082015250565b7f496e76616c696420707265666978000000000000000000000000000000000000600082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f4665652072657175697265640000000000000000000000000000000000000000600082015250565b61226f81611f1a565b811461227a57600080fd5b50565b61228681611f38565b811461229157600080fd5b50565b61229d81611f62565b81146122a857600080fd5b5056fe6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f2ea2646970667358221220b8cac9a8d8f3de013face3e7fec9a14f0a1e3f3d09fe342a5252c76f07a42da364736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/nodes-lib/src/abi/ResearchObject.json b/nodes-lib/src/abi/ResearchObject.json new file mode 100644 index 000000000..3ee1ed823 --- /dev/null +++ b/nodes-lib/src/abi/ResearchObject.json @@ -0,0 +1,608 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ResearchObject", + "sourceName": "contracts/ResearchObject.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "_uuid", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_cid", + "type": "bytes" + } + ], + "name": "VersionPush", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "__VersionedERC721_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "_dpidRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "_metadata", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "exists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dpidRegistry", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "uuid", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "cid", + "type": "bytes" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "uuid", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "cid", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "prefix", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "expectedDpid", + "type": "uint256" + } + ], + "name": "mintWithDpid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dpidRegistry", + "type": "address" + } + ], + "name": "setRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "uri", + "type": "string" + } + ], + "name": "setURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "cid", + "type": "bytes" + } + ], + "name": "updateMetadata", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b50620000226200002860201b60201c565b620001d3565b600060019054906101000a900460ff16156200007b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000729062000127565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620000ed5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620000e4919062000149565b60405180910390a15b565b6000620000fe60278362000166565b91506200010b8262000184565b604082019050919050565b620001218162000177565b82525050565b600060208201905081810360008301526200014281620000ef565b9050919050565b600060208201905062000160600083018462000116565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b613b2480620001e36000396000f3fe6080604052600436106101815760003560e01c8063715018a6116100d1578063b88d4fde1161008a578063c88efd1511610064578063c88efd151461058e578063db7fd408146105aa578063e985e9c5146105d3578063f2fde38b1461061057610181565b8063b88d4fde146104ff578063c4d66de814610528578063c87b56dd1461055157610181565b8063715018a6146104175780638da5cb5b1461042e57806395d89b41146104595780639a7fad4014610484578063a22cb465146104ad578063a91ee0dc146104d657610181565b806323b872dd1161013e5780634f558e79116101185780634f558e7914610337578063599ad936146103745780636352211e1461039d57806370a08231146103da57610181565b806323b872dd146102ba5780633dcd3236146102e357806342842e0e1461030e57610181565b806301ffc9a71461018657806302fe5305146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806313859f461461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a891906128a5565b610639565b6040516101ba9190612f11565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906128f7565b61071b565b005b3480156101f857600080fd5b5061020161073d565b60405161020e9190612f92565b60405180910390f35b34801561022357600080fd5b5061023e600480360381019061023991906129a4565b6107cf565b60405161024b9190612eaa565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612869565b610815565b005b34801561028957600080fd5b506102a4600480360381019061029f91906129a4565b61092d565b6040516102b19190612f55565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190612763565b6109cd565b005b3480156102ef57600080fd5b506102f8610a2d565b6040516103059190612eaa565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190612763565b610a53565b005b34801561034357600080fd5b5061035e600480360381019061035991906129a4565b610a73565b60405161036b9190612f11565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612938565b610a85565b005b3480156103a957600080fd5b506103c460048036038101906103bf91906129a4565b610ae2565b6040516103d19190612eaa565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc91906126fe565b610b94565b60405161040e91906131f4565b60405180910390f35b34801561042357600080fd5b5061042c610c4c565b005b34801561043a57600080fd5b50610443610c60565b6040516104509190612eaa565b60405180910390f35b34801561046557600080fd5b5061046e610c8a565b60405161047b9190612f92565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190612ace565b610d1c565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061282d565b610e29565b005b3480156104e257600080fd5b506104fd60048036038101906104f891906126fe565b610e3f565b005b34801561050b57600080fd5b50610526600480360381019061052191906127b2565b610e8b565b005b34801561053457600080fd5b5061054f600480360381019061054a91906126fe565b610eed565b005b34801561055d57600080fd5b50610578600480360381019061057391906129a4565b6110e1565b6040516105859190612f92565b60405180910390f35b6105a860048036038101906105a39190612a4e565b611149565b005b3480156105b657600080fd5b506105d160048036038101906105cc91906129f6565b611258565b005b3480156105df57600080fd5b506105fa60048036038101906105f59190612727565b6112c8565b6040516106079190612f11565b60405180910390f35b34801561061c57600080fd5b50610637600480360381019061063291906126fe565b61135c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107145750610713826113e0565b5b9050919050565b61072361144a565b8060ca9080519060200190610739929190612428565b5050565b60606065805461074c90613473565b80601f016020809104026020016040519081016040528092919081815260200182805461077890613473565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b60006107da826114c8565b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061082082610ae2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890613194565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108b0611513565b73ffffffffffffffffffffffffffffffffffffffff1614806108df57506108de816108d9611513565b6112c8565b5b61091e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610915906130f4565b60405180910390fd5b610928838361151b565b505050565b6097602052806000526040600020600091509050805461094c90613473565b80601f016020809104026020016040519081016040528092919081815260200182805461097890613473565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b505050505081565b6109de6109d8611513565b826115d4565b610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a14906131d4565b60405180910390fd5b610a28838383611669565b505050565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a6e83838360405180602001604052806000815250610e8b565b505050565b6000610a7e826118d0565b9050919050565b600060019054906101000a900460ff16610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb906131b4565b60405180910390fd5b610ade828261193c565b5050565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613174565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc906130b4565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c5461144a565b610c5e6000611999565b565b6000609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060668054610c9990613473565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc590613473565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b816000610d27611513565b905060008173ffffffffffffffffffffffffffffffffffffffff16610d4b84610ae2565b73ffffffffffffffffffffffffffffffffffffffff1614905080610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613134565b60405180910390fd5b83609760008781526020019081526020016000209080519060200190610dcb9291906124ae565b5084610dd5611513565b73ffffffffffffffffffffffffffffffffffffffff167fabddf73bfc8efbf8287a09ea355e43cf6c0c22880ce0470affeba5271c0a769486604051610e1a9190612f55565b60405180910390a35050505050565b610e3b610e34611513565b8383611a5f565b5050565b610e4761144a565b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e9c610e96611513565b836115d4565b610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed2906131d4565b60405180910390fd5b610ee784848484611bcc565b50505050565b60008060019054906101000a900460ff16159050808015610f1e5750600160008054906101000a900460ff1660ff16105b80610f4b5750610f2d30611c28565b158015610f4a5750600160008054906101000a900460ff1660ff16145b5b610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f81906130d4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610fc7576001600060016101000a81548160ff0219169083151502179055505b61103b6040518060400160405280601581526020017f4465536369205265736561726368204f626a65637400000000000000000000008152506040518060400160405280600a81526020017f44655363692d4e6f646500000000000000000000000000000000000000000000815250610a85565b611043611c4b565b8160cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156110dd5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516110d49190612f77565b60405180910390a15b5050565b60606110ec826114c8565b60006110f6611ca4565b905060008151116111165760405180602001604052806000815250611141565b8061112084611d36565b604051602001611131929190612e86565b6040516020818303038152906040525b915050919050565b600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663da4a984234868a6040518463ffffffff1660e01b81526004016111ae929190612f2c565b6020604051808303818588803b1580156111c757600080fd5b505af11580156111db573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061120091906129cd565b9050808314611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613034565b60405180910390fd5b61124f878787611258565b50505050505050565b6000611262611513565b905060008490506112738282611ee3565b6112c18585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610d1c565b5050505050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61136461144a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90612fd4565b60405180910390fd5b6113dd81611999565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611452611513565b73ffffffffffffffffffffffffffffffffffffffff16611470610c60565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90613154565b60405180910390fd5b565b6114d1816118d0565b611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613174565b60405180910390fd5b50565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661158e83610ae2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806115e083610ae2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611622575061162181856112c8565b5b8061166057508373ffffffffffffffffffffffffffffffffffffffff16611648846107cf565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661168982610ae2565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690612ff4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613054565b60405180910390fd5b61175a838383611f01565b61176560008261151b565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b59190613360565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461180c91906132d9565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118cb838383611f75565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600060019054906101000a900460ff1661198b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611982906131b4565b60405180910390fd5b6119958282611f7a565b5050565b6000609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613074565b60405180910390fd5b80606a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bbf9190612f11565b60405180910390a3505050565b611bd7848484611669565b611be384848484611ffb565b611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990612fb4565b60405180910390fd5b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c91906131b4565b60405180910390fd5b611ca2612192565b565b606060ca8054611cb390613473565b80601f0160208091040260200160405190810160405280929190818152602001828054611cdf90613473565b8015611d2c5780601f10611d0157610100808354040283529160200191611d2c565b820191906000526020600020905b815481529060010190602001808311611d0f57829003601f168201915b5050505050905090565b60606000821415611d7e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ede565b600082905060005b60008214611db0578080611d99906134d6565b915050600a82611da9919061332f565b9150611d86565b60008167ffffffffffffffff811115611df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e245781602001600182028036833780820191505090505b5090505b60008514611ed757600182611e3d9190613360565b9150600a85611e4c919061351f565b6030611e5891906132d9565b60f81b818381518110611e94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ed0919061332f565b9450611e28565b8093505050505b919050565b611efd8282604051806020016040528060008152506121f3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790613094565b60405180910390fd5b505050565b505050565b600060019054906101000a900460ff16611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc0906131b4565b60405180910390fd5b8160659080519060200190611fdf929190612428565b508060669080519060200190611ff6929190612428565b505050565b600061201c8473ffffffffffffffffffffffffffffffffffffffff16611c28565b15612185578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612045611513565b8786866040518563ffffffff1660e01b81526004016120679493929190612ec5565b602060405180830381600087803b15801561208157600080fd5b505af19250505080156120b257506040513d601f19601f820116820180604052508101906120af91906128ce565b60015b612135573d80600081146120e2576040519150601f19603f3d011682016040523d82523d6000602084013e6120e7565b606091505b5060008151141561212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490612fb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061218a565b600190505b949350505050565b600060019054906101000a900460ff166121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d8906131b4565b60405180910390fd5b6121f16121ec611513565b611999565b565b6121fd838361224e565b61220a6000848484611ffb565b612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090612fb4565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613114565b60405180910390fd5b6122c7816118d0565b15612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90613014565b60405180910390fd5b61231360008383611f01565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461236391906132d9565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461242460008383611f75565b5050565b82805461243490613473565b90600052602060002090601f016020900481019282612456576000855561249d565b82601f1061246f57805160ff191683800117855561249d565b8280016001018555821561249d579182015b8281111561249c578251825591602001919060010190612481565b5b5090506124aa9190612534565b5090565b8280546124ba90613473565b90600052602060002090601f0160209004810192826124dc5760008555612523565b82601f106124f557805160ff1916838001178555612523565b82800160010185558215612523579182015b82811115612522578251825591602001919060010190612507565b5b5090506125309190612534565b5090565b5b8082111561254d576000816000905550600101612535565b5090565b600061256461255f84613234565b61320f565b90508281526020810184848401111561257c57600080fd5b612587848285613431565b509392505050565b60006125a261259d84613265565b61320f565b9050828152602081018484840111156125ba57600080fd5b6125c5848285613431565b509392505050565b6000813590506125dc81613a7b565b92915050565b6000813590506125f181613a92565b92915050565b60008135905061260681613aa9565b92915050565b60008135905061261b81613ac0565b92915050565b60008151905061263081613ac0565b92915050565b60008083601f84011261264857600080fd5b8235905067ffffffffffffffff81111561266157600080fd5b60208301915083600182028301111561267957600080fd5b9250929050565b600082601f83011261269157600080fd5b81356126a1848260208601612551565b91505092915050565b600082601f8301126126bb57600080fd5b81356126cb84826020860161258f565b91505092915050565b6000813590506126e381613ad7565b92915050565b6000815190506126f881613ad7565b92915050565b60006020828403121561271057600080fd5b600061271e848285016125cd565b91505092915050565b6000806040838503121561273a57600080fd5b6000612748858286016125cd565b9250506020612759858286016125cd565b9150509250929050565b60008060006060848603121561277857600080fd5b6000612786868287016125cd565b9350506020612797868287016125cd565b92505060406127a8868287016126d4565b9150509250925092565b600080600080608085870312156127c857600080fd5b60006127d6878288016125cd565b94505060206127e7878288016125cd565b93505060406127f8878288016126d4565b925050606085013567ffffffffffffffff81111561281557600080fd5b61282187828801612680565b91505092959194509250565b6000806040838503121561284057600080fd5b600061284e858286016125cd565b925050602061285f858286016125e2565b9150509250929050565b6000806040838503121561287c57600080fd5b600061288a858286016125cd565b925050602061289b858286016126d4565b9150509250929050565b6000602082840312156128b757600080fd5b60006128c58482850161260c565b91505092915050565b6000602082840312156128e057600080fd5b60006128ee84828501612621565b91505092915050565b60006020828403121561290957600080fd5b600082013567ffffffffffffffff81111561292357600080fd5b61292f848285016126aa565b91505092915050565b6000806040838503121561294b57600080fd5b600083013567ffffffffffffffff81111561296557600080fd5b612971858286016126aa565b925050602083013567ffffffffffffffff81111561298e57600080fd5b61299a858286016126aa565b9150509250929050565b6000602082840312156129b657600080fd5b60006129c4848285016126d4565b91505092915050565b6000602082840312156129df57600080fd5b60006129ed848285016126e9565b91505092915050565b600080600060408486031215612a0b57600080fd5b6000612a19868287016126d4565b935050602084013567ffffffffffffffff811115612a3657600080fd5b612a4286828701612636565b92509250509250925092565b600080600080600060808688031215612a6657600080fd5b6000612a74888289016126d4565b955050602086013567ffffffffffffffff811115612a9157600080fd5b612a9d88828901612636565b94509450506040612ab0888289016125f7565b9250506060612ac1888289016126d4565b9150509295509295909350565b60008060408385031215612ae157600080fd5b6000612aef858286016126d4565b925050602083013567ffffffffffffffff811115612b0c57600080fd5b612b1885828601612680565b9150509250929050565b612b2b81613394565b82525050565b612b3a816133a6565b82525050565b612b49816133b2565b82525050565b6000612b5a82613296565b612b6481856132ac565b9350612b74818560208601613440565b612b7d8161360c565b840191505092915050565b612b918161341f565b82525050565b6000612ba2826132a1565b612bac81856132bd565b9350612bbc818560208601613440565b612bc58161360c565b840191505092915050565b6000612bdb826132a1565b612be581856132ce565b9350612bf5818560208601613440565b80840191505092915050565b6000612c0e6032836132bd565b9150612c198261361d565b604082019050919050565b6000612c316026836132bd565b9150612c3c8261366c565b604082019050919050565b6000612c546025836132bd565b9150612c5f826136bb565b604082019050919050565b6000612c77601c836132bd565b9150612c828261370a565b602082019050919050565b6000612c9a600f836132bd565b9150612ca582613733565b602082019050919050565b6000612cbd6024836132bd565b9150612cc88261375c565b604082019050919050565b6000612ce06019836132bd565b9150612ceb826137ab565b602082019050919050565b6000612d03600b836132bd565b9150612d0e826137d4565b602082019050919050565b6000612d266029836132bd565b9150612d31826137fd565b604082019050919050565b6000612d49602e836132bd565b9150612d548261384c565b604082019050919050565b6000612d6c603e836132bd565b9150612d778261389b565b604082019050919050565b6000612d8f6020836132bd565b9150612d9a826138ea565b602082019050919050565b6000612db2600d836132bd565b9150612dbd82613913565b602082019050919050565b6000612dd56020836132bd565b9150612de08261393c565b602082019050919050565b6000612df86018836132bd565b9150612e0382613965565b602082019050919050565b6000612e1b6021836132bd565b9150612e268261398e565b604082019050919050565b6000612e3e602b836132bd565b9150612e49826139dd565b604082019050919050565b6000612e61602e836132bd565b9150612e6c82613a2c565b604082019050919050565b612e8081613408565b82525050565b6000612e928285612bd0565b9150612e9e8284612bd0565b91508190509392505050565b6000602082019050612ebf6000830184612b22565b92915050565b6000608082019050612eda6000830187612b22565b612ee76020830186612b22565b612ef46040830185612e77565b8181036060830152612f068184612b4f565b905095945050505050565b6000602082019050612f266000830184612b31565b92915050565b6000604082019050612f416000830185612b40565b612f4e6020830184612e77565b9392505050565b60006020820190508181036000830152612f6f8184612b4f565b905092915050565b6000602082019050612f8c6000830184612b88565b92915050565b60006020820190508181036000830152612fac8184612b97565b905092915050565b60006020820190508181036000830152612fcd81612c01565b9050919050565b60006020820190508181036000830152612fed81612c24565b9050919050565b6000602082019050818103600083015261300d81612c47565b9050919050565b6000602082019050818103600083015261302d81612c6a565b9050919050565b6000602082019050818103600083015261304d81612c8d565b9050919050565b6000602082019050818103600083015261306d81612cb0565b9050919050565b6000602082019050818103600083015261308d81612cd3565b9050919050565b600060208201905081810360008301526130ad81612cf6565b9050919050565b600060208201905081810360008301526130cd81612d19565b9050919050565b600060208201905081810360008301526130ed81612d3c565b9050919050565b6000602082019050818103600083015261310d81612d5f565b9050919050565b6000602082019050818103600083015261312d81612d82565b9050919050565b6000602082019050818103600083015261314d81612da5565b9050919050565b6000602082019050818103600083015261316d81612dc8565b9050919050565b6000602082019050818103600083015261318d81612deb565b9050919050565b600060208201905081810360008301526131ad81612e0e565b9050919050565b600060208201905081810360008301526131cd81612e31565b9050919050565b600060208201905081810360008301526131ed81612e54565b9050919050565b60006020820190506132096000830184612e77565b92915050565b600061321961322a565b905061322582826134a5565b919050565b6000604051905090565b600067ffffffffffffffff82111561324f5761324e6135dd565b5b6132588261360c565b9050602081019050919050565b600067ffffffffffffffff8211156132805761327f6135dd565b5b6132898261360c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132e482613408565b91506132ef83613408565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561332457613323613550565b5b828201905092915050565b600061333a82613408565b915061334583613408565b9250826133555761335461357f565b5b828204905092915050565b600061336b82613408565b915061337683613408565b92508282101561338957613388613550565b5b828203905092915050565b600061339f826133e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061342a82613412565b9050919050565b82818337600083830152505050565b60005b8381101561345e578082015181840152602081019050613443565b8381111561346d576000848401525b50505050565b6000600282049050600182168061348b57607f821691505b6020821081141561349f5761349e6135ae565b5b50919050565b6134ae8261360c565b810181811067ffffffffffffffff821117156134cd576134cc6135dd565b5b80604052505050565b60006134e182613408565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561351457613513613550565b5b600182019050919050565b600061352a82613408565b915061353583613408565b9250826135455761354461357f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f556e657870656374656420645049440000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6e6f207472616e73666572000000000000000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f207065726d697373696f6e00000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613a8481613394565b8114613a8f57600080fd5b50565b613a9b816133a6565b8114613aa657600080fd5b50565b613ab2816133b2565b8114613abd57600080fd5b50565b613ac9816133bc565b8114613ad457600080fd5b50565b613ae081613408565b8114613aeb57600080fd5b5056fea26469706673582212209e14f59ea02aeddd45a8778825f278790a4ca151a5543be2bdfe0199b437845f64736f6c63430008040033", + "deployedBytecode": "0x6080604052600436106101815760003560e01c8063715018a6116100d1578063b88d4fde1161008a578063c88efd1511610064578063c88efd151461058e578063db7fd408146105aa578063e985e9c5146105d3578063f2fde38b1461061057610181565b8063b88d4fde146104ff578063c4d66de814610528578063c87b56dd1461055157610181565b8063715018a6146104175780638da5cb5b1461042e57806395d89b41146104595780639a7fad4014610484578063a22cb465146104ad578063a91ee0dc146104d657610181565b806323b872dd1161013e5780634f558e79116101185780634f558e7914610337578063599ad936146103745780636352211e1461039d57806370a08231146103da57610181565b806323b872dd146102ba5780633dcd3236146102e357806342842e0e1461030e57610181565b806301ffc9a71461018657806302fe5305146101c357806306fdde03146101ec578063081812fc14610217578063095ea7b31461025457806313859f461461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a891906128a5565b610639565b6040516101ba9190612f11565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e591906128f7565b61071b565b005b3480156101f857600080fd5b5061020161073d565b60405161020e9190612f92565b60405180910390f35b34801561022357600080fd5b5061023e600480360381019061023991906129a4565b6107cf565b60405161024b9190612eaa565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612869565b610815565b005b34801561028957600080fd5b506102a4600480360381019061029f91906129a4565b61092d565b6040516102b19190612f55565b60405180910390f35b3480156102c657600080fd5b506102e160048036038101906102dc9190612763565b6109cd565b005b3480156102ef57600080fd5b506102f8610a2d565b6040516103059190612eaa565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190612763565b610a53565b005b34801561034357600080fd5b5061035e600480360381019061035991906129a4565b610a73565b60405161036b9190612f11565b60405180910390f35b34801561038057600080fd5b5061039b60048036038101906103969190612938565b610a85565b005b3480156103a957600080fd5b506103c460048036038101906103bf91906129a4565b610ae2565b6040516103d19190612eaa565b60405180910390f35b3480156103e657600080fd5b5061040160048036038101906103fc91906126fe565b610b94565b60405161040e91906131f4565b60405180910390f35b34801561042357600080fd5b5061042c610c4c565b005b34801561043a57600080fd5b50610443610c60565b6040516104509190612eaa565b60405180910390f35b34801561046557600080fd5b5061046e610c8a565b60405161047b9190612f92565b60405180910390f35b34801561049057600080fd5b506104ab60048036038101906104a69190612ace565b610d1c565b005b3480156104b957600080fd5b506104d460048036038101906104cf919061282d565b610e29565b005b3480156104e257600080fd5b506104fd60048036038101906104f891906126fe565b610e3f565b005b34801561050b57600080fd5b50610526600480360381019061052191906127b2565b610e8b565b005b34801561053457600080fd5b5061054f600480360381019061054a91906126fe565b610eed565b005b34801561055d57600080fd5b50610578600480360381019061057391906129a4565b6110e1565b6040516105859190612f92565b60405180910390f35b6105a860048036038101906105a39190612a4e565b611149565b005b3480156105b657600080fd5b506105d160048036038101906105cc91906129f6565b611258565b005b3480156105df57600080fd5b506105fa60048036038101906105f59190612727565b6112c8565b6040516106079190612f11565b60405180910390f35b34801561061c57600080fd5b50610637600480360381019061063291906126fe565b61135c565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107145750610713826113e0565b5b9050919050565b61072361144a565b8060ca9080519060200190610739929190612428565b5050565b60606065805461074c90613473565b80601f016020809104026020016040519081016040528092919081815260200182805461077890613473565b80156107c55780601f1061079a576101008083540402835291602001916107c5565b820191906000526020600020905b8154815290600101906020018083116107a857829003601f168201915b5050505050905090565b60006107da826114c8565b6069600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061082082610ae2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088890613194565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108b0611513565b73ffffffffffffffffffffffffffffffffffffffff1614806108df57506108de816108d9611513565b6112c8565b5b61091e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610915906130f4565b60405180910390fd5b610928838361151b565b505050565b6097602052806000526040600020600091509050805461094c90613473565b80601f016020809104026020016040519081016040528092919081815260200182805461097890613473565b80156109c55780601f1061099a576101008083540402835291602001916109c5565b820191906000526020600020905b8154815290600101906020018083116109a857829003601f168201915b505050505081565b6109de6109d8611513565b826115d4565b610a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a14906131d4565b60405180910390fd5b610a28838383611669565b505050565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a6e83838360405180602001604052806000815250610e8b565b505050565b6000610a7e826118d0565b9050919050565b600060019054906101000a900460ff16610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb906131b4565b60405180910390fd5b610ade828261193c565b5050565b6000806067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8290613174565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc906130b4565b60405180910390fd5b606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c5461144a565b610c5e6000611999565b565b6000609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060668054610c9990613473565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc590613473565b8015610d125780601f10610ce757610100808354040283529160200191610d12565b820191906000526020600020905b815481529060010190602001808311610cf557829003601f168201915b5050505050905090565b816000610d27611513565b905060008173ffffffffffffffffffffffffffffffffffffffff16610d4b84610ae2565b73ffffffffffffffffffffffffffffffffffffffff1614905080610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b90613134565b60405180910390fd5b83609760008781526020019081526020016000209080519060200190610dcb9291906124ae565b5084610dd5611513565b73ffffffffffffffffffffffffffffffffffffffff167fabddf73bfc8efbf8287a09ea355e43cf6c0c22880ce0470affeba5271c0a769486604051610e1a9190612f55565b60405180910390a35050505050565b610e3b610e34611513565b8383611a5f565b5050565b610e4761144a565b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e9c610e96611513565b836115d4565b610edb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed2906131d4565b60405180910390fd5b610ee784848484611bcc565b50505050565b60008060019054906101000a900460ff16159050808015610f1e5750600160008054906101000a900460ff1660ff16105b80610f4b5750610f2d30611c28565b158015610f4a5750600160008054906101000a900460ff1660ff16145b5b610f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f81906130d4565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610fc7576001600060016101000a81548160ff0219169083151502179055505b61103b6040518060400160405280601581526020017f4465536369205265736561726368204f626a65637400000000000000000000008152506040518060400160405280600a81526020017f44655363692d4e6f646500000000000000000000000000000000000000000000815250610a85565b611043611c4b565b8160cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156110dd5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516110d49190612f77565b60405180910390a15b5050565b60606110ec826114c8565b60006110f6611ca4565b905060008151116111165760405180602001604052806000815250611141565b8061112084611d36565b604051602001611131929190612e86565b6040516020818303038152906040525b915050919050565b600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1663da4a984234868a6040518463ffffffff1660e01b81526004016111ae929190612f2c565b6020604051808303818588803b1580156111c757600080fd5b505af11580156111db573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061120091906129cd565b9050808314611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b90613034565b60405180910390fd5b61124f878787611258565b50505050505050565b6000611262611513565b905060008490506112738282611ee3565b6112c18585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050610d1c565b5050505050565b6000606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61136461144a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cb90612fd4565b60405180910390fd5b6113dd81611999565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611452611513565b73ffffffffffffffffffffffffffffffffffffffff16611470610c60565b73ffffffffffffffffffffffffffffffffffffffff16146114c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bd90613154565b60405180910390fd5b565b6114d1816118d0565b611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613174565b60405180910390fd5b50565b600033905090565b816069600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661158e83610ae2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806115e083610ae2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611622575061162181856112c8565b5b8061166057508373ffffffffffffffffffffffffffffffffffffffff16611648846107cf565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661168982610ae2565b73ffffffffffffffffffffffffffffffffffffffff16146116df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d690612ff4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174690613054565b60405180910390fd5b61175a838383611f01565b61176560008261151b565b6001606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b59190613360565b925050819055506001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461180c91906132d9565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118cb838383611f75565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166067600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600060019054906101000a900460ff1661198b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611982906131b4565b60405180910390fd5b6119958282611f7a565b5050565b6000609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081609860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613074565b60405180910390fd5b80606a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611bbf9190612f11565b60405180910390a3505050565b611bd7848484611669565b611be384848484611ffb565b611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990612fb4565b60405180910390fd5b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c91906131b4565b60405180910390fd5b611ca2612192565b565b606060ca8054611cb390613473565b80601f0160208091040260200160405190810160405280929190818152602001828054611cdf90613473565b8015611d2c5780601f10611d0157610100808354040283529160200191611d2c565b820191906000526020600020905b815481529060010190602001808311611d0f57829003601f168201915b5050505050905090565b60606000821415611d7e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611ede565b600082905060005b60008214611db0578080611d99906134d6565b915050600a82611da9919061332f565b9150611d86565b60008167ffffffffffffffff811115611df2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e245781602001600182028036833780820191505090505b5090505b60008514611ed757600182611e3d9190613360565b9150600a85611e4c919061351f565b6030611e5891906132d9565b60f81b818381518110611e94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611ed0919061332f565b9450611e28565b8093505050505b919050565b611efd8282604051806020016040528060008152506121f3565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790613094565b60405180910390fd5b505050565b505050565b600060019054906101000a900460ff16611fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc0906131b4565b60405180910390fd5b8160659080519060200190611fdf929190612428565b508060669080519060200190611ff6929190612428565b505050565b600061201c8473ffffffffffffffffffffffffffffffffffffffff16611c28565b15612185578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612045611513565b8786866040518563ffffffff1660e01b81526004016120679493929190612ec5565b602060405180830381600087803b15801561208157600080fd5b505af19250505080156120b257506040513d601f19601f820116820180604052508101906120af91906128ce565b60015b612135573d80600081146120e2576040519150601f19603f3d011682016040523d82523d6000602084013e6120e7565b606091505b5060008151141561212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490612fb4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061218a565b600190505b949350505050565b600060019054906101000a900460ff166121e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d8906131b4565b60405180910390fd5b6121f16121ec611513565b611999565b565b6121fd838361224e565b61220a6000848484611ffb565b612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090612fb4565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613114565b60405180910390fd5b6122c7816118d0565b15612307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fe90613014565b60405180910390fd5b61231360008383611f01565b6001606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461236391906132d9565b92505081905550816067600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461242460008383611f75565b5050565b82805461243490613473565b90600052602060002090601f016020900481019282612456576000855561249d565b82601f1061246f57805160ff191683800117855561249d565b8280016001018555821561249d579182015b8281111561249c578251825591602001919060010190612481565b5b5090506124aa9190612534565b5090565b8280546124ba90613473565b90600052602060002090601f0160209004810192826124dc5760008555612523565b82601f106124f557805160ff1916838001178555612523565b82800160010185558215612523579182015b82811115612522578251825591602001919060010190612507565b5b5090506125309190612534565b5090565b5b8082111561254d576000816000905550600101612535565b5090565b600061256461255f84613234565b61320f565b90508281526020810184848401111561257c57600080fd5b612587848285613431565b509392505050565b60006125a261259d84613265565b61320f565b9050828152602081018484840111156125ba57600080fd5b6125c5848285613431565b509392505050565b6000813590506125dc81613a7b565b92915050565b6000813590506125f181613a92565b92915050565b60008135905061260681613aa9565b92915050565b60008135905061261b81613ac0565b92915050565b60008151905061263081613ac0565b92915050565b60008083601f84011261264857600080fd5b8235905067ffffffffffffffff81111561266157600080fd5b60208301915083600182028301111561267957600080fd5b9250929050565b600082601f83011261269157600080fd5b81356126a1848260208601612551565b91505092915050565b600082601f8301126126bb57600080fd5b81356126cb84826020860161258f565b91505092915050565b6000813590506126e381613ad7565b92915050565b6000815190506126f881613ad7565b92915050565b60006020828403121561271057600080fd5b600061271e848285016125cd565b91505092915050565b6000806040838503121561273a57600080fd5b6000612748858286016125cd565b9250506020612759858286016125cd565b9150509250929050565b60008060006060848603121561277857600080fd5b6000612786868287016125cd565b9350506020612797868287016125cd565b92505060406127a8868287016126d4565b9150509250925092565b600080600080608085870312156127c857600080fd5b60006127d6878288016125cd565b94505060206127e7878288016125cd565b93505060406127f8878288016126d4565b925050606085013567ffffffffffffffff81111561281557600080fd5b61282187828801612680565b91505092959194509250565b6000806040838503121561284057600080fd5b600061284e858286016125cd565b925050602061285f858286016125e2565b9150509250929050565b6000806040838503121561287c57600080fd5b600061288a858286016125cd565b925050602061289b858286016126d4565b9150509250929050565b6000602082840312156128b757600080fd5b60006128c58482850161260c565b91505092915050565b6000602082840312156128e057600080fd5b60006128ee84828501612621565b91505092915050565b60006020828403121561290957600080fd5b600082013567ffffffffffffffff81111561292357600080fd5b61292f848285016126aa565b91505092915050565b6000806040838503121561294b57600080fd5b600083013567ffffffffffffffff81111561296557600080fd5b612971858286016126aa565b925050602083013567ffffffffffffffff81111561298e57600080fd5b61299a858286016126aa565b9150509250929050565b6000602082840312156129b657600080fd5b60006129c4848285016126d4565b91505092915050565b6000602082840312156129df57600080fd5b60006129ed848285016126e9565b91505092915050565b600080600060408486031215612a0b57600080fd5b6000612a19868287016126d4565b935050602084013567ffffffffffffffff811115612a3657600080fd5b612a4286828701612636565b92509250509250925092565b600080600080600060808688031215612a6657600080fd5b6000612a74888289016126d4565b955050602086013567ffffffffffffffff811115612a9157600080fd5b612a9d88828901612636565b94509450506040612ab0888289016125f7565b9250506060612ac1888289016126d4565b9150509295509295909350565b60008060408385031215612ae157600080fd5b6000612aef858286016126d4565b925050602083013567ffffffffffffffff811115612b0c57600080fd5b612b1885828601612680565b9150509250929050565b612b2b81613394565b82525050565b612b3a816133a6565b82525050565b612b49816133b2565b82525050565b6000612b5a82613296565b612b6481856132ac565b9350612b74818560208601613440565b612b7d8161360c565b840191505092915050565b612b918161341f565b82525050565b6000612ba2826132a1565b612bac81856132bd565b9350612bbc818560208601613440565b612bc58161360c565b840191505092915050565b6000612bdb826132a1565b612be581856132ce565b9350612bf5818560208601613440565b80840191505092915050565b6000612c0e6032836132bd565b9150612c198261361d565b604082019050919050565b6000612c316026836132bd565b9150612c3c8261366c565b604082019050919050565b6000612c546025836132bd565b9150612c5f826136bb565b604082019050919050565b6000612c77601c836132bd565b9150612c828261370a565b602082019050919050565b6000612c9a600f836132bd565b9150612ca582613733565b602082019050919050565b6000612cbd6024836132bd565b9150612cc88261375c565b604082019050919050565b6000612ce06019836132bd565b9150612ceb826137ab565b602082019050919050565b6000612d03600b836132bd565b9150612d0e826137d4565b602082019050919050565b6000612d266029836132bd565b9150612d31826137fd565b604082019050919050565b6000612d49602e836132bd565b9150612d548261384c565b604082019050919050565b6000612d6c603e836132bd565b9150612d778261389b565b604082019050919050565b6000612d8f6020836132bd565b9150612d9a826138ea565b602082019050919050565b6000612db2600d836132bd565b9150612dbd82613913565b602082019050919050565b6000612dd56020836132bd565b9150612de08261393c565b602082019050919050565b6000612df86018836132bd565b9150612e0382613965565b602082019050919050565b6000612e1b6021836132bd565b9150612e268261398e565b604082019050919050565b6000612e3e602b836132bd565b9150612e49826139dd565b604082019050919050565b6000612e61602e836132bd565b9150612e6c82613a2c565b604082019050919050565b612e8081613408565b82525050565b6000612e928285612bd0565b9150612e9e8284612bd0565b91508190509392505050565b6000602082019050612ebf6000830184612b22565b92915050565b6000608082019050612eda6000830187612b22565b612ee76020830186612b22565b612ef46040830185612e77565b8181036060830152612f068184612b4f565b905095945050505050565b6000602082019050612f266000830184612b31565b92915050565b6000604082019050612f416000830185612b40565b612f4e6020830184612e77565b9392505050565b60006020820190508181036000830152612f6f8184612b4f565b905092915050565b6000602082019050612f8c6000830184612b88565b92915050565b60006020820190508181036000830152612fac8184612b97565b905092915050565b60006020820190508181036000830152612fcd81612c01565b9050919050565b60006020820190508181036000830152612fed81612c24565b9050919050565b6000602082019050818103600083015261300d81612c47565b9050919050565b6000602082019050818103600083015261302d81612c6a565b9050919050565b6000602082019050818103600083015261304d81612c8d565b9050919050565b6000602082019050818103600083015261306d81612cb0565b9050919050565b6000602082019050818103600083015261308d81612cd3565b9050919050565b600060208201905081810360008301526130ad81612cf6565b9050919050565b600060208201905081810360008301526130cd81612d19565b9050919050565b600060208201905081810360008301526130ed81612d3c565b9050919050565b6000602082019050818103600083015261310d81612d5f565b9050919050565b6000602082019050818103600083015261312d81612d82565b9050919050565b6000602082019050818103600083015261314d81612da5565b9050919050565b6000602082019050818103600083015261316d81612dc8565b9050919050565b6000602082019050818103600083015261318d81612deb565b9050919050565b600060208201905081810360008301526131ad81612e0e565b9050919050565b600060208201905081810360008301526131cd81612e31565b9050919050565b600060208201905081810360008301526131ed81612e54565b9050919050565b60006020820190506132096000830184612e77565b92915050565b600061321961322a565b905061322582826134a5565b919050565b6000604051905090565b600067ffffffffffffffff82111561324f5761324e6135dd565b5b6132588261360c565b9050602081019050919050565b600067ffffffffffffffff8211156132805761327f6135dd565b5b6132898261360c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006132e482613408565b91506132ef83613408565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561332457613323613550565b5b828201905092915050565b600061333a82613408565b915061334583613408565b9250826133555761335461357f565b5b828204905092915050565b600061336b82613408565b915061337683613408565b92508282101561338957613388613550565b5b828203905092915050565b600061339f826133e8565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061342a82613412565b9050919050565b82818337600083830152505050565b60005b8381101561345e578082015181840152602081019050613443565b8381111561346d576000848401525b50505050565b6000600282049050600182168061348b57607f821691505b6020821081141561349f5761349e6135ae565b5b50919050565b6134ae8261360c565b810181811067ffffffffffffffff821117156134cd576134cc6135dd565b5b80604052505050565b60006134e182613408565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561351457613513613550565b5b600182019050919050565b600061352a82613408565b915061353583613408565b9250826135455761354461357f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f556e657870656374656420645049440000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6e6f207472616e73666572000000000000000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f207065726d697373696f6e00000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b613a8481613394565b8114613a8f57600080fd5b50565b613a9b816133a6565b8114613aa657600080fd5b50565b613ab2816133b2565b8114613abd57600080fd5b50565b613ac9816133bc565b8114613ad457600080fd5b50565b613ae081613408565b8114613aeb57600080fd5b5056fea26469706673582212209e14f59ea02aeddd45a8778825f278790a4ca151a5543be2bdfe0199b437845f64736f6c63430008040033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/nodes-lib/src/api.ts b/nodes-lib/src/api.ts new file mode 100644 index 000000000..d51755e20 --- /dev/null +++ b/nodes-lib/src/api.ts @@ -0,0 +1,775 @@ +import axios, { + AxiosError, + type AxiosResponse +} from "axios"; +import { + ResearchObjectComponentType, + type CodeComponent, + type DataComponent, + type DriveObject, + type ExternalLinkComponent, + type PdfComponent, + type ResearchObjectV1, + ResearchObjectComponentDocumentSubtype, + ResearchObjectComponentLinkSubtype, + ResearchObjectComponentCodeSubtype, + type ManifestActions, + type ResearchObjectV1Component, + type License, + type ResearchObjectV1Author, + type ResearchField, + type ResearchObjectComponentSubtypes, +} from "@desci-labs/desci-models"; +import FormData from "form-data"; +import { createReadStream } from "fs"; +import type { NodeIDs } from "@desci-labs/desci-codex-lib/dist/src/types.js"; +import { publish } from "./publish.js"; +import type { ResearchObjectDocument } from "./automerge.js"; +import { randomUUID } from "crypto"; +import { NODES_API_URL, NODES_API_KEY } from "./config.js"; + +const ROUTES = { + deleteData: `${NODES_API_URL}/v1/data/delete`, + updateData: `${NODES_API_URL}/v1/data/update`, + updateExternalCid: `${NODES_API_URL}/v1/data/updateExternalCid`, + /** Append `/uuid/tree` for tree to fetch. + * The `tree` string does nothing but satisfy an old param requirement. + */ + retrieveTree: `${NODES_API_URL}/v1/data/retrieveTree`, + moveData: `${NODES_API_URL}/v1/data/move`, + createDraft: `${NODES_API_URL}/v1/nodes/createDraft`, + /** Append /uuid with node to delete */ + deleteDraft: `${NODES_API_URL}/v1/nodes`, + /** Append /uuid for node to show */ + showNode: `${NODES_API_URL}/v1/nodes/objects`, + listNodes: `${NODES_API_URL}/v1/nodes`, + prepublish: `${NODES_API_URL}/v1/nodes/prepublish`, + publish: `${NODES_API_URL}/v1/nodes/publish`, + /** Append `/uuid` for fetching document, `/uuid/actions` to mutate */ + documents: `${NODES_API_URL}/v1/nodes/documents`, + /** Append /uuid for node to fetch publish history for */ + dpidHistory: `${NODES_API_URL}/v1/pub/versions`, +} as const; + +export type CreateDraftParams = { + title: string, + // Some desci-server code expects these arrays to exist + links: { + pdf: string[], + metadata: string[], + }, + defaultLicense: License, + researchFields: ResearchField[], +}; + +export type CreateDraftResponse = { + ok: boolean, + hash: string, + uri: string, + node: NodeResponse, + version: NodeVersion, + documentId: string, +}; + +export const createDraftNode = async ( + params: Omit, +): Promise => { + const payload: CreateDraftParams = { + ...params, + links: { + pdf: [], + metadata: [], + }, + }; + const { data } = await axios.post( + ROUTES.createDraft, payload, { headers: getHeaders() } + ); + + return data; +}; + +export type ListedNode = { + uuid: string, + id: string, + createdAt: string, + updatedAt: string, + ownerId: number, + title: string, + manifestUrl: string, + isPublished: boolean, + cid: string, + NodeCover: any[], + index?: IndexedNode[], +}; + +/** + * List nodes for the authenticated user. +*/ +export const listNodes = async ( +): Promise => { + const { data } = await axios.get<{nodes: ListedNode[]}>( + ROUTES.listNodes + "/", { headers: getHeaders() } + ); + + return data.nodes; +}; + +export const deleteDraftNode = async ( + uuid: string, +): Promise => { + return await axios.delete( + ROUTES.deleteDraft + `/${uuid}`, + { headers: getHeaders() } + ); +}; + +export type NodeResponse = { + id: number, + createdAt: string, + updatedAt: string, + title: string, + cid: string, + state: string, + isFeatured: boolean, + manifestUrl: string, + manifestData: ResearchObjectV1, + replicationFactor: number, + ownerId: number, + uuid: string, + deletedAt?: string, + isDeleted: boolean, + manifestDocumentId: string, + ceramicStream?: string, +}; + +export const getDraftNode = async ( + uuid: string, +): Promise => { + const { data } = await axios.get( + ROUTES.showNode + `/${uuid}`, + { headers: getHeaders(), } + ); + + return data; +}; + +type NodeVersion = { + id: number; + manifestUrl: string; + cid: string; + transactionId: string | null; + nodeId: number | null; +}; + +export type PrepublishResponse = { + ok: boolean; + updatedManifestCid: string; + updatedManifest: ResearchObjectV1; + version?: NodeVersion; + ceramicStream?: string; +}; + +/** + * Computes the draft drive DAG, and updates the data bucket CID + * with the new root. Note this does not actually publish the draft, + * just tells the backend to prepare for it. + * + * @param uuid - UUID of the node to prepublish. + * @param - Your API key. +*/ +export const prePublishDraftNode = async ( + uuid: string, +): Promise => { + // Compute the draft drive DAG, and update the data bucket CID + const { data } = await axios.post( + ROUTES.prepublish, + { uuid }, + { headers: getHeaders(), } + ); + + return data; +}; + +type PublishParams = { + uuid: string, + cid: string, + manifest: ResearchObjectV1, + transactionId?: string, + nodeVersionId?: string, + ceramicStream?: string, +}; + +export type PublishResponse = { + ok: boolean, + updatedManifestCid: string, + ceramicIDs?: NodeIDs, +}; + +export const publishDraftNode = async ( + uuid: string, +): Promise => { + const publishResult = await publish(uuid); + + const pubParams: PublishParams = { + uuid, + cid: publishResult.cid, + manifest: publishResult.manifest, + transactionId: publishResult.transactionId, + ceramicStream: publishResult.ceramicIDs?.streamID, + }; + + let data: { ok: boolean }; + try { + const backendPublishResult = await axios.post<{ok: boolean}>( + ROUTES.publish, + pubParams, + { headers: getHeaders(), } + ); + data = backendPublishResult.data; + } catch (e) { + console.log(`Publish flow was successful, but backend update failed for uuid ${uuid}.`); + throw e; + } + + return { + ...data, + ceramicIDs: publishResult.ceramicIDs, + updatedManifestCid: publishResult.cid + }; +}; + +export type DeleteDataParams = { + uuid: string, + path: string, +}; + +export type DeleteDataResponse = { + manifest: ResearchObjectV1; + manifestCid: string; +}; + +export const deleteData = async ( + params: DeleteDataParams, +) => { + const { data } = await axios.post( + ROUTES.deleteData, + { + ...params, + path: makeAbsolutePath(params.path), + }, + { headers: getHeaders() } + ); + + return data; +}; + +export type MoveDataParams = { + uuid: string, + oldPath: string, + newPath: string, +}; + +export type MoveDataResponse = { + manifest: ResearchObjectV1, + manifestCid: string, +}; + +export const moveData = async ( + params: MoveDataParams, +) => { + const { data } = await axios.post( + ROUTES.moveData, + { + ...params, + oldPath: makeAbsolutePath(params.oldPath), + newPath: makeAbsolutePath(params.newPath), + }, + { headers: getHeaders() } + ); + + return data; +}; + +export type RetrieveResponse = { + status?: number; + tree: DriveObject[]; + date: string; +}; + +export const retrieveDraftFileTree = async ( + uuid: string, +) => { + const { data } = await axios.get( + ROUTES.retrieveTree + `/${uuid}/tree`, { headers: getHeaders() } + ); + + return data; +}; + +export type CreateFolderParams = { + uuid: string, + locationPath: string, + folderName: string, +}; + +export type CreateFolderResponse = { + manifest: ResearchObjectV1, + manifestCid: string, + tree: DriveObject[], + date: string, +}; + +export const createNewFolder = async ( + params: CreateFolderParams, +) => { + const { uuid, folderName, locationPath } = params; + const form = new FormData(); + form.append("uuid", uuid); + form.append("newFolderName", folderName); + form.append("contextPath", makeAbsolutePath(locationPath)); + const { data } = await axios.post( + ROUTES.updateData, form, { headers: getHeaders(true)} + ); + + return data; +}; + +/** Params needed to upload a set of files */ +export type UploadParams = { + /** ID of target node */ + uuid: string, + /** + * Absolute path to target location in drive. + * Note that folders must already exist. + */ + targetPath: string, + /** Local paths to files for upload */ + localFilePaths: string[], +}; + +export type UploadFilesResponse = { + manifest: ResearchObjectV1, + manifestCid: string, + tree: DriveObject[], + date: string, +}; + +export const uploadFiles = async ( + params: UploadParams, +): Promise => { + const { targetPath, localFilePaths, uuid } = params; + const form = new FormData(); + form.append("uuid", uuid); + form.append("contextPath", makeAbsolutePath(targetPath)); + + localFilePaths.forEach(f => { + const stream = createReadStream(f); + form.append("files", stream); + }); + + const { data } = await axios.post( + ROUTES.updateData, form, { headers: getHeaders(true)} + ); + + return data; +}; + +/** Upload an externally hosted PDF file */ +export type UploadPdfFromUrlParams = { + /** ID of target node */ + uuid: string, + /** Web URL to the target document, and its filename */ + externalUrl: ExternalUrl, + /** Target path in the drive (folders must exist beforehand) */ + targetPath: string, + /** What type of document the target file is */ + componentSubtype: ResearchObjectComponentDocumentSubtype, +}; + +/** + * Reference to externally hosted data to upload. Capable of handling + * pdf or github repos at the moment. +*/ +export type ExternalUrl = { + /** Web URL to the target resource */ + url: string, + /** Name of the file or code repo */ + path: string, +}; + +/** + * Upload a PDF hosted elsewhere. Backend automatically creates a matching + * component which allows setting metadata. +*/ +export const uploadPdfFromUrl = async ( + params: UploadPdfFromUrlParams, +): Promise => { + const { uuid, targetPath, externalUrl, componentSubtype } = params; + const form = new FormData(); + form.append("uuid", uuid); + form.append("contextPath", makeAbsolutePath(targetPath)); + form.append("externalUrl", JSON.stringify(externalUrl)); + form.append("componentType", ResearchObjectComponentType.PDF); + form.append("componentSubtype", componentSubtype); + const { data } = await axios.post( + ROUTES.updateData, form, { headers: getHeaders(true)} + ); + return data +} + +export type UploadGithubRepoFromUrlParams = { + /** ID of target node */ + uuid: string, + /** Web URL to the target repo, and its name */ + externalUrl: ExternalUrl, + /** Target path in the drive (folders must exist beforehand) */ + targetPath: string, + /** What type of code the repo contains */ + componentSubtype: ResearchObjectComponentCodeSubtype, +}; + +export const uploadGithubRepoFromUrl = async ( + params: UploadGithubRepoFromUrlParams, +): Promise => { + const { uuid, externalUrl, targetPath, componentSubtype } = params; + const form = new FormData(); + form.append("uuid", uuid); + form.append("contextPath", makeAbsolutePath(targetPath)); + form.append("externalUrl", JSON.stringify(externalUrl)); + form.append("componentType", ResearchObjectComponentType.CODE); + form.append("componentSubtype", componentSubtype); + const { data } = await axios.post( + ROUTES.updateData, form, { headers: getHeaders(true)} + ); + return data; +}; + +export type AddExternalTreeParams = { + uuid: string, + externalCids: { name: string, cid: string }[], + targetPath: string, + componentType: ResearchObjectComponentType, + componentSubtype: ResearchObjectComponentSubtypes, +}; + +/** + * Add a publicly available UnixFS tree to the drive, without uploading + * the content. +*/ +export const addExternalUnixFsTree = async ( + params: AddExternalTreeParams, +): Promise => { + const { data } = await axios.post( + ROUTES.updateExternalCid, + { ...params, contextPath: makeAbsolutePath(params.targetPath)}, + { headers: getHeaders() }, + ); + return data; +}; + +/** Historical log entry for a dPID */ +export type IndexedNodeVersion = { + /** Manifest CID in EVM format */ + cid: string; + /** Transaction ID of the update event */ + id: string; + /** Epoch timestamp of the update*/ + time: string; +}; + +/** Represents the state and publication history of a dPID */ +export type IndexedNode = { + /** Node UUID in hex */ + id: string; + /** Node UUID in decimal */ + id10: string; + /** Account who owns the node */ + owner: string; + /** The most recent manifest CID */ + recentCid: string; + /** Publication history of the node */ + versions: IndexedNodeVersion[]; +}; + +export const getDpidHistory = async ( + uuid: string, +): Promise => { + const { data } = await axios.get( + ROUTES.dpidHistory + `/${uuid}` + ); + + return data.versions; +}; + +export type ChangeManifestParams = { + uuid: string, + actions: ManifestActions[], +}; + +export type ManifestDocumentResponse = { + documentId: string, + document: ResearchObjectDocument, +}; + +const getManifestDocument = async ( + uuid: string, +): Promise => { + const { data } = await axios.get( + ROUTES.documents + `/${uuid}` + ); + + return data; +}; + +/** + * Send a generic manifest change to the backend. Normally, one of the + * special-purpose functions is easier to use. + * @param uuid - ID of the node + * @param actions - series of change actions to perform + * @param - your API key or session token + * @returns the new state of the manifest document +*/ +export const changeManifest = async ( + uuid: string, + actions: ManifestActions[], +): Promise => { + let actionResponse: AxiosResponse; + try { + actionResponse = await axios.post( + ROUTES.documents + `/${uuid}/actions`, + { actions }, + { headers: getHeaders() } + ); + } catch (e) { + const err = e as AxiosError + // Node doesn't have an automerge document, needs initialization + if (err.status === 400 && err.message.toLowerCase().includes("missing automerge document")) { + await getManifestDocument(uuid); + return await changeManifest(uuid, actions); + } else { + throw e; + }; + }; + + return actionResponse.data; +}; + +export type ComponentParam = + | PdfComponent + | ExternalLinkComponent + | DataComponent + | CodeComponent; + +/** + * Creates a new component in the node. + * @param uuid - ID of the node + * @param params - component to add + * @param - your API key or session token + * @returns the new state of the manifest document +*/ +export const addRawComponent = async ( + uuid: string, + params: ComponentParam, +): Promise => { + const action: ManifestActions = { + type: "Add Component", + component: params, + }; + return await changeManifest(uuid, [action]); +}; + +/** + * Update the content of a component. +*/ +export type UpdateComponentParams = { + /** The new component data */ + component: ResearchObjectV1Component, + /** Which component index to update */ + componentIndex: number, +}; + +export const updateComponent = async ( + uuid: string, + params: UpdateComponentParams, +): Promise => { + const { component, componentIndex } = params; + const action: ManifestActions = { + type: "Update Component", + component, + componentIndex, + }; + return await changeManifest(uuid, [action]); +}; + +/** Parameters for adding an external link component to manifest */ +export type AddLinkComponentParams = { + /** Human-readable name of component */ + name: string, + /** Link component refers to */ + url: string, + /** Which type of resource the link points to */ + subtype: ResearchObjectComponentLinkSubtype, + /** Wether to show the link as a central component of the object */ + starred: boolean, +}; + +export const addLinkComponent = async ( + uuid: string, + params: AddLinkComponentParams, +): Promise => { + const fullParams: ExternalLinkComponent = { + id: randomUUID(), + name: params.name, + type: ResearchObjectComponentType.LINK, + subtype: params.subtype, + payload: { + url: params.url, + path: `root/External Links/${params.name}`, + }, + starred: params.starred + }; + return await addRawComponent(uuid, fullParams); +} + +/** + * Parameters for adding a PDF component to manifest. This is done after + * uploading the file, and allows adding richer metadata to the document. +*/ +export type AddPdfComponentParams = { + /** Human-readable name of the document */ + name: string, + /** Absolute path to the file in the drive */ + pathToFile: string, + /** CID of the file */ + cid: string, + /** Indicates the type of document */ + subtype: ResearchObjectComponentDocumentSubtype, + /** Wether to show the document as a central component of the object */ + starred: boolean, +}; + +export const addPdfComponent = async ( + uuid: string, + params: AddPdfComponentParams, +): Promise => { + const fullParams: PdfComponent = { + id: randomUUID(), + name: params.name, + type: ResearchObjectComponentType.PDF, + subtype: params.subtype, + payload: { + cid: params.cid, + path: makeAbsolutePath(params.pathToFile), + }, + starred: params.starred, + }; + return await addRawComponent(uuid, fullParams); +}; + +/** + * Parameters for adding code component to manifest. These can be + * nested in layers to mark subdirectories as other types of code, etc. +*/ +export type AddCodeComponentParams = { + /** Human-readable name of the code collection */ + name: string, + /** Absolute path to the code in the drive */ + path: string, + /** CID of the target file or unixFS directory */ + cid: string, + /** */ + language: string, + /** Indicates the type of document */ + subtype: ResearchObjectComponentCodeSubtype, + /** Wether to show the document as a central component of the object */ + starred: boolean, +}; + +/** + * Manually add a code component to mark a subtree of the drive as code. +*/ +export const addCodeComponent = async ( + uuid: string, + params: AddCodeComponentParams, +): Promise => { + const fullParams: CodeComponent = { + id: randomUUID(), + name: params.name, + type: ResearchObjectComponentType.CODE, + subtype: params.subtype, + payload: { + language: params.language, + path: makeAbsolutePath(params.path), + cid: params.cid, + }, + starred: params.starred, + }; + return await addRawComponent(uuid, fullParams); +}; + +export const deleteComponent = async ( + uuid: string, + path: string, +): Promise => await changeManifest( + uuid, [{ type: "Delete Component", path: makeAbsolutePath(path)}]); + +export const updateTitle = async ( + uuid: string, + title: string, +): Promise => + await changeManifest(uuid, [{ type: "Update Title", title }]); + +export const updateDescription = async ( + uuid: string, + description: string, +): Promise => + await changeManifest(uuid, [{ type: "Update Description", description }]); + +export const updateLicense = async ( + uuid: string, + license: License, +): Promise => + await changeManifest(uuid, [{ type: "Update License", defaultLicense: license }]); + +export const updateResearchFields = async ( + uuid: string, + researchFields: ResearchField[], +): Promise => + await changeManifest(uuid, [{ type: "Update ResearchFields", researchFields }]); + +export const addContributor = async ( + uuid: string, + author: ResearchObjectV1Author, +): Promise => + await changeManifest(uuid, [{ type: "Add Contributor", author }]); + +export const removeContributor = async ( + uuid: string, + contributorIndex: number, +): Promise => + await changeManifest(uuid, [{ type: "Remove Contributor", contributorIndex }]); + +export const updateCoverImage = async ( + uuid: string, + cid: string | undefined, +): Promise => + await changeManifest(uuid, [{ type: "Update CoverImage", cid }]); + +const getHeaders = (isFormData: boolean = false) => { + const headers = { + "api-key": NODES_API_KEY, + ...(isFormData ? { "content-type": "multipart/form-data" } : {}) + }; + return headers; +}; + +const makeAbsolutePath = (path: string) => { + // Sensible definitions of root + if (!path || path === "root" || path === "root/") return "root"; + // Support unix-style absolute paths + if (path.startsWith("/")) return `root${path}`; + // What endpoints actually expect + if (path.startsWith("root/")) return path; + // Just add root to other paths + return `root/${path}`; +}; diff --git a/nodes-lib/src/automerge.ts b/nodes-lib/src/automerge.ts new file mode 100644 index 000000000..046b94c2a --- /dev/null +++ b/nodes-lib/src/automerge.ts @@ -0,0 +1,9 @@ +import type { + ResearchObjectV1, +} from "@desci-labs/desci-models"; + +export type ResearchObjectDocument = { + manifest: ResearchObjectV1; + uuid: string; + driveClock: string; +}; diff --git a/nodes-lib/src/chain.ts b/nodes-lib/src/chain.ts new file mode 100644 index 000000000..4c1f07466 --- /dev/null +++ b/nodes-lib/src/chain.ts @@ -0,0 +1,159 @@ +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 { 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" }} +); + +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 dpidRegistryContract = new Contract( + DPID_CONTRACT_ADDRESS, + dpidRegistryAbi, + wallet +) as unknown as DpidRegistry; + +export type DpidPublishResult = { + prepubResult: PrepublishResponse, + reciept: ContractReceipt, +}; + +/** + * Publish a node to the dPID registry contract. + */ +export const dpidPublish = async ( + uuid: string, + dpidExists: boolean, +): Promise => { + let reciept: ContractReceipt; + let prepubResult: PrepublishResponse; + if (dpidExists) { + console.log(`${LOG_CTX} dpid exists for ${uuid}, updating`); + try { + prepubResult = await prePublishDraftNode(uuid); + reciept = await updateExistingDpid(uuid, prepubResult.updatedManifestCid); + } catch(e) { + const err = e as Error; + console.log(`${LOG_CTX} Failed updating dpid for uuid ${uuid}: ${err.message}`); + throw err; + }; + } else { + console.log(`${LOG_CTX} no dpid found for ${uuid}, registering new`); + try { + const registrationResult = await registerNewDpid(uuid); + 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; + }; + }; + return { prepubResult, reciept }; +}; + +/** + * Update an existing dPID with a new version of the manifest. + */ +const updateExistingDpid = async ( + uuid: string, + prepubManifestCid: string +): Promise => { + const cidBytes = convertCidTo0xHex(prepubManifestCid); + const hexUuid = convertUUIDToHex(uuid); + + const tx = await researchObjectContract.updateMetadata(hexUuid, cidBytes); + return await tx.wait(); +}; + +/** + * Optimistically create a manifest with the next available dPID, + * and try to register it as such. + * @throws on dpid registration failure. + */ +const registerNewDpid = async ( + uuid: string, +): Promise<{ reciept: ContractReceipt, prepubResult: PrepublishResponse}> => { + const optimisticDpid = await getPreliminaryDpid(); + const regFee = await dpidRegistryContract.getFee(); + + await changeManifest( + uuid, + [{ + type: "Publish Dpid", + dpid: { prefix: DEFAULT_DPID_PREFIX_STRING, id: optimisticDpid.toString() } + }], + ); + + let prepubResult: PrepublishResponse; + let reciept: ContractReceipt; + try { + prepubResult = await prePublishDraftNode(uuid); + const cidBytes = convertCidTo0xHex(prepubResult.updatedManifestCid); + const hexUuid = convertUUIDToHex(uuid); + + // Throws if the expected dPID isn't available + const tx = await researchObjectContract.mintWithDpid( + hexUuid, + cidBytes, + DEFAULT_DPID_PREFIX, + optimisticDpid, + { value: regFee, gasLimit: 350000 } + ); + reciept = await tx.wait(); + } catch (e) { + console.log(`${LOG_CTX} dPID registration failed, revert optimistic dPID in manifest of ${uuid}`) + await changeManifest( + uuid, [{ type: "Remove Dpid" }] + ); + throw e; + }; + console.log(`${LOG_CTX} Successfully registered as dPID ${optimisticDpid}`); + return { reciept, prepubResult }; +}; + +/** + * 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); + return nextFreeDpid; +}; + +export const hasDpid = async ( + uuid: string, +): Promise => + await researchObjectContract.exists(convertUUIDToHex(uuid)); diff --git a/nodes-lib/src/codex.ts b/nodes-lib/src/codex.ts new file mode 100644 index 000000000..d8ed874f3 --- /dev/null +++ b/nodes-lib/src/codex.ts @@ -0,0 +1,136 @@ +import { + authenticatedCeramicClient, + createResearchObject, + newComposeClient, + updateResearchObject, + type ComposeClient, + type NodeIDs, + queryResearchObject, + resolveHistory, + newCeramicClient, +} from "@desci-labs/desci-codex-lib/dist/src/index.js"; +import type { IndexedNodeVersion, PrepublishResponse } from "./api.js"; +import { convert0xHexToCid } from "./util/converting.js"; +import { + PUBLISH_PKEY, + CERAMIC_NODE_URL, +} from "./config.js"; + +/** + * 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 + * made through a new commit to the same stream. If there is history, but no known stream, + * 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 + * @returns the stream ID of the object + */ +export const codexPublish = async ( + prepublishResult: PrepublishResponse, + dpidHistory: IndexedNodeVersion[], +): Promise => { + console.log("[DEBUG]::CODEX starting publish..."); + const ceramic = await authenticatedCeramicClient( + PUBLISH_PKEY.startsWith("0x") ? PUBLISH_PKEY.slice(2) : PUBLISH_PKEY + ); + const compose = newComposeClient({ ceramic }); + + // 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}...`); + 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}` + ); + return { streamID: ro.streamID, commitID: ro.commitID }; + }; + + // Otherwise, create a new stream, potentially backfilling it with + // earlier updates. + if (dpidHistory.length === 0) { + console.log("[DEBUG]::CODEX publishing to new stream..."); + const ro = await createResearchObject(compose, { + title: prepublishResult.updatedManifest.title || "", + manifest: prepublishResult.updatedManifestCid, + }); + console.log( + `[DEBUG]::CODEX 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..."); + const streamID = await backfillNewStream(compose, dpidHistory); + console.log("[DEBUG]::CODEX backfill done, recursing to append latest event..."); + return await codexPublish( + { ...prepublishResult, ceramicStream: streamID }, + dpidHistory, + ); + }; +}; + +/** + * Migrate a node's history to a stream, by working through the versions chronologically + * and replaying the manifest versions onto a new stream. + * @param compose - ComposeDB client instance + * @param versions - RO history log + * @returns ID of the new stream + */ +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}` + ); + + const title = "[BACKFILLED]"; // version.title is the title of the event, e.g. "Published" + const manifest = convert0xHexToCid(nextVersion.cid); + const op = + streamID === "" + ? createResearchObject(compose, { title, manifest }) + : updateResearchObject(compose, { id: streamID, title, manifest }); + return op; + }; + + 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 compose = newComposeClient({ ceramic }); + return await queryResearchObject(compose, id); +}; + +export const getCodexHistory = async ( + streamID: string +) => { + const ceramic = newCeramicClient(CERAMIC_NODE_URL); + return await resolveHistory(ceramic, streamID); +}; diff --git a/nodes-lib/src/config.ts b/nodes-lib/src/config.ts new file mode 100644 index 000000000..910e5b329 --- /dev/null +++ b/nodes-lib/src/config.ts @@ -0,0 +1,29 @@ +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/errors.ts b/nodes-lib/src/errors.ts new file mode 100644 index 000000000..9eb511591 --- /dev/null +++ b/nodes-lib/src/errors.ts @@ -0,0 +1,22 @@ + + +export class BaseError extends Error { + name: T; + message: string; + cause: any; + + constructor({ + name, message, cause + }: { + name: T, + message: string, + cause?: any, + }) { + super(); + this.name = name; + this.message = message; + this.cause = cause; + }; +}; + +export class PublishError extends BaseError<"DPID_PUBLISH_ERROR"> {}; diff --git a/nodes-lib/src/index.ts b/nodes-lib/src/index.ts new file mode 100644 index 000000000..bcc98637a --- /dev/null +++ b/nodes-lib/src/index.ts @@ -0,0 +1,2 @@ +export * from "./api.js" + diff --git a/nodes-lib/src/publish.ts b/nodes-lib/src/publish.ts new file mode 100644 index 000000000..7a80d9133 --- /dev/null +++ b/nodes-lib/src/publish.ts @@ -0,0 +1,51 @@ +import { type NodeIDs } from "@desci-labs/desci-codex-lib/dist/src/index.js"; +import { getDpidHistory } from "./api.js"; +import { dpidPublish, hasDpid, type DpidPublishResult } from "./chain.js"; +import { codexPublish } from "./codex.js"; +import { PublishError } from "./errors.js"; + +/** + * The complete publish flow, including both the dPID registry and Codex. +*/ +export const publish = async ( + uuid: string, +) => { + let chainPubResponse: DpidPublishResult; + let preexistingDpid: boolean; + try { + preexistingDpid = await hasDpid(uuid); + chainPubResponse = await dpidPublish(uuid, preexistingDpid); + } 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: err, + }); + }; + + let ceramicIDs: NodeIDs | undefined; + try { + // If the dPID is new, skip checking for history to potentially backfill + const publishHistory = preexistingDpid + ? await getDpidHistory(uuid) + : []; + ceramicIDs = await codexPublish(chainPubResponse.prepubResult, publishHistory); + } catch (e) { + const err = e as Error; + console.log("Codex publish failed:", err); + console.log(`Publish flow will continue with uuid ${uuid} as dPID registry already has been updated.`); + }; + + return { + manifest: chainPubResponse.prepubResult.updatedManifest, + cid: chainPubResponse.prepubResult.updatedManifestCid, + ceramicIDs: ceramicIDs, + transactionId: chainPubResponse.reciept.transactionHash, + }; +}; diff --git a/nodes-lib/src/util/base64binary.ts b/nodes-lib/src/util/base64binary.ts new file mode 100644 index 000000000..3eb98a1c0 --- /dev/null +++ b/nodes-lib/src/util/base64binary.ts @@ -0,0 +1,96 @@ +/* +Copyright (c) 2011, Daniel Guerrero +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL DANIEL GUERRERO BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/** + * Uses the new array typed in javascript to binary base64 encode/decode + * at the moment just decodes a binary base64 encoded + * into either an ArrayBuffer (decodeArrayBuffer) + * or into an Uint8Array (decode) + * + * References: + * https://developer.mozilla.org/en/JavaScript_typed_arrays/ArrayBuffer + * https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array + */ + +const Base64Binary = { + _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + + /* will return a Uint8Array type */ + + decodeArrayBuffer: function (input: string) { + const bytes = (input.length / 4) * 3; + const ab = new ArrayBuffer(bytes); + this.decode(input, ab); + + return ab; + }, + + removePaddingChars: function (input: string) { + const lkey = this._keyStr.indexOf(input.charAt(input.length - 1)); + if (lkey == 64) { + return input.substring(0, input.length - 1); + } + return input; + }, + + decode: function (input: string, arrayBuffer: ArrayBuffer) { + //get last chars to see if are valid + input = this.removePaddingChars(input); + input = this.removePaddingChars(input); + + const bytes = parseInt((input.length / 4) * 3 + "", 10); + + let uarray; + let chr1, chr2, chr3; + let enc1, enc2, enc3, enc4; + let i = 0; + let j = 0; + + if (arrayBuffer) uarray = new Uint8Array(arrayBuffer); + else uarray = new Uint8Array(bytes); + + // eslint-disable-next-line no-useless-escape + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + for (i = 0; i < bytes; i += 3) { + //get the 3 octects in 4 ascii chars + enc1 = this._keyStr.indexOf(input.charAt(j++)); + enc2 = this._keyStr.indexOf(input.charAt(j++)); + enc3 = this._keyStr.indexOf(input.charAt(j++)); + enc4 = this._keyStr.indexOf(input.charAt(j++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + uarray[i] = chr1; + if (enc3 != 64) uarray[i + 1] = chr2; + if (enc4 != 64) uarray[i + 2] = chr3; + } + + return uarray; + }, +}; + +export default Base64Binary; diff --git a/nodes-lib/src/util/converting.ts b/nodes-lib/src/util/converting.ts new file mode 100644 index 000000000..e8be50e16 --- /dev/null +++ b/nodes-lib/src/util/converting.ts @@ -0,0 +1,33 @@ +import { decode } from "url-safe-base64"; +import Base64Binary from "./base64binary.js"; +import { base16 } from "multiformats/bases/base16"; +import { base32 } from "multiformats/bases/base32"; +import { CID } from "multiformats/cid"; + +export const convertUUIDToHex = (uuid: string) => { + const decoded = decode(uuid + "."); + const buffer = Base64Binary.decodeArrayBuffer(decoded).slice(0, 32); + let base64UuidToBase16 = Buffer.from(buffer).toString("hex"); + base64UuidToBase16 = "0x" + (base64UuidToBase16.length % 2 == 0 + ? base64UuidToBase16 + : "0" + base64UuidToBase16); + return base64UuidToBase16; +}; + +export const convertCidTo0xHex = (cid: string) => { + const c = CID.parse(cid) + const rootStrHex = c.toString(base16); + const paddedAndPrefixed = "0x" + (rootStrHex.length % 2 === 0 ? rootStrHex : "0" + rootStrHex); + return paddedAndPrefixed; +}; + +export const convert0xHexToCid = (hexCid: string) => { + const without0x = hexCid.substring(2); + const withoutPadding = without0x.length % 2 === 0 + ? without0x.substring(1) + : without0x; + + const cidBytes = base16.decode(withoutPadding); + const cid = CID.decode(cidBytes); + return cid.toString(base32); +}; diff --git a/nodes-lib/test/convert.spec.ts b/nodes-lib/test/convert.spec.ts new file mode 100644 index 000000000..6f03088ed --- /dev/null +++ b/nodes-lib/test/convert.spec.ts @@ -0,0 +1,29 @@ +import { test, describe, expect } from "vitest"; +import { convertCidTo0xHex, convert0xHexToCid, convertUUIDToHex } from "../src/util/converting.js"; + +describe("conversion", async () => { + describe("between UUID and hex", async () => { + const uuid = "pOV6-0ZN8k8Nlb3iJ7BHgbHt4V_xt-H-dUbRQCLKl78"; + const expectedHex = "0xa4e57afb464df24f0d95bde227b04781b1ede15ff1b7e1fe7546d14022ca97bf"; + + test("works", async () => { + const actualHex = convertUUIDToHex(uuid) + expect(actualHex).toEqual(expectedHex); + }); + }); + + describe("between CID and hex", async () => { + const exampleCid = "bafkreihge5qw7sc3mqc4wkf4cgpv6udtvrgipfxwyph7dhlyu6bkkt7tfq"; + const expectedHex = "0x0f01551220e627616fc85b6405cb28bc119f5f5073ac4c8796f6c3cff19d78a782a54ff32c"; + + test("works one way", async () => { + const cidAsHex = convertCidTo0xHex(exampleCid); + expect(cidAsHex).toEqual(expectedHex); + }); + + test("works the other way", async () => { + const hexAsCid = convert0xHexToCid(expectedHex); + expect(hexAsCid).toEqual(exampleCid); + }); + }); +}); diff --git a/nodes-lib/test/root.spec.ts b/nodes-lib/test/root.spec.ts new file mode 100644 index 000000000..e425e4ec0 --- /dev/null +++ b/nodes-lib/test/root.spec.ts @@ -0,0 +1,605 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { test, describe, beforeAll, expect } from "vitest"; +import type { + AddCodeComponentParams, AddLinkComponentParams, AddPdfComponentParams, + CreateDraftParams, ExternalUrl, PublishResponse, RetrieveResponse, + UploadFilesResponse, +} from "../src/api.js" +import { + createDraftNode, getDraftNode, publishDraftNode, createNewFolder, + retrieveDraftFileTree, moveData, uploadFiles, deleteDraftNode, + getDpidHistory, deleteData, addPdfComponent, addCodeComponent, + uploadPdfFromUrl, uploadGithubRepoFromUrl, listNodes, addLinkComponent, + deleteComponent, updateComponent, changeManifest, updateTitle, + updateDescription, updateLicense, updateResearchFields, addContributor, + removeContributor, addExternalUnixFsTree, updateCoverImage, +} from "../src/api.js"; +import axios from "axios"; +import { getCodexHistory, getPublishedFromCodex } from "../src/codex.js"; +import { dpidPublish } from "../src/chain.js"; +import { sleep } from "./util.js"; +import { convert0xHexToCid } from "../src/util/converting.js"; +import { + ResearchObjectComponentDocumentSubtype, + ResearchObjectComponentCodeSubtype, + ResearchObjectComponentLinkSubtype, + type License, + type ResearchField, + type ResearchObjectV1Author, + ResearchObjectV1AuthorRole, + ResearchObjectComponentType, + ResearchObjectComponentDataSubtype +} from "@desci-labs/desci-models"; + +// 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"; + +describe("nodes-lib", () => { + beforeAll(async () => { + try { + console.log(`Checking server reachable at ${NODES_API_URL}...`); + await axios.get(NODES_API_URL); + console.log("Server is reachable"); + } catch (e) { + console.error( + "Failed to connect to desci-server; is the service running?", + ); + process.exit(1); + } + }); + describe("draft nodes", async () => { + test("can be created", async () => { + const response = await createBoilerplateNode(); + + const actual = await getDraftNode(response.node.uuid); + expect(actual.title).toEqual("My Node"); + }); + + test("can be listed", async () => { + await createBoilerplateNode(); + await createBoilerplateNode(); + + const listedNodes = await listNodes(); + // Lazy check that listing returns at least these two nodes + expect(listedNodes.length).toBeGreaterThan(2); + }); + + test("can be deleted", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + + await deleteDraftNode(uuid); + await expect(getDraftNode(uuid)).rejects.toThrowError("403"); + }); + }); + + describe("manifest document actions", async () => { + describe("can update top-level property", async () => { + let uuid: string; + + beforeAll(async () => { + const { node } = await createBoilerplateNode(); + uuid = node.uuid; + }); + + test("title", async () => { + const newTitle = "UNTITLED"; + const { document: { manifest }} = await updateTitle(uuid, newTitle); + expect(manifest.title).toEqual(newTitle); + }); + + test("description", async () => { + const newDesc = "Oh my what an interesting topic"; + const { document: { manifest }} = await updateDescription(uuid, newDesc); + expect(manifest.description).toEqual(newDesc); + }); + + test("license", async () => { + const newLicense: License = "Mozilla Public License 2.0"; + const { document: { manifest }} = await updateLicense(uuid, newLicense); + expect(manifest.defaultLicense).toEqual(newLicense); + }); + + test("research fields", async () => { + const newResearchFields: ResearchField[] = [ "Bathymetry", "Fisheries Science" ]; + const { document: { manifest }} = await updateResearchFields(uuid, newResearchFields); + expect(manifest.researchFields).toEqual(newResearchFields); + }); + + test("contributors", async () => { + const newContributors: ResearchObjectV1Author[] = [ + { + name: "Dr Jones", + role: ResearchObjectV1AuthorRole.AUTHOR, + }, + { + name: "Assistant Measly", + role: ResearchObjectV1AuthorRole.NODE_STEWARD, + } + ]; + await addContributor(uuid, newContributors[0]); + const { document: { manifest }} = await addContributor( + uuid, newContributors[1] + ); + expect(manifest.authors).toEqual(newContributors); + + const { document: { manifest: updatedManifest }} = + await removeContributor(uuid, 1); + expect(updatedManifest.authors).toEqual([newContributors[0]]) + }); + + describe("cover image", async () => { + test("can be set", async () => { + const coverCid = "bafkreidivzimqfqtoqxkrpge6bjyhlvxqs3rhe73owtmdulaxr5do5in7u"; + const { document: { manifest: updatedManifest } } = await updateCoverImage(uuid, coverCid); + expect(updatedManifest.coverImage).toEqual(coverCid); + }); + + test("can be unset", async () => { + const { document: { manifest: updatedManifest } } = await updateCoverImage(uuid, undefined); + expect(updatedManifest.coverImage).toBeUndefined(); + }); + }); + }); + + test("can add link component", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const component: AddLinkComponentParams = { + name: "my component", + url: "http://google.com", + subtype: ResearchObjectComponentLinkSubtype.OTHER, + starred: false, + }; + await addLinkComponent(uuid, component); + const state = await getDraftNode(uuid); + const actualComponents = state.manifestData.components; + + // Data bucket already present, so new component at index 1 + expect(actualComponents.length).toEqual(2); + expect(actualComponents[1].name).toEqual(component.name); + }); + + test("can add pdf component", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const localFilePaths = [ "test/test.pdf" ]; + const uploadResult = await uploadFiles({ + uuid, + targetPath: "root", + localFilePaths + }); + + const pdfComponentParams: AddPdfComponentParams = { + name: "Manuscript", + subtype: ResearchObjectComponentDocumentSubtype.MANUSCRIPT, + pathToFile: "root/test.pdf", + cid: uploadResult.tree[0].contains![0].cid, + starred: true, + }; + await addPdfComponent(uuid, pdfComponentParams); + const state = await getDraftNode(uuid); + const actualComponents = state.manifestData.components; + + // Data bucket already present, so new component at index 1 + expect(actualComponents.length).toEqual(2); + expect(actualComponents[1].payload.cid).toEqual(pdfComponentParams.cid); + }); + + test("can add a code component", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const localFilePaths = [ "test/root.spec.ts" ]; + const uploadResult = await uploadFiles({ + uuid, + targetPath: "root", + localFilePaths + }); + const uploadedFileCid = uploadResult.tree[0].contains![0].cid; + const codeComponentParams: AddCodeComponentParams = { + name: "Tests", + subtype: ResearchObjectComponentCodeSubtype.CODE_SCRIPTS, + cid: uploadedFileCid, + path: "root/root.spec.ts", + language: "typescript", + starred: true, + }; + await addCodeComponent(uuid, codeComponentParams); + const state = await getDraftNode(uuid); + const actualComponents = state.manifestData.components; + + // Data bucket already present, so new component at index 1 + expect(actualComponents.length).toEqual(2); + expect(actualComponents[1].payload.cid).toEqual(uploadedFileCid); + + }); + + test("can delete component", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + await addLinkComponent( + uuid, + { + name: "Link", + url: "https://google.com", + subtype: ResearchObjectComponentLinkSubtype.OTHER, + starred: false, + }, + ); + + await deleteComponent(uuid, `root/External Links/Link`); + const node = await getDraftNode(uuid); + expect(node.manifestData.components.length).toEqual(1); // Just data-bucket + }); + + test("can update component", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const { document: { manifest }} = await addLinkComponent( + uuid, + { + name: "Link", + url: "https://google.com", + subtype: ResearchObjectComponentLinkSubtype.OTHER, + starred: false, + }, + ); + + // Change + const expectedComponent = manifest.components[1]; + expectedComponent.payload.url = "https://desci.com"; + + await updateComponent( + uuid, + { + componentIndex: 1, + component: expectedComponent, + }, + ); + + const updatedNode = await getDraftNode(uuid); + const updatedComponent = updatedNode.manifestData.components[1]; + expect(updatedComponent.payload.url).toEqual(expectedComponent.payload.url) + }); + }); + + describe("publishing ", async () => { + let uuid: string; + let publishResult: PublishResponse; + + beforeAll(async () => { + const { node } = await createBoilerplateNode(); + uuid = node.uuid; + publishResult = await publishDraftNode(uuid); + expect(publishResult.ok).toEqual(true); + }); + + describe("new node", async () => { + test("adds it to the dpid registry", async () => { + // Allow graph node to index + await sleep(1_500); + + const historyResult = await getDpidHistory(uuid); + const actualCid = convert0xHexToCid(historyResult[0].cid); + expect(actualCid).toEqual(publishResult.updatedManifestCid); + }); + + test("sets dPID in manifest", async () => { + const node = await getDraftNode(uuid); + expect(node.manifestData.dpid).not.toBeUndefined(); + expect(node.manifestData.dpid?.prefix).toEqual("beta"); + expect(node.manifestData.dpid?.id).not.toBeNaN(); + }); + + test("to codex", async () => { + expect(publishResult.ceramicIDs).not.toBeUndefined(); + const ceramicObject = await getPublishedFromCodex(publishResult.ceramicIDs!.streamID); + expect(ceramicObject?.manifest).toEqual(publishResult.updatedManifestCid); + }); + }); + + describe("node update", async () => { + let updateResult: PublishResponse; + + beforeAll(async () => { + updateResult = await publishDraftNode(uuid); + expect(updateResult.ok).toEqual(true); + // Allow graph node to index + await sleep(1_500); + }); + + test("updates entry in dpid registry", async () => { + const historyResult = await getDpidHistory(uuid); + const actualCid = convert0xHexToCid(historyResult[0].cid); + expect(actualCid).toEqual(publishResult.updatedManifestCid); + expect(historyResult.length).toEqual(2); + }); + + test("publishes to codex stream", async () => { + expect(publishResult.ceramicIDs).not.toBeUndefined(); + + const ceramicObject = await getPublishedFromCodex(publishResult.ceramicIDs!.streamID); + expect(ceramicObject?.manifest).toEqual(publishResult.updatedManifestCid); + + const ceramicHistory = await getCodexHistory(publishResult.ceramicIDs!.streamID); + expect(ceramicHistory.length).toEqual(2); + }); + }); + + test("with backfill ceramic migration", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + + // make a dpid-only publish + await dpidPublish(uuid, false); + + // Allow graph node to index + await sleep(1_500); + + // make a regular publish + const pubResult = await publishDraftNode(uuid); + + // Allow graph node to index + await sleep(1_500); + + // make sure codex history is of equal length + const dpidHistory = await getDpidHistory(uuid); + const codexHistory = await getCodexHistory(pubResult.ceramicIDs!.streamID); + expect(dpidHistory.length).toEqual(2); + expect (codexHistory.length).toEqual(2); + }); + + /** This is not an user feature, but part of error handling during publish */ + test("can remove dPID from manifest", async () => { + await changeManifest( + uuid, [{ type: "Remove Dpid" }] + ); + const node = await getDraftNode(uuid); + expect(node.manifestData.dpid).toBeUndefined(); + }); + + }); + + describe("data management", async () => { + describe("trees", async () => { + test("can be retrieved by owner", async () => { + const { ok, node: { uuid }} = await createBoilerplateNode(); + expect(ok).toEqual(true); + + const treeResult = await retrieveDraftFileTree(uuid); + expect(treeResult.tree).toHaveLength(1); + }); + }); + + describe("folders", async () => { + const expectedFolderName = "MyFolder"; + let uuid: string; + + beforeAll(async () => { + const createRes = await createBoilerplateNode(); + expect(createRes.ok).toEqual(true); + + uuid = createRes.node.uuid; + + await createNewFolder({ + uuid, + locationPath: "root", + folderName: expectedFolderName + }); + }); + + test("can be created", async () => { + const treeResult = await retrieveDraftFileTree(uuid); + const actualFolderName = treeResult.tree[0].contains![0].name; + + expect(actualFolderName).toEqual(expectedFolderName); + }); + + test("can be moved", async () => { + const otherFolderName = "dir"; + await createNewFolder({ + uuid, + locationPath: "root", + folderName: otherFolderName, + }); + await moveData( + { + uuid, + oldPath: `root/${otherFolderName}`, + newPath: `root/${expectedFolderName}/${expectedFolderName}` + }, + ); + + const treeResult = await retrieveDraftFileTree(uuid); + + const dir = treeResult.tree[0].contains![0]; + expect(dir.contains![0].name).toEqual(expectedFolderName); + }); + + test("can be deleted", async () => { + await deleteData( + { + uuid, + path: `root/${expectedFolderName}` + }, + ); + const treeResult = await retrieveDraftFileTree(uuid); + + expect(treeResult.tree[0].contains).toEqual([]); + }); + }); + + describe("files", async () => { + test("can be uploaded", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const localFilePaths = [ "package.json", "package-lock.json" ]; + await uploadFiles({ + uuid, + targetPath: "root", + localFilePaths, + }); + + const treeResult = await retrieveDraftFileTree(uuid); + const driveContent = treeResult.tree[0].contains!; + + expect(driveContent.map(driveObject => driveObject.name)) + .toEqual(expect.arrayContaining(localFilePaths)); + driveContent.forEach(driveObject => { + expect(driveObject.size).toBeGreaterThan(0); + }); + }); + + test("can be moved", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const localFilePaths = [ "package.json" ]; + const uploadResult = await uploadFiles({ + uuid, + targetPath: "root", + localFilePaths, + }); + expect(uploadResult.tree[0].contains![0].path).toEqual("root/package.json"); + + await moveData({ + uuid, + oldPath: "root/package.json", + newPath: "root/json.package", + }); + + const treeResult = await retrieveDraftFileTree(uuid); + expect(treeResult.tree[0].contains![0].path).toEqual("root/json.package"); + }); + + test("can be deleted", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + const localFilePaths = [ "package.json" ]; + const uploadResult = await uploadFiles({ + uuid, + targetPath: "root", + localFilePaths, + }); + + expect(uploadResult.tree[0].contains![0].name).toEqual("package.json"); + + await deleteData({ + uuid, + path: "root/package.json" + }); + + const treeResult = await retrieveDraftFileTree(uuid); + + expect(treeResult.tree[0].contains!.length).toEqual(0); + }); + + describe("can be uploaded by PDF URL", async () => { + let treeResult: RetrieveResponse; + let uploadResult: UploadFilesResponse; + let externalUrl: ExternalUrl; + beforeAll(async () => { + const { node: { uuid }} = await createBoilerplateNode(); + externalUrl = { + url: "https://ipfs.desci.com/ipfs/bafybeiamslevhsvjlnfejg7p2rzk6bncioaapwb3oauu7zqwmfpwko5ho4", + path: "manuscript.pdf", + }; + uploadResult = await uploadPdfFromUrl({ + uuid, + externalUrl, + targetPath: "root", + componentSubtype: ResearchObjectComponentDocumentSubtype.MANUSCRIPT, + }); + treeResult = await retrieveDraftFileTree(uuid); + }); + + test("adds file to tree", async () => { + const files = treeResult.tree[0].contains; + expect(files).not.toBeUndefined(); + expect(files!.length).toEqual(1); + expect(files![0].name).toEqual(externalUrl.path); + }); + + test("automatically gets a component", async () => { + const components = uploadResult.manifest.components; + // TODO backend bug creates duplicates: https://github.com/desci-labs/nodes/issues/206 + // expect(components.length).toEqual(2); + + const expectedComponent = expect.objectContaining({ + // id: some UUID, + name: "manuscript.pdf", + type: "pdf", + subtype: "manuscript", + payload: expect.objectContaining({ + // cid: some cid, + path: "root/manuscript.pdf", + externalUrl: "https://ipfs.desci.com/ipfs/bafybeiamslevhsvjlnfejg7p2rzk6bncioaapwb3oauu7zqwmfpwko5ho4" + }), + starred: false + }); + + expect(components).toEqual( + expect.arrayContaining([expectedComponent]) + ); + }); + }); + + describe("can be uploaded by repo URL", async () => { + let externalUrl: ExternalUrl; + let treeResult: RetrieveResponse; + beforeAll(async () => { + const { node: { uuid}} = await createBoilerplateNode(); + externalUrl = { + // This is probably stupid to do in a unit test + url: "https://github.com/desci-labs/desci-codex", + path: "DeSci Codex", + }; + await uploadGithubRepoFromUrl({ + uuid, + externalUrl, + targetPath: "root", + componentSubtype: ResearchObjectComponentCodeSubtype.SOFTWARE_PACKAGE, + }); + treeResult = await retrieveDraftFileTree(uuid); + }); + + test("adds repo to tree", async () => { + expect(treeResult.tree[0]).not.toBeUndefined(); + const tree = treeResult.tree[0]; + // Lazy size check, prob ok if it got a lot of stuff + expect(tree.size).toBeGreaterThan(10_000); + expect(tree.contains).not.toBeUndefined(); + expect(tree.contains![0].name).toEqual(externalUrl.path); + expect(tree.contains![0].contains!.length).toBeGreaterThan(5); + }); + }); + }); + + describe("external CID", async () => { + test("can be added", async () => { + const { node: { uuid }} = await createBoilerplateNode(); + await createNewFolder( + {uuid, locationPath: "root", folderName: "catpics"} + ); + const catCid = "bafkreidivzimqfqtoqxkrpge6bjyhlvxqs3rhe73owtmdulaxr5do5in7u"; + const addResult = await addExternalUnixFsTree({ + uuid, + externalCids: [{ + cid: catCid, + name: "cat.jpg", + }], + targetPath: "/catpics", + componentType: ResearchObjectComponentType.DATA, + componentSubtype: ResearchObjectComponentDataSubtype.IMAGE, + }); + + expect(addResult.tree[0].contains![0].contains![0]).toMatchObject(expect.objectContaining({ + cid: catCid, + path: "root/catpics/cat.jpg", + name: "cat.jpg", + external: true, + })); + }); + }); + }); +}); + +const createBoilerplateNode = async () => { + const node: Omit = { + title: "My Node", + defaultLicense: "CC-BY", + researchFields: ["Horticulture"], + }; + + return await createDraftNode(node); +} diff --git a/nodes-lib/test/test.pdf b/nodes-lib/test/test.pdf new file mode 100644 index 000000000..a8e01970f Binary files /dev/null and b/nodes-lib/test/test.pdf differ diff --git a/nodes-lib/test/util.ts b/nodes-lib/test/util.ts new file mode 100644 index 000000000..3a70daf24 --- /dev/null +++ b/nodes-lib/test/util.ts @@ -0,0 +1,3 @@ +export const sleep = async (seconds: number) => { + await new Promise(r => setTimeout(r, seconds)); +}; diff --git a/nodes-lib/tsconfig.build.json b/nodes-lib/tsconfig.build.json new file mode 100644 index 000000000..f6f9dda24 --- /dev/null +++ b/nodes-lib/tsconfig.build.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "src" + ] +} diff --git a/nodes-lib/tsconfig.json b/nodes-lib/tsconfig.json new file mode 100644 index 000000000..e3744bda4 --- /dev/null +++ b/nodes-lib/tsconfig.json @@ -0,0 +1,27 @@ +{ + /** 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", + "target": "es2020", + /** Without strict, we'd error when imported into a project with `strict` */ + "strict": true, + /** Prevent misbehaving import/export statements */ + // "verbatimModuleSyntax": true, // desci-contracts acts up + /** Misbehaving deps: @ceramicnetwork/{codecs,common}, @didtools/{cacao,codecs}, codeco, ipfs-core-types */ + "skipLibCheck": true, + + /** Import friendliness */ + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "outDir": "dist", + + /** Allow importing ABI's */ + "resolveJsonModule": true, + + /** Misc hygiene */ + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true + } +} diff --git a/nodes-lib/vitest.config.ts b/nodes-lib/vitest.config.ts new file mode 100644 index 000000000..fc13e8af1 --- /dev/null +++ b/nodes-lib/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "vitest/config"; +import GithubActionsReporter from "vitest-github-actions-reporter"; + +export default defineConfig({ + test: { + include: ["test/**/*.spec.ts"], + reporters: process.env.GITHUB_ACTIONS + ? ["verbose", new GithubActionsReporter()] + : "verbose", + }, +});