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",
+ },
+});