From 7fdfd5f570d6b0ff8c36712b19b05160ccb1a60d Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Wed, 28 May 2025 12:50:38 -0400 Subject: [PATCH] feat/ui (#11) * ui: improve visual consistency across components * feat: simplify task execution with consolidated commands * feat: enable account registration flow * feat: integrate price tracking functionality * feat: add metadata components for improved SEO and web crawling * refactor: improve code organization and consistency * fix: update login template package names * refactor: rename and restructure UI components for clarity * feat: introduce dynamic asset selection for transfer UI * chore: update dependencies and build process * feat: Add KVNamespace interface for Cloudflare KV store operations * refactor: Update JSON operations to use Golang generics with JSON Marshaller interface * feat: Add json import for KVNamespace generic JSON operations * refactor: Update PutJSON method to accept any type for JSON marshaling * refactor: migrate to modular architecture with domain-driven design * fix: directory structure for component routing * refactor: partial routes to htmx * docs: update documentation to reflect UI structure changes * refactor: relocate build artifacts for cleaner project structure * feat: integrate Cloudflare cache for improved performance * build: update import paths for middleware package * feat: implement core authentication flows * refactor: rename view handler to index handler for clarity * feat: introduce devbox for streamlined development environment * feat: introduce deployment and build scripts * feat: introduce radar and worker services with build automation * feat: introduce WASM-based worker and radar services * feat: migrate to standard go build process * fix: correct worker script path in wrangler configuration * feat: enhance service monitoring capabilities * refactor: migrate to new database and KV store context pattern * build: streamline worker builds using devbox scripts * feat: migrate to D1 database bindings for improved data access * feat: introduce session ID middleware * perf: optimize WASM build size by stripping debug information * feat: introduce process-compose for simplified local development * feat: enable direct wrangler commands and simplify deployment --- .github/doppler-template.yaml | 33 + .github/{scopes.json => project-scopes.json} | 0 .github/setup_env.sh | 106 + .github/workflows/deploy.yml | 2 +- .gitignore | 1 + CONVENTIONS.md | 23 - Makefile | 35 + README.md | 28 + Taskfile.yml | 124 - cmd/front/.gitignore | 5 - cmd/front/main.go | 25 - cmd/front/package-lock.json | 1540 ---- cmd/front/package.json | 16 - cmd/radar/main.go | 22 + cmd/{vault => radar}/package-lock.json | 1326 ++-- cmd/radar/package.json | 23 + cmd/{front => radar}/wrangler.toml | 42 +- cmd/vault/.gitignore | 5 - cmd/vault/main.go | 18 - cmd/vault/package.json | 27 - cmd/worker/main.go | 23 + cmd/worker/package-lock.json | 6675 +++++++++++++++++ cmd/worker/package.json | 23 + cmd/{vault => worker}/worker.mjs | 0 cmd/{vault => worker}/wrangler.toml | 10 +- config/config.go | 69 + controllers/account/card.templ | 48 - controllers/account/card_templ.go | 180 - controllers/account/entity.go | 63 - controllers/account/list.templ | 11 - controllers/account/list_templ.go | 58 - controllers/account/queries.go | 32 - controllers/account/select.templ | 11 - controllers/account/select_templ.go | 58 - controllers/activity/card.templ | 48 - controllers/activity/card_templ.go | 180 - controllers/activity/entity.go | 16 - controllers/activity/list.templ | 11 - controllers/activity/list_templ.go | 58 - controllers/activity/queries.go | 27 - controllers/asset/entity.go | 17 - controllers/asset/queries.go | 27 - controllers/asset/select.templ | 7 - controllers/asset/select_templ.go | 40 - controllers/blockchain/entity.go | 17 - controllers/blockchain/queries.go | 41 - controllers/credential/entity.go | 18 - controllers/credential/inputs_templ.go | 232 - controllers/credential/queries.go | 22 - controllers/health/entity.go | 16 - controllers/health/queries.go | 26 - controllers/prices/entity.go | 16 - controllers/prices/queries.go | 23 - controllers/profile/entity.go | 16 - controllers/profile/inputs.templ | 8 - controllers/profile/inputs_templ.go | 40 - controllers/profile/queries.go | 26 - controllers/service/entity.go | 16 - controllers/service/queries.go | 26 - controllers/vault/entity.go | 9 - controllers/vault/forms.templ | 7 - controllers/vault/forms_templ.go | 40 - controllers/vault/options.go | 18 - controllers/vault/queries.go | 25 - devbox.json | 61 + devbox.lock | 394 + handlers/default_error.go | 11 - handlers/default_index.go | 11 - handlers/default_valid.go | 11 - handlers/error_handler.go | 11 + handlers/index_handler.go | 15 + handlers/login_check.go | 11 - handlers/login_finish.go | 11 - handlers/login_handler.go | 33 + handlers/login_initial.go | 11 - handlers/login_start.go | 11 - handlers/register_check.go | 11 - handlers/register_finish.go | 11 - handlers/register_handler.go | 29 + handlers/register_initial.go | 11 - handlers/register_start.go | 11 - .../{status_check.go => status_handler.go} | 0 internal/sink/activity/db.go | 31 + internal/sink/activity/models.go | 63 + internal/sink/activity/querier.go | 41 + internal/sink/activity/query.sql | 191 + internal/sink/activity/query.sql.go | 1022 +++ internal/sink/activity/schema.sql | 84 + internal/sink/network/db.go | 31 + .../sink/network}/models.go | 115 +- .../sink/network}/querier.go | 70 +- .../sink/network}/query.sql | 427 -- .../sink/network}/query.sql.go | 2182 +----- .../sink/network}/schema.sql | 165 - internal/sink/sqlc.yaml | 34 + {sink/models => internal/sink/users}/db.go | 4 +- internal/sink/users/models.go | 68 + internal/sink/users/querier.go | 53 + internal/sink/users/query.sql | 234 + internal/sink/users/query.sql.go | 1177 +++ internal/sink/users/schema.sql | 81 + {ui => internal/ui}/charts/area_chart.templ | 0 .../ui}/charts/area_chart_templ.go | 4 +- {ui => internal/ui}/charts/bar_chart.templ | 0 {ui => internal/ui}/charts/bar_chart_templ.go | 4 +- {ui => internal/ui}/charts/candle_chart.templ | 0 .../ui}/charts/candle_chart_templ.go | 0 {ui => internal/ui}/charts/line_chart.templ | 0 .../ui}/charts/line_chart_templ.go | 4 +- {ui => internal/ui}/charts/pie_chart.templ | 0 {ui => internal/ui}/charts/pie_chart_templ.go | 4 +- .../ui/dash/cards.templ | 2 +- .../ui/dash/cards_templ.go | 2 +- .../ui/dash/scripts.templ | 2 +- .../ui/dash/scripts_templ.go | 2 +- .../ui/dash/view.templ | 23 +- .../ui/dash/view_templ.go | 21 +- .../home.templ => internal/ui/home/view.templ | 19 +- .../ui/home/view_templ.go | 22 +- {ui => internal/ui}/layout.templ | 44 + internal/ui/layout_templ.go | 633 ++ .../ui/login/inputs.templ | 23 +- internal/ui/login/inputs_templ.go | 263 + .../ui/login/scripts.templ | 25 +- internal/ui/login/scripts_templ.go | 106 + .../ui/login/view.templ | 8 +- .../ui/login/view_templ.go | 6 +- .../ui/metadata_templ.go | 199 +- .../ui/providers.templ | 22 +- .../ui/providers_templ.go | 99 +- internal/ui/register/inputs.templ | 67 + .../ui/register/inputs_templ.go | 210 +- .../ui/register/scripts.templ | 22 +- internal/ui/register/scripts_templ.go | 106 + internal/ui/register/view.templ | 57 + .../ui/register/view_templ.go | 13 +- ui/style.templ => internal/ui/styles.templ | 43 +- .../ui/styles_templ.go | 62 +- internal/ui/transfer/data.go | 24 + .../ui/transfer/inputs.templ | 57 +- .../ui/transfer/inputs_templ.go | 130 +- middleware/cache.go | 203 - middleware/context.go | 69 - middleware/middleware.go | 31 - middleware/state.go | 36 - {middleware => pkg/cookies}/cookies.go | 59 +- pkg/database/bindings.go | 35 + pkg/database/connection.go | 50 + pkg/database/middleware.go | 44 + {middleware => pkg/headers}/headers.go | 25 +- {middleware => pkg/render}/render.go | 10 +- pkg/session/metadata.templ | 97 + pkg/session/middleware.go | 59 + .../webauth/credential_descriptor.go | 4 +- routes/routes.go | 35 +- sink/base/errors.go | 10 - sink/config/config.go | 183 - sink/config/errors.go | 12 - sink/config/server.go | 85 - sink/metadata.go | 44 - sink/state.go | 38 - sqlc.yaml | 11 - ui/base.templ | 30 - ui/base_templ.go | 151 - ui/inputs/input_avatar.templ | 8 - ui/inputs/input_avatar_templ.go | 40 - ui/inputs/input_bio.templ | 9 - ui/inputs/input_bio_templ.go | 66 - ui/inputs/input_handle_templ.go | 137 - ui/inputs/input_passkey_templ.go | 232 - ui/menus/assets_dropdown.templ | 37 - ui/menus/assets_dropdown_templ.go | 40 - ui/meta.templ | 27 - ui/views/register.templ | 30 - 174 files changed, 13605 insertions(+), 9142 deletions(-) create mode 100644 .github/doppler-template.yaml rename .github/{scopes.json => project-scopes.json} (100%) create mode 100644 .github/setup_env.sh delete mode 100644 CONVENTIONS.md create mode 100644 Makefile delete mode 100644 Taskfile.yml delete mode 100644 cmd/front/.gitignore delete mode 100644 cmd/front/main.go delete mode 100644 cmd/front/package-lock.json delete mode 100644 cmd/front/package.json create mode 100644 cmd/radar/main.go rename cmd/{vault => radar}/package-lock.json (87%) create mode 100644 cmd/radar/package.json rename cmd/{front => radar}/wrangler.toml (73%) delete mode 100644 cmd/vault/.gitignore delete mode 100644 cmd/vault/main.go delete mode 100644 cmd/vault/package.json create mode 100644 cmd/worker/main.go create mode 100644 cmd/worker/package-lock.json create mode 100644 cmd/worker/package.json rename cmd/{vault => worker}/worker.mjs (100%) rename cmd/{vault => worker}/wrangler.toml (87%) create mode 100644 config/config.go delete mode 100644 controllers/account/card.templ delete mode 100644 controllers/account/card_templ.go delete mode 100644 controllers/account/entity.go delete mode 100644 controllers/account/list.templ delete mode 100644 controllers/account/list_templ.go delete mode 100644 controllers/account/queries.go delete mode 100644 controllers/account/select.templ delete mode 100644 controllers/account/select_templ.go delete mode 100644 controllers/activity/card.templ delete mode 100644 controllers/activity/card_templ.go delete mode 100644 controllers/activity/entity.go delete mode 100644 controllers/activity/list.templ delete mode 100644 controllers/activity/list_templ.go delete mode 100644 controllers/activity/queries.go delete mode 100644 controllers/asset/entity.go delete mode 100644 controllers/asset/queries.go delete mode 100644 controllers/asset/select.templ delete mode 100644 controllers/asset/select_templ.go delete mode 100644 controllers/blockchain/entity.go delete mode 100644 controllers/blockchain/queries.go delete mode 100644 controllers/credential/entity.go delete mode 100644 controllers/credential/inputs_templ.go delete mode 100644 controllers/credential/queries.go delete mode 100644 controllers/health/entity.go delete mode 100644 controllers/health/queries.go delete mode 100644 controllers/prices/entity.go delete mode 100644 controllers/prices/queries.go delete mode 100644 controllers/profile/entity.go delete mode 100644 controllers/profile/inputs.templ delete mode 100644 controllers/profile/inputs_templ.go delete mode 100644 controllers/profile/queries.go delete mode 100644 controllers/service/entity.go delete mode 100644 controllers/service/queries.go delete mode 100644 controllers/vault/entity.go delete mode 100644 controllers/vault/forms.templ delete mode 100644 controllers/vault/forms_templ.go delete mode 100644 controllers/vault/options.go delete mode 100644 controllers/vault/queries.go create mode 100644 devbox.json create mode 100644 devbox.lock delete mode 100644 handlers/default_error.go delete mode 100644 handlers/default_index.go delete mode 100644 handlers/default_valid.go create mode 100644 handlers/error_handler.go create mode 100644 handlers/index_handler.go delete mode 100644 handlers/login_check.go delete mode 100644 handlers/login_finish.go create mode 100644 handlers/login_handler.go delete mode 100644 handlers/login_initial.go delete mode 100644 handlers/login_start.go delete mode 100644 handlers/register_check.go delete mode 100644 handlers/register_finish.go create mode 100644 handlers/register_handler.go delete mode 100644 handlers/register_initial.go delete mode 100644 handlers/register_start.go rename handlers/{status_check.go => status_handler.go} (100%) create mode 100644 internal/sink/activity/db.go create mode 100644 internal/sink/activity/models.go create mode 100644 internal/sink/activity/querier.go create mode 100644 internal/sink/activity/query.sql create mode 100644 internal/sink/activity/query.sql.go create mode 100644 internal/sink/activity/schema.sql create mode 100644 internal/sink/network/db.go rename {sink/models => internal/sink/network}/models.go (57%) rename {sink/models => internal/sink/network}/querier.go (56%) rename {sink/migrations => internal/sink/network}/query.sql (61%) rename {sink/models => internal/sink/network}/query.sql.go (64%) rename {sink/migrations => internal/sink/network}/schema.sql (52%) create mode 100644 internal/sink/sqlc.yaml rename {sink/models => internal/sink/users}/db.go (94%) create mode 100644 internal/sink/users/models.go create mode 100644 internal/sink/users/querier.go create mode 100644 internal/sink/users/query.sql create mode 100644 internal/sink/users/query.sql.go create mode 100644 internal/sink/users/schema.sql rename {ui => internal/ui}/charts/area_chart.templ (100%) rename {ui => internal/ui}/charts/area_chart_templ.go (91%) rename {ui => internal/ui}/charts/bar_chart.templ (100%) rename {ui => internal/ui}/charts/bar_chart_templ.go (92%) rename {ui => internal/ui}/charts/candle_chart.templ (100%) rename {ui => internal/ui}/charts/candle_chart_templ.go (100%) rename {ui => internal/ui}/charts/line_chart.templ (100%) rename {ui => internal/ui}/charts/line_chart_templ.go (91%) rename {ui => internal/ui}/charts/pie_chart.templ (100%) rename {ui => internal/ui}/charts/pie_chart_templ.go (92%) rename ui/app/helia/blocks.templ => internal/ui/dash/cards.templ (99%) rename ui/app/helia/blocks_templ.go => internal/ui/dash/cards_templ.go (99%) rename ui/app/helia/script.templ => internal/ui/dash/scripts.templ (99%) rename ui/app/helia/script_templ.go => internal/ui/dash/scripts_templ.go (99%) rename ui/views/console.templ => internal/ui/dash/view.templ (69%) rename ui/views/console_templ.go => internal/ui/dash/view_templ.go (93%) rename ui/views/home.templ => internal/ui/home/view.templ (84%) rename ui/views/home_templ.go => internal/ui/home/view_templ.go (88%) rename {ui => internal/ui}/layout.templ (63%) create mode 100644 internal/ui/layout_templ.go rename ui/inputs/input_handle.templ => internal/ui/login/inputs.templ (64%) create mode 100644 internal/ui/login/inputs_templ.go rename controllers/credential/inputs.templ => internal/ui/login/scripts.templ (75%) create mode 100644 internal/ui/login/scripts_templ.go rename ui/views/login.templ => internal/ui/login/view.templ (62%) rename ui/views/login_templ.go => internal/ui/login/view_templ.go (98%) rename ui/meta_templ.go => internal/ui/metadata_templ.go (55%) rename ui/imports.templ => internal/ui/providers.templ (96%) rename ui/imports_templ.go => internal/ui/providers_templ.go (79%) create mode 100644 internal/ui/register/inputs.templ rename ui/layout_templ.go => internal/ui/register/inputs_templ.go (58%) rename ui/inputs/input_passkey.templ => internal/ui/register/scripts.templ (77%) create mode 100644 internal/ui/register/scripts_templ.go create mode 100644 internal/ui/register/view.templ rename ui/views/register_templ.go => internal/ui/register/view_templ.go (87%) rename ui/style.templ => internal/ui/styles.templ (86%) rename ui/style_templ.go => internal/ui/styles_templ.go (62%) create mode 100644 internal/ui/transfer/data.go rename ui/menus/coins_dropdown.templ => internal/ui/transfer/inputs.templ (53%) rename ui/menus/coins_dropdown_templ.go => internal/ui/transfer/inputs_templ.go (64%) delete mode 100644 middleware/cache.go delete mode 100644 middleware/context.go delete mode 100644 middleware/middleware.go delete mode 100644 middleware/state.go rename {middleware => pkg/cookies}/cookies.go (66%) create mode 100644 pkg/database/bindings.go create mode 100644 pkg/database/connection.go create mode 100644 pkg/database/middleware.go rename {middleware => pkg/headers}/headers.go (68%) rename {middleware => pkg/render}/render.go (68%) create mode 100644 pkg/session/metadata.templ create mode 100644 pkg/session/middleware.go rename controllers/credential/descriptor.go => pkg/webauth/credential_descriptor.go (95%) delete mode 100644 sink/base/errors.go delete mode 100644 sink/config/config.go delete mode 100644 sink/config/errors.go delete mode 100644 sink/config/server.go delete mode 100644 sink/metadata.go delete mode 100644 sink/state.go delete mode 100644 sqlc.yaml delete mode 100644 ui/base.templ delete mode 100644 ui/base_templ.go delete mode 100644 ui/inputs/input_avatar.templ delete mode 100644 ui/inputs/input_avatar_templ.go delete mode 100644 ui/inputs/input_bio.templ delete mode 100644 ui/inputs/input_bio_templ.go delete mode 100644 ui/inputs/input_handle_templ.go delete mode 100644 ui/inputs/input_passkey_templ.go delete mode 100644 ui/menus/assets_dropdown.templ delete mode 100644 ui/menus/assets_dropdown_templ.go delete mode 100644 ui/meta.templ delete mode 100644 ui/views/register.templ diff --git a/.github/doppler-template.yaml b/.github/doppler-template.yaml new file mode 100644 index 0000000..831c60b --- /dev/null +++ b/.github/doppler-template.yaml @@ -0,0 +1,33 @@ +projects: + - name: motr + description: Your project description + environments: + - name: Development # Name may contain letters, spaces, numbers, hyphens, and underscores + slug: dev # Slug may contain letters, numbers, hyphens, and underscores + configs: + - slug: dev # First slug *must* match environment slug name + + - name: CICD + slug: ci + configs: + - slug: ci + + - name: Production + slug: prod + configs: + - slug: prod + + secrets: + dev: + ENV: development + + ci: + ENV: ci-cd + DOCKER_HUB_USERNAME: "" + DOCKER_HUB_TOKEN: "" + GITHUB_TOKEN: "" + CLOUDFLARE_API_TOKEN: "" + NPM_TOKEN: "" + + prod: + ENV: production diff --git a/.github/scopes.json b/.github/project-scopes.json similarity index 100% rename from .github/scopes.json rename to .github/project-scopes.json diff --git a/.github/setup_env.sh b/.github/setup_env.sh new file mode 100644 index 0000000..b4adec0 --- /dev/null +++ b/.github/setup_env.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +# Set up environment variables +export GOPATH=$HOME/go +export GOBIN=$GOPATH/bin +export PATH=$GOBIN:$PATH + +# Setup Motr specific environment variables +export ROOT_DIR=$(git rev-parse --show-toplevel) +export RADAR_ROOT=$ROOT_DIR/cmd/radar +export WORKER_ROOT=$ROOT_DIR/cmd/worker + +# Setup Build Outputs +export RADAR_OUT=$RADAR_ROOT/build/app.wasm +export WORKER_OUT=$WORKER_ROOT/build/app.wasm + +function go_tidy() { + cd $ROOT_DIR + go mod tidy + go mod download + go install github.com/syumai/workers/cmd/workers-assets-gen@latest +} + +function npm_install() { + cd $1 + npm install +} + +function wrangler_deploy() { + cd $1 + wrangler deploy +} + +function wrangler_dev() { + cd $1 + wrangler dev +} + +function check_deps() { + command -v go >/dev/null 2>&1 || { echo >&2 "go is required but not installed. Aborting."; exit 1; } + command -v npm >/dev/null 2>&1 || { echo >&2 "npm is required but not installed. Aborting."; exit 1; } + command -v npx >/dev/null 2>&1 || { echo >&2 "npx is required but not installed. Aborting."; exit 1; } + command -v task >/dev/null 2>&1 || { echo >&2 "task is required but not installed. Aborting."; exit 1; } + command -v wrangler >/dev/null 2>&1 || { echo >&2 "wrangler is required but not installed. Aborting."; exit 1; } +} + +function check_vars() { + if [ -z "$ROOT_DIR" ]; then + echo "ROOT_DIR is not set. Aborting." + exit 1 + fi + + if [ -z "$RADAR_ROOT" ]; then + echo "RADAR_ROOT is not set. Aborting." + exit 1 + fi + + if [ -z "$WORKER_ROOT" ]; then + echo "WORKER_ROOT is not set. Aborting." + exit 1 + fi + + if [ -z "$RADAR_OUT" ]; then + echo "RADAR_OUT is not set. Aborting." + exit 1 + fi + + if [ -z "$WORKER_OUT" ]; then + echo "WORKER_OUT is not set. Aborting." + exit 1 + fi +} + +function check_secrets() { + if [ -z "$DOCKER_HUB_USERNAME" ]; then + echo "DOCKER_HUB_USERNAME is not set. Aborting." + exit 1 + fi + + if [ -z "$DOCKER_HUB_TOKEN" ]; then + echo "DOCKER_HUB_TOKEN is not set. Aborting." + exit 1 + fi + + if [ -z "$GITHUB_TOKEN" ]; then + echo "GITHUB_TOKEN is not set. Aborting." + exit 1 + fi + + if [ -z "$CLOUDFLARE_API_TOKEN" ]; then + echo "CLOUDFLARE_API_TOKEN is not set. Aborting." + exit 1 + fi + + if [ -z "$NPM_TOKEN" ]; then + echo "NPM_TOKEN is not set. Aborting." + exit 1 + fi +} + +function publish_release() { + check_secrets + goreleaser check + goreleaser release --clean +} + diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5804717..109e2a9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -27,4 +27,4 @@ jobs: uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} - workingDirectory: cmd/vault + workingDirectory: cmd diff --git a/.gitignore b/.gitignore index 4b99b82..b7e80fb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ go.work go.work.sum !.taskfile.yml !.taskfile.dist.yml +build # Aider related generated files .aider-context diff --git a/CONVENTIONS.md b/CONVENTIONS.md deleted file mode 100644 index e19297b..0000000 --- a/CONVENTIONS.md +++ /dev/null @@ -1,23 +0,0 @@ -# MOTR Development Guide - -## Commands -- Build: `task build` - Compiles WASM with `GOOS=js GOARCH=wasm go build -o web/vault.wasm .` -- Generate: `task gen:templ` - Generate Go code from templ templates -- Generate: `task gen:sqlc` - Generate Go code from SQL queries -- Test: `task test` - Run all tests with `go test -v ./...` -- Run single test: `go test -v ./path/to/package -run TestName` -- Serve: `task serve` - Run development server with `bunx live-server` in web directory - -## Code Style -- **Imports**: Standard library first, external packages second, local packages last -- **Formatting**: Use gofmt -- **Types**: Prefer explicit types over interface{} -- **Naming**: Follow Go conventions (CamelCase for exported, camelCase for unexported) -- **Error Handling**: Always check errors and return them when appropriate -- **Domain Structure**: Keep domain logic in `/x` directory with handler.go, model/ and view/ subdirectories -- **Templates**: Use templ for HTML templating -- **Database**: Use sqlc for type-safe SQL queries -- **Middleware**: Place middleware in pkg/[service]/middleware.go - -## Architecture -MOTR follows a modular architecture with domain-driven design principles. WebAssembly is used for browser execution with progressive web app capabilities. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e6a265f --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +.PHONY: tidy templ sqlc worker radar + +all: help + +help: + @echo "Usage: make " + @echo "" + @echo "Commands:" + @echo " help Show this help message" + @echo " tidy Tidy up the project" + @echo " templ Generate templates" + @echo " sqlc Generate SQL schema" + @echo " worker Build and deploy worker" + @echo " radar Build and deploy radar" + +templ: + @devbox run gen:templ + +sqlc: + @devbox run gen:sqlc + +worker: + @devbox run serve:worker + +radar: + @devbox run serve:radar + +deploy: + @devbox run deploy + +release: + @devbox run release + +templ-watch: + @devbox run watch:templ diff --git a/README.md b/README.md index d182a54..44628f8 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,31 @@ Motr can be integrated into progressive web applications, providing: - Seamless blockchain account management - Cross-device synchronization +## Commands + +- Build: `task build` - Compiles WASM with `GOOS=js GOARCH=wasm go build -o web/vault.wasm .` +- Generate: `task gen:templ` - Generate Go code from templ templates +- Generate: `task gen:sqlc` - Generate Go code from SQL queries +- Test: `task test` - Run all tests with `go test -v ./...` +- Run single test: `go test -v ./path/to/package -run TestName` +- Serve: `task serve` - Run development server with `bunx live-server` in web directory + +## Code Style + +- **Imports**: Standard library first, external packages second, local packages last +- **Formatting**: Use gofmt +- **Types**: Prefer explicit types over interface{} +- **Naming**: Follow Go conventions (CamelCase for exported, camelCase for unexported) +- **Error Handling**: Always check errors and return them when appropriate +- **Domain Structure**: Keep domain logic in `/x` directory with handler.go, model/ and view/ subdirectories +- **Templates**: Use templ for HTML templating +- **Database**: Use sqlc for type-safe SQL queries +- **Middleware**: Place middleware in pkg/[service]/middleware.go + +## Architecture + +MOTR follows a modular architecture with domain-driven design principles. WebAssembly is used for browser execution with progressive web app capabilities. + ## Architecture Motr consists of several components: @@ -118,6 +143,7 @@ Motr consists of several components: ### Component Details 1. **Vault** + - Core component deployed as a Cloudflare Worker - Manages decentralized identity and authentication - Integrates with IPFS/Helia for decentralized storage @@ -125,11 +151,13 @@ Motr consists of several components: - Package located at `cmd/vault/` 2. **Controller** + - Manages user credentials and authentication - Integrates with WebAuthn for credential storage - Uses SQLite via D1 database for persistent storage 3. **Resolver** + - Resolves Sonr names to addresses and profiles - Serves as a gateway to the Sonr network - Implemented as a Cloudflare Worker diff --git a/Taskfile.yml b/Taskfile.yml deleted file mode 100644 index 17e27ad..0000000 --- a/Taskfile.yml +++ /dev/null @@ -1,124 +0,0 @@ -#yaml-language-server: $schema=https://json.schemastore.org/taskfile -version: "3" -silent: true -vars: - ROOT_DIR: - sh: git rev-parse --show-toplevel - -tasks: - clean: - desc: Remove build artifacts - cmds: - - task: tidy:vault - - task: tidy:front - - task: tidy:root - - serve: - desc: Serve the app with air - cmd: air - - deploy: - desc: Deploy all - cmds: - - task: deploy:vault - - task: deploy:front - - build: - desc: Build all - cmds: - - task: build:vault - - task: build:front - - start:vault: - desc: Start the vault - dir: "{{.ROOT_DIR}}/cmd/vault" - cmd: bun run start - - start:front: - desc: Start the frontend - dir: "{{.ROOT_DIR}}/cmd/front" - cmd: bun run start - - build:vault: - desc: Build the vault - dir: "{{.ROOT_DIR}}/cmd/vault" - cmd: bun run build - sources: - - main.go - generates: - - build/app.wasm - - build:front: - desc: Build the frontend - dir: "{{.ROOT_DIR}}/cmd/front" - cmd: bun run build - sources: - - main.go - generates: - - build/app.wasm - - deploy:vault: - desc: Deploy the vault - dir: "{{.ROOT_DIR}}/cmd/vault" - cmds: - - bun run deploy - - deploy:front: - desc: Deploy the frontend - dir: "{{.ROOT_DIR}}/cmd/front" - cmd: bun run deploy - - gen:templ: - desc: Generate templ - cmds: - - templ generate - - rm -rf .task - - gen:sqlc: - desc: Generate sqlc - cmd: sqlc generate - - db:migrate: - desc: Migrate the database - prompt: - - Are you sure you want to run this command? This will delete all data in the database. - cmds: - - task: migrate:d1 - - task: gen:sqlc - - migrate:d1: - internal: true - desc: Migrate the common database - dir: "{{.ROOT_DIR}}/cmd/vault" - cmd: npm run migrate - sources: - - schema.sql - generates: - - schema.sql - - - tidy:vault: - desc: Go mod tidy the vault - internal: true - dir: "{{.ROOT_DIR}}/cmd/vault" - cmds: - - bun run clean - - rm -rf ./build - - rm -rf ./dist - - tidy:front: - desc: Go mod tidy the frontend - internal: true - dir: "{{.ROOT_DIR}}/cmd/front" - cmds: - - bun run clean - - rm -rf ./build - - rm -rf ./dist - - tidy:root: - desc: Go mod tidy the root - internal: true - dir: "{{.ROOT_DIR}}" - cmds: - - go mod tidy - - rm -rf .task diff --git a/cmd/front/.gitignore b/cmd/front/.gitignore deleted file mode 100644 index 63d5b35..0000000 --- a/cmd/front/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -build -node_modules -.wrangler - -.dev.vars* diff --git a/cmd/front/main.go b/cmd/front/main.go deleted file mode 100644 index faddb7c..0000000 --- a/cmd/front/main.go +++ /dev/null @@ -1,25 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package main - -import ( - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/routes" - "github.com/sonr-io/motr/sink/config" -) - -func main() { - // Setup config - e, c := config.New() - - // Setup middleware - e.Use( - middleware.UseSession(c), - middleware.UseCloudflareCache(c), - ) - - // Setup routes - routes.SetupRoutes(e) - e.Serve() -} diff --git a/cmd/front/package-lock.json b/cmd/front/package-lock.json deleted file mode 100644 index 57dc892..0000000 --- a/cmd/front/package-lock.json +++ /dev/null @@ -1,1540 +0,0 @@ -{ - "name": "@sonr-io/motr-front", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@sonr-io/motr-front", - "version": "0.0.1", - "devDependencies": { - "wrangler": "^4.10.0" - } - }, - "node_modules/@cloudflare/kv-asset-handler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", - "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==", - "dev": true, - "license": "MIT OR Apache-2.0", - "dependencies": { - "mime": "^3.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@cloudflare/unenv-preset": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.3.1.tgz", - "integrity": "sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==", - "dev": true, - "license": "MIT OR Apache-2.0", - "peerDependencies": { - "unenv": "2.0.0-rc.15", - "workerd": "^1.20250320.0" - }, - "peerDependenciesMeta": { - "workerd": { - "optional": true - } - } - }, - "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250416.0.tgz", - "integrity": "sha512-aZgF8Swp9eVYxJPWOoZbAgAaYjWuYqGmEA+QJ2ecRGDBqm87rT4GEw7/mmLpxrpllny3VfEEhkk9iYCGv8nlFw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250416.0.tgz", - "integrity": "sha512-FhswG1QYRfaTZ4FAlUkfVWaoM2lrlqumiBTrhbo9czMJdGR/oBXS4SGynuI6zyhApHeBf3/fZpA/SBAe4cXdgg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250416.0.tgz", - "integrity": "sha512-G+nXEAJ/9y+A857XShwxKeRdfxok6UcjiQe6G+wQeCn/Ofkp/EWydacKdyeVU6QIm1oHS78DwJ7AzbCYywf9aw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250416.0.tgz", - "integrity": "sha512-U6oVW0d9w1fpnDYNrjPJ9SFkDlGJWJWbXHlTBObXl6vccP16WewvuxyHkKqyUhUc8hyBaph7sxeKzKmuCFQ4SA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250416.0.tgz", - "integrity": "sha512-YAjjTzL1z9YYeN4sqYfj1dtQXd2Bblj+B+hl4Rz2aOhblpZEZAdhapZlOCRvLLkOJshKJUnRD3mDlytAdgwybQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", - "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", - "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", - "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", - "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "darwin" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", - "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", - "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", - "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", - "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", - "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", - "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "LGPL-3.0-or-later", - "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", - "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.0.5" - } - }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", - "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", - "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.0.4" - } - }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", - "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", - "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" - } - }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", - "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.0.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", - "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.2.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", - "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", - "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "dev": true, - "license": "MIT", - "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, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/as-table": { - "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "printable-characters": "^1.0.42" - } - }, - "node_modules/blake3-wasm": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true, - "license": "MIT" - }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true, - "license": "MIT" - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" - } - }, - "node_modules/exit-hook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/exsolve": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", - "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", - "dev": true, - "license": "MIT" - }, - "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, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-source": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", - "dev": true, - "license": "Unlicense", - "dependencies": { - "data-uri-to-buffer": "^2.0.0", - "source-map": "^0.6.1" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/miniflare": { - "version": "4.20250416.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250416.0.tgz", - "integrity": "sha512-261PhPgD9zs5/BTdbWqwiaXtWxb+Av5zKCwTU+HXrA5E4tf3qnULwh3u6SVUOAEArEroFuKJzawsQ9COtNBurQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "0.8.1", - "acorn": "8.14.0", - "acorn-walk": "8.3.2", - "exit-hook": "2.2.1", - "glob-to-regexp": "0.4.1", - "stoppable": "1.1.0", - "undici": "^5.28.5", - "workerd": "1.20250416.0", - "ws": "8.18.0", - "youch": "3.3.4", - "zod": "3.22.3" - }, - "bin": { - "miniflare": "bootstrap.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/mustache": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, - "license": "MIT", - "bin": { - "mustache": "bin/mustache" - } - }, - "node_modules/ohash": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", - "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/printable-characters": { - "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp": { - "version": "0.33.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", - "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.3", - "semver": "^7.6.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.33.5", - "@img/sharp-darwin-x64": "0.33.5", - "@img/sharp-libvips-darwin-arm64": "1.0.4", - "@img/sharp-libvips-darwin-x64": "1.0.4", - "@img/sharp-libvips-linux-arm": "1.0.5", - "@img/sharp-libvips-linux-arm64": "1.0.4", - "@img/sharp-libvips-linux-s390x": "1.0.4", - "@img/sharp-libvips-linux-x64": "1.0.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", - "@img/sharp-libvips-linuxmusl-x64": "1.0.4", - "@img/sharp-linux-arm": "0.33.5", - "@img/sharp-linux-arm64": "0.33.5", - "@img/sharp-linux-s390x": "0.33.5", - "@img/sharp-linux-x64": "0.33.5", - "@img/sharp-linuxmusl-arm64": "0.33.5", - "@img/sharp-linuxmusl-x64": "0.33.5", - "@img/sharp-wasm32": "0.33.5", - "@img/sharp-win32-ia32": "0.33.5", - "@img/sharp-win32-x64": "0.33.5" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stacktracey": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", - "dev": true, - "license": "Unlicense", - "dependencies": { - "as-table": "^1.0.36", - "get-source": "^2.0.12" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD", - "optional": true - }, - "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici": { - "version": "5.29.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", - "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/unenv": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.15.tgz", - "integrity": "sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "defu": "^6.1.4", - "exsolve": "^1.0.4", - "ohash": "^2.0.11", - "pathe": "^2.0.3", - "ufo": "^1.5.4" - } - }, - "node_modules/workerd": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250416.0.tgz", - "integrity": "sha512-Yrx/bZAKbmSvomdTAzzIpOHwpYhs0ldr2wqed22UEhQ0mIplAHY4xmY+SjAJhP/TydZrciOVzBxwM1+4T40KNA==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "bin": { - "workerd": "bin/workerd" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20250416.0", - "@cloudflare/workerd-darwin-arm64": "1.20250416.0", - "@cloudflare/workerd-linux-64": "1.20250416.0", - "@cloudflare/workerd-linux-arm64": "1.20250416.0", - "@cloudflare/workerd-windows-64": "1.20250416.0" - } - }, - "node_modules/wrangler": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.12.0.tgz", - "integrity": "sha512-4rfAXOi5KqM3ECvOrZJ97k3zEqxVwtdt4bijd8jcRBZ6iJYvEtjgjVi4TsfkVa/eXGhpfHTUnKu2uk8UHa8M2w==", - "dev": true, - "license": "MIT OR Apache-2.0", - "dependencies": { - "@cloudflare/kv-asset-handler": "0.4.0", - "@cloudflare/unenv-preset": "2.3.1", - "blake3-wasm": "2.1.5", - "esbuild": "0.25.2", - "miniflare": "4.20250416.0", - "path-to-regexp": "6.3.0", - "unenv": "2.0.0-rc.15", - "workerd": "1.20250416.0" - }, - "bin": { - "wrangler": "bin/wrangler.js", - "wrangler2": "bin/wrangler.js" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2", - "sharp": "^0.33.5" - }, - "peerDependencies": { - "@cloudflare/workers-types": "^4.20250415.0" - }, - "peerDependenciesMeta": { - "@cloudflare/workers-types": { - "optional": true - } - } - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "license": "MIT", - "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/youch": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.4.tgz", - "integrity": "sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cookie": "^0.7.1", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" - } - }, - "node_modules/zod": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", - "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} diff --git a/cmd/front/package.json b/cmd/front/package.json deleted file mode 100644 index 3b78929..0000000 --- a/cmd/front/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "name": "@sonr-io/motr-front", - "version": "0.0.1", - "private": true, - "scripts": { - "build": "npm run clean && npm run assets && npm run wasm", - "assets": "go run github.com/syumai/workers/cmd/workers-assets-gen -mode=go", - "wasm": "GOOS=js GOARCH=wasm go build -o ./build/app.wasm .", - "deploy": "wrangler deploy", - "start": "wrangler dev", - "clean": "rm -rf ./build && rm -rf .wrangler && rm -rf ./dist && rm -rf ./node_modules && npm install" - }, - "devDependencies": { - "wrangler": "^4.10.0" - } -} diff --git a/cmd/radar/main.go b/cmd/radar/main.go new file mode 100644 index 0000000..a4c5330 --- /dev/null +++ b/cmd/radar/main.go @@ -0,0 +1,22 @@ +//go:build js && wasm +// +build js,wasm + +package main + +import ( + "github.com/labstack/echo/v4" + "github.com/sonr-io/motr/pkg/database" + "github.com/sonr-io/motr/pkg/session" + "github.com/sonr-io/motr/routes" + "github.com/syumai/workers" + _ "github.com/syumai/workers/cloudflare/d1" +) + +func main() { + e := echo.New() + e.Use(session.Middleware(), database.Middleware()) + + routes.SetupViews(e) + routes.SetupPartials(e) + workers.Serve(e) +} diff --git a/cmd/vault/package-lock.json b/cmd/radar/package-lock.json similarity index 87% rename from cmd/vault/package-lock.json rename to cmd/radar/package-lock.json index 1d42d15..bebe2c3 100644 --- a/cmd/vault/package-lock.json +++ b/cmd/radar/package-lock.json @@ -1,11 +1,11 @@ { - "name": "@sonr-io/motr-vault", + "name": "@sonr-io/radar-worker", "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@sonr-io/motr-vault", + "name": "@sonr-io/radar-worker", "version": "0.0.1", "dependencies": { "@extism/extism": "^2.0.0-rc11", @@ -18,6 +18,7 @@ "sonr-cosmes": "^0.0.5" }, "devDependencies": { + "concurrently": "^9.1.2", "wrangler": "^4.10.0" } }, @@ -38,36 +39,36 @@ } }, "node_modules/@achingbrain/nat-port-mapper/node_modules/@libp2p/interface": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.9.0.tgz", - "integrity": "sha512-L/0Z5H0mjaECA0jkZG+OJmEhB/OIJ07gzZYljU7C19XjL3dSkBvhA9il+G3FpHyHgqAOVGuQU5qkbv2Edj8FIA==", + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.2.tgz", + "integrity": "sha512-aQ9jZaZZq9/y9NFax0K8Z6tTqLg3Qsyv1EY0O+eFrltmIkoUOCeCAybUTiOTwieknznHc9AMrHifaK3BYb+bqg==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@multiformats/multiaddr": "^12.3.3", + "@multiformats/multiaddr": "^12.4.0", "it-pushable": "^3.2.3", "it-stream-types": "^2.0.2", - "multiformats": "^13.3.1", + "multiformats": "^13.3.4", "progress-events": "^1.0.1", "uint8arraylist": "^2.4.8" } }, "node_modules/@achingbrain/nat-port-mapper/node_modules/@libp2p/logger": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.15.tgz", - "integrity": "sha512-0+rOHEXXDNZvsb9p04jVAFQB0WcvMxFfqzSe271/tg4yVlPF5H99l5BwOqeb+EYhHV1lTk+zrJdPK9easHr1fQ==", + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.18.tgz", + "integrity": "sha512-venbhUr6riuMTu8c8bnphZ27XcOuDDq6fdYaRVggokQpwSC6QRejlaFnY8w0K1ZuwFv9uc19UA2ELtOBQ26AJw==", "license": "Apache-2.0 OR MIT", "dependencies": { - "@libp2p/interface": "^2.9.0", - "@multiformats/multiaddr": "^12.3.3", + "@libp2p/interface": "^2.10.2", + "@multiformats/multiaddr": "^12.4.0", "interface-datastore": "^8.3.1", - "multiformats": "^13.3.1", + "multiformats": "^13.3.4", "weald": "^1.0.4" } }, "node_modules/@achingbrain/nat-port-mapper/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@achingbrain/ssdp": { @@ -171,6 +172,15 @@ "npm": ">=7.0.0" } }, + "node_modules/@chainsafe/libp2p-noise/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==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@chainsafe/libp2p-yamux": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-5.0.4.tgz", @@ -209,14 +219,14 @@ } }, "node_modules/@cloudflare/unenv-preset": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.3.1.tgz", - "integrity": "sha512-Xq57Qd+ADpt6hibcVBO0uLG9zzRgyRhfCUgBT9s+g3+3Ivg5zDyVgLFy40ES1VdNcu8rPNSivm9A+kGP5IVaPg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.3.2.tgz", + "integrity": "sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg==", "dev": true, "license": "MIT OR Apache-2.0", "peerDependencies": { - "unenv": "2.0.0-rc.15", - "workerd": "^1.20250320.0" + "unenv": "2.0.0-rc.17", + "workerd": "^1.20250508.0" }, "peerDependenciesMeta": { "workerd": { @@ -225,9 +235,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250416.0.tgz", - "integrity": "sha512-aZgF8Swp9eVYxJPWOoZbAgAaYjWuYqGmEA+QJ2ecRGDBqm87rT4GEw7/mmLpxrpllny3VfEEhkk9iYCGv8nlFw==", + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250523.0.tgz", + "integrity": "sha512-/K7vKkPDx9idJ7hJtqYXYsKkHX9XQ6awyDyBZ4RwbaQ/o3fyS/tgHaej2rUO6zkb7CfUxiaeAB7Z6i7KltMY5Q==", "cpu": [ "x64" ], @@ -242,9 +252,9 @@ } }, "node_modules/@cloudflare/workerd-darwin-arm64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250416.0.tgz", - "integrity": "sha512-FhswG1QYRfaTZ4FAlUkfVWaoM2lrlqumiBTrhbo9czMJdGR/oBXS4SGynuI6zyhApHeBf3/fZpA/SBAe4cXdgg==", + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250523.0.tgz", + "integrity": "sha512-tVQqStt245KzkrCT6DBXoMNHaJgh/8hQy3fsG+4gHfqw/JdKEgXigkc9hWdC6BoS5DiGK+dGVJo2MnWHFC7XlQ==", "cpu": [ "arm64" ], @@ -259,9 +269,9 @@ } }, "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250416.0.tgz", - "integrity": "sha512-G+nXEAJ/9y+A857XShwxKeRdfxok6UcjiQe6G+wQeCn/Ofkp/EWydacKdyeVU6QIm1oHS78DwJ7AzbCYywf9aw==", + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250523.0.tgz", + "integrity": "sha512-PCPWBlwiKr9Es2TP93JVygXRPwx+AkygUMV2gFOPerVrdXUd13A4dJ68Qjpmh3O0xqmVIRV6PSogM3wNvwnw5Q==", "cpu": [ "x64" ], @@ -276,9 +286,9 @@ } }, "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250416.0.tgz", - "integrity": "sha512-U6oVW0d9w1fpnDYNrjPJ9SFkDlGJWJWbXHlTBObXl6vccP16WewvuxyHkKqyUhUc8hyBaph7sxeKzKmuCFQ4SA==", + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250523.0.tgz", + "integrity": "sha512-uKa/L9W1AzT+yE0wNxFZPlMXms5xmGaaOmTAK0wuLPW6qmKj1zyBidjHqQXVZ+eK/fLy3CNeyB9EBtR0/8FH7A==", "cpu": [ "arm64" ], @@ -293,9 +303,9 @@ } }, "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250416.0.tgz", - "integrity": "sha512-YAjjTzL1z9YYeN4sqYfj1dtQXd2Bblj+B+hl4Rz2aOhblpZEZAdhapZlOCRvLLkOJshKJUnRD3mDlytAdgwybQ==", + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250523.0.tgz", + "integrity": "sha512-H5ggClWrskRs7pj2Fd+iJpjFMrh7DZqAfhJT3IloTW85lCEY2+y/yfXEGyDsc0UTLuTS0znldcUrVCRjSiSOkw==", "cpu": [ "x64" ], @@ -333,10 +343,18 @@ "tslib": "^2.4.0" } }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", "cpu": [ "ppc64" ], @@ -351,9 +369,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", "cpu": [ "arm" ], @@ -368,9 +386,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", "cpu": [ "arm64" ], @@ -385,9 +403,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", "cpu": [ "x64" ], @@ -402,9 +420,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", "cpu": [ "arm64" ], @@ -419,9 +437,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", "cpu": [ "x64" ], @@ -436,9 +454,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", "cpu": [ "arm64" ], @@ -453,9 +471,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", "cpu": [ "x64" ], @@ -470,9 +488,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", "cpu": [ "arm" ], @@ -487,9 +505,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", "cpu": [ "arm64" ], @@ -504,9 +522,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", "cpu": [ "ia32" ], @@ -521,9 +539,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", "cpu": [ "loong64" ], @@ -538,9 +556,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", "cpu": [ "mips64el" ], @@ -555,9 +573,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", "cpu": [ "ppc64" ], @@ -572,9 +590,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", "cpu": [ "riscv64" ], @@ -589,9 +607,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", "cpu": [ "s390x" ], @@ -606,9 +624,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", "cpu": [ "x64" ], @@ -623,9 +641,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", "cpu": [ "arm64" ], @@ -640,9 +658,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", "cpu": [ "x64" ], @@ -657,9 +675,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", "cpu": [ "arm64" ], @@ -674,9 +692,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", "cpu": [ "x64" ], @@ -691,9 +709,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", "cpu": [ "x64" ], @@ -708,9 +726,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", "cpu": [ "arm64" ], @@ -725,9 +743,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", "cpu": [ "ia32" ], @@ -742,9 +760,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", "cpu": [ "x64" ], @@ -759,9 +777,9 @@ } }, "node_modules/@extism/extism": { - "version": "2.0.0-rc11", - "resolved": "https://registry.npmjs.org/@extism/extism/-/extism-2.0.0-rc11.tgz", - "integrity": "sha512-+vjXOjQbCLpIAkMZjqkDIT4WUp2FA0mglj3a4nBpCp/gjDngiFqG6TmXP0esOubktY2EUklFiPCeaDr/sQXzKA==", + "version": "2.0.0-rc13", + "resolved": "https://registry.npmjs.org/@extism/extism/-/extism-2.0.0-rc13.tgz", + "integrity": "sha512-iQ3mrPKOC0WMZ94fuJrKbJmMyz4LQ9Abf8gd4F5ShxKWa+cRKcVzk0EqRQsp5xXsQ2dO3zJTiA6eTc4Ihf7k+A==", "license": "BSD-3-Clause" }, "node_modules/@fastify/busboy": { @@ -1300,9 +1318,9 @@ } }, "node_modules/@ipld/dag-cbor": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.2.tgz", - "integrity": "sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw==", + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.4.tgz", + "integrity": "sha512-GbDWYl2fdJgkYtIJN0HY9oO0o50d1nB4EQb7uYWKUd2ztxCjxiEW3PjwGG0nqUpN1G4Cug6LX8NzbA7fKT+zfA==", "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^4.0.0", @@ -1314,15 +1332,15 @@ } }, "node_modules/@ipld/dag-cbor/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@ipld/dag-json": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.3.tgz", - "integrity": "sha512-itacv1j1hvYgLox2B42Msn70QLzcr0MEo5yGIENuw2SM/lQzq9bmBiMky+kDsIrsqqblKTXcHBZnnmK7D4a6ZQ==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.5.tgz", + "integrity": "sha512-Q4Fr3IBDEN8gkpgNefynJ4U/ZO5Kwr7WSUMBDbZx0c37t0+IwQCTM9yJh8l5L4SRFjm31MuHwniZ/kM+P7GQ3Q==", "license": "Apache-2.0 OR MIT", "dependencies": { "cborg": "^4.0.0", @@ -1334,15 +1352,15 @@ } }, "node_modules/@ipld/dag-json/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@ipld/dag-pb": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.3.tgz", - "integrity": "sha512-ueULCaaSCcD+dQga6nKiRr+RSeVgdiYiEPKVUu5iQMNYDN+9osd0KpR3UDd9uQQ+6RWuv9L34SchfEwj7YIbOA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.5.tgz", + "integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==", "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.1.0" @@ -1353,9 +1371,9 @@ } }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@jridgewell/resolve-uri": { @@ -1829,6 +1847,27 @@ "ws": "^8.12.1" } }, + "node_modules/@libp2p/websockets/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "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/@libp2p/webtransport": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/@libp2p/webtransport/-/webtransport-3.1.10.tgz", @@ -1869,9 +1908,9 @@ } }, "node_modules/@multiformats/dns/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@multiformats/dns/node_modules/uint8arrays": { @@ -1907,9 +1946,9 @@ } }, "node_modules/@multiformats/multiaddr-matcher": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.7.0.tgz", - "integrity": "sha512-WfobrJy7XLaYL7PQ3IcFoXdGN5jmdv5FsuKQkZIIreC1pSR4Q9PSOWu2ULxP/M2JT738Xny0PFoCke0ENbyfww==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.7.2.tgz", + "integrity": "sha512-BJzHOBAAxGZKw+FY/MzeIKGKERAW/1XOrpj61wgzZVvR/iksyGTQhliyTgmuakpBJPSsCxlrk3eLemVhZuJIFQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "@chainsafe/is-ip": "^2.0.1", @@ -1918,9 +1957,9 @@ } }, "node_modules/@multiformats/multiaddr-matcher/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@multiformats/multiaddr-to-uri": { @@ -1933,9 +1972,9 @@ } }, "node_modules/@multiformats/multiaddr/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/@multiformats/multiaddr/node_modules/uint8arrays": { @@ -1962,27 +2001,31 @@ } }, "node_modules/@multiformats/murmur3/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "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==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.0.tgz", + "integrity": "sha512-YGdEUzYEd+82jeaVbSKKVp1jFZb8LwaNMIIzHFkihGvYdd/KKAr7KaJHdEdSYGredE3ssSravXIa0Jxg28Sv5w==", "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/curves": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.2.tgz", - "integrity": "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.7.2" + "@noble/hashes": "1.8.0" }, "engines": { "node": "^14.21.3 || >=16" @@ -1992,9 +2035,9 @@ } }, "node_modules/@noble/hashes": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.2.tgz", - "integrity": "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", "license": "MIT", "engines": { "node": "^14.21.3 || >=16" @@ -2078,9 +2121,9 @@ "license": "BSD-3-Clause" }, "node_modules/@scure/base": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.4.tgz", - "integrity": "sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", + "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", "license": "MIT", "peer": true, "funding": { @@ -2088,29 +2131,29 @@ } }, "node_modules/@scure/bip32": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.6.2.tgz", - "integrity": "sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", "license": "MIT", "peer": true, "dependencies": { - "@noble/curves": "~1.8.1", - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.2" + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@scure/bip39": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.5.4.tgz", - "integrity": "sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", "license": "MIT", "peer": true, "dependencies": { - "@noble/hashes": "~1.7.1", - "@scure/base": "~1.2.4" + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -2294,9 +2337,9 @@ } }, "node_modules/@types/node": { - "version": "22.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz", - "integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==", + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -2381,13 +2424,6 @@ "license": "(Apache-2.0 AND MIT)", "peer": true }, - "node_modules/@walletconnect/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/core/node_modules/uint8arrays": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", @@ -2413,19 +2449,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/crypto/node_modules/@noble/ciphers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.0.tgz", - "integrity": "sha512-YGdEUzYEd+82jeaVbSKKVp1jFZb8LwaNMIIzHFkihGvYdd/KKAr7KaJHdEdSYGredE3ssSravXIa0Jxg28Sv5w==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, "node_modules/@walletconnect/crypto/node_modules/@noble/hashes": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", @@ -2439,13 +2462,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@walletconnect/crypto/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/encoding": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@walletconnect/encoding/-/encoding-1.0.2.tgz", @@ -2458,13 +2474,6 @@ "typedarray-to-buffer": "3.1.5" } }, - "node_modules/@walletconnect/encoding/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/environment": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz", @@ -2475,13 +2484,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/environment/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/events": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", @@ -2493,13 +2495,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/events/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/heartbeat": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz", @@ -2512,13 +2507,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/heartbeat/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/jsonrpc-provider": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz", @@ -2531,13 +2519,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/jsonrpc-provider/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/jsonrpc-types": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", @@ -2561,13 +2542,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/jsonrpc-utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/jsonrpc-ws-connection": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz", @@ -2581,28 +2555,6 @@ "ws": "^7.5.1" } }, - "node_modules/@walletconnect/jsonrpc-ws-connection/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "peer": true, - "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/@walletconnect/keyvaluestorage": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", @@ -2706,13 +2658,6 @@ "url": "https://paulmillr.com/funding/" } }, - "node_modules/@walletconnect/randombytes/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/relay-api": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz", @@ -2793,13 +2738,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/safe-json/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/sign-client": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.8.6.tgz", @@ -2829,13 +2767,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/time/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/types": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.8.6.tgz", @@ -2862,13 +2793,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/types/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/utils": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.8.6.tgz", @@ -2938,13 +2862,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/window-getters/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/@walletconnect/window-metadata": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", @@ -2956,13 +2873,6 @@ "tslib": "1.14.1" } }, - "node_modules/@walletconnect/window-metadata/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD", - "peer": true - }, "node_modules/abort-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz", @@ -3002,6 +2912,32 @@ "node": ">=0.4.0" } }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/any-signal": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", @@ -3145,9 +3081,9 @@ } }, "node_modules/blockstore-core/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/brace-expansion": { @@ -3160,9 +3096,9 @@ } }, "node_modules/browser-readablestream-to-it": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.8.tgz", - "integrity": "sha512-+aDq+8QoTxIklc9m21oVg96Bm18EpeVke4/8vWPNu+9Ktd+G4PYavitE4gv/pjIndw1q+vxE/Rcnv1zYHrEQbQ==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.9.tgz", + "integrity": "sha512-f/yOqsXAC1tTJuq4vK1JSGLDTlK08XxTAAzoM5ePJhddySkI1yh/VjNoo0LACxwy+M1PV1xvD1OBJdToZ877ew==", "license": "Apache-2.0 OR MIT" }, "node_modules/buffer": { @@ -3190,14 +3126,44 @@ } }, "node_modules/cborg": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.2.10.tgz", - "integrity": "sha512-ZVA0xrVn8uBfDJYgfKKZzB/93z/Uiz7YtRdBPsZi/gyHNyqFdHMLHURVEk9dejOHepaX0zhcMyNva2/vF972SA==", + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.2.11.tgz", + "integrity": "sha512-7gs3iaqtsD9OHowgqzc6ixQGwSBONqosVR2co0Bg0pARgrLap+LCcEIXJuuIz2jHy0WWQeDMFPEsU2r17I2XPQ==", "license": "Apache-2.0", "bin": { "cborg": "lib/bin.js" } }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", @@ -3220,13 +3186,27 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -3241,7 +3221,6 @@ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3254,8 +3233,7 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", @@ -3263,12 +3241,53 @@ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, + "node_modules/concurrently": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz", + "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -3301,9 +3320,9 @@ } }, "node_modules/crossws": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.4.tgz", - "integrity": "sha512-uj0O1ETYX1Bh6uSgktfPvwDiPYGQ3aI4qVsaC/LWpkIzGj1nUYm5FK3K+t11oOlpN01lGbprFCH4wBlKdJjVgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", "license": "MIT", "peer": true, "dependencies": { @@ -3365,15 +3384,15 @@ } }, "node_modules/datastore-core/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -3474,9 +3493,9 @@ "license": "MIT" }, "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", "license": "Apache-2.0", "engines": { "node": ">=8" @@ -3507,6 +3526,13 @@ "stream-shift": "^1.0.2" } }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3523,9 +3549,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3536,31 +3562,41 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/event-iterator": { @@ -3687,6 +3723,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-iterator": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz", @@ -3730,20 +3776,20 @@ "license": "BSD-2-Clause" }, "node_modules/h3": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.1.tgz", - "integrity": "sha512-+ORaOBttdUm1E2Uu/obAyCguiI7MbBvsLTndc3gyK3zU+SYLoZXlyCP9Xgy0gikkGufFLTZXCXD6+4BsufnmHA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", + "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", "license": "MIT", "peer": true, "dependencies": { "cookie-es": "^1.2.2", - "crossws": "^0.3.3", + "crossws": "^0.3.4", "defu": "^6.1.4", - "destr": "^2.0.3", + "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.0", "radix3": "^1.1.2", - "ufo": "^1.5.4", + "ufo": "^1.6.1", "uncrypto": "^0.1.3" } }, @@ -3758,9 +3804,9 @@ } }, "node_modules/hamt-sharding/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/hamt-sharding/node_modules/uint8arrays": { @@ -3772,6 +3818,16 @@ "multiformats": "^13.0.0" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/hashlru": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", @@ -3862,9 +3918,9 @@ } }, "node_modules/idb-keyval": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.1.tgz", - "integrity": "sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", "license": "Apache-2.0", "peer": true }, @@ -3901,31 +3957,31 @@ "license": "ISC" }, "node_modules/interface-blockstore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.3.1.tgz", - "integrity": "sha512-nhgrQnz6yUQEqxTFLhlOBurQOy5lWlwCpgFmZ3GTObTVTQS9RZjK/JTozY6ty9uz2lZs7VFJSqwjWAltorJ4Vw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.3.2.tgz", + "integrity": "sha512-oA9Pjkxun/JHAsZrYEyKX+EoPjLciTzidE7wipLc/3YoHDjzsnXRJzAzFJXNUvogtY4g7hIwxArx8+WKJs2RIg==", "license": "Apache-2.0 OR MIT", "dependencies": { "interface-store": "^6.0.0", - "multiformats": "^13.2.3" + "multiformats": "^13.3.6" } }, "node_modules/interface-blockstore/node_modules/interface-store": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.2.tgz", - "integrity": "sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", "license": "Apache-2.0 OR MIT" }, "node_modules/interface-blockstore/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/interface-datastore": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.1.tgz", - "integrity": "sha512-3r0ETmHIi6HmvM5sc09QQiCD3gUfwtEM/AAChOyAd/UAKT69uk8LXfTSUBufbUIO/dU65Vj8nb9O6QjwW8vDSQ==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.2.tgz", + "integrity": "sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA==", "license": "Apache-2.0 OR MIT", "dependencies": { "interface-store": "^6.0.0", @@ -3933,15 +3989,15 @@ } }, "node_modules/interface-datastore/node_modules/interface-store": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.2.tgz", - "integrity": "sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", "license": "Apache-2.0 OR MIT" }, "node_modules/interface-datastore/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/interface-datastore/node_modules/uint8arrays": { @@ -4046,9 +4102,9 @@ } }, "node_modules/ipfs-unixfs-exporter/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/ipfs-unixfs-importer": { @@ -4075,15 +4131,15 @@ } }, "node_modules/ipfs-unixfs-importer/node_modules/interface-store": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.2.tgz", - "integrity": "sha512-KSFCXtBlNoG0hzwNa0RmhHtrdhzexp+S+UY2s0rWTBJyfdEIgn6i6Zl9otVqrcFYbYrneBT7hbmHQ8gE0C3umA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", "license": "Apache-2.0 OR MIT" }, "node_modules/ipfs-unixfs-importer/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/ipfs-unixfs-importer/node_modules/uint8arrays": { @@ -4125,9 +4181,9 @@ } }, "node_modules/ipns/node_modules/uint8arrays/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/iron-webcrypto": { @@ -4145,8 +4201,7 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/is-electron": { "version": "2.2.2", @@ -4154,6 +4209,16 @@ "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", "license": "MIT" }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-loopback-addr": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", @@ -4207,21 +4272,21 @@ "license": "ISC" }, "node_modules/it-all": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.7.tgz", - "integrity": "sha512-PkuYtu6XhJzuPTKXImd6y0qE6H91MUPV/b9xotXMAI6GjmD2v3NoHj2g5L0lS2qZ0EzyGWZU1kp0UxW8POvNBQ==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.8.tgz", + "integrity": "sha512-TFAXqUjwuPFhyktbU7XIOjdvqjpc/c2xvDYfCrfHA6HP68+EQDCXuwGJ9YchvZTyXSaB2fkX3lI9aybcFUHWUw==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-batch": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.7.tgz", - "integrity": "sha512-tcAW8+OAnhC3WqO5ggInfndL/jJsL3i++JLBADKs7LSSzfVVOXicufAuY5Sv4RbCkulRuk/ClSZhS0fu9B9SJA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.8.tgz", + "integrity": "sha512-sZPc1Wwtht3hzUcoPMTr5ByxPJ+y7ok3kAduxTslSnilGsR02aTNMc/wUrZlRHxyx6oWnjTrv1ASpSszguPumQ==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-batched-bytes": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/it-batched-bytes/-/it-batched-bytes-2.0.8.tgz", - "integrity": "sha512-xqIaXYhcj/O64W99hU446n1aBvHAQYEqdcMxFOdUH7X7C7Rf6J2NlsfU+mJ/d170qPvS3rWfm5ed5UcTi7j5pg==", + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/it-batched-bytes/-/it-batched-bytes-2.0.9.tgz", + "integrity": "sha512-JMemcPthyk3TVe3wjiay+9UJNSc2smIqONj9i59HEYz57UbGNj5HVSM9kscd91vf6b5MkSBrIwr6x32PHHZCOg==", "license": "Apache-2.0 OR MIT", "dependencies": { "p-defer": "^4.0.1", @@ -4240,30 +4305,30 @@ } }, "node_modules/it-drain": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.8.tgz", - "integrity": "sha512-eeOz+WwKc11ou1UuqZympcXPLCjpTn5ALcYFJiHeTEiYEZ2py/J1vq41XWYj88huCUiqp9iNHfObOKrbIk5Izw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.9.tgz", + "integrity": "sha512-HKy+UVYAqSFm+naEkNg14BwKymjHK0SxYLi8H5nACTIgbemDMZ4SNa2omzMUuk2Nu3jhaHMoqUJfZ0aBcdn4oA==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-filter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.2.tgz", - "integrity": "sha512-2AozaGjIvBBiB7t7MpVNug9kwofqmKSpvgW7zhuyvCs6xxDd6FrfvqyfYtlQTKLNP+Io1WeXko1UQhdlK4M0gg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.3.tgz", + "integrity": "sha512-jicHnWmWdRj9NpznADvidoc/9Vlte/Bv+bg/Amf/Zc3U8iovSQMPB0aZSqOSjXGe5KXQuau5poocOFyyiP+RTg==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-first": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.7.tgz", - "integrity": "sha512-e2dVSlOP+pAxPYPVJBF4fX7au8cvGfvLhIrGCMc5aWDnCvwgOo94xHbi3Da6eXQ2jPL5FGEM8sJMn5uE8Seu+g==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.8.tgz", + "integrity": "sha512-neaRRwOMCmMKkXJVZ4bvUDVlde+Xh0aTWr7hFaOZeDXzbctGVV/WHmPVqBqy3RjlsP7eRM0vcqNtlM8hivcmGw==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-foreach": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.2.tgz", - "integrity": "sha512-PvXs3v1FaeWDhWzRxnwB4vSKJngxdLgi0PddkfurCvIFBmKTBfWONLeyDk5dxrvtCzdE4y96KzEQynk4/bbI5A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.3.tgz", + "integrity": "sha512-QfrD0Sjv0Uy664huiZevAgY1UEsJ1GlmPpjwy38vjSi4rCmdGkO7ef/KKG86ZXd9j+j1bXXGnfDLjCs7lU8A0A==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" @@ -4296,15 +4361,15 @@ } }, "node_modules/it-last": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.7.tgz", - "integrity": "sha512-qG4BTveE6Wzsz5voqaOtZAfZgXTJT+yiaj45vp5S0Vi8oOdgKlRqUeolfvWoMCJ9vwSc/z9pAaNYIza7gA851w==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.8.tgz", + "integrity": "sha512-sdzoMeMAIJmRucZTnRd1GTtcoGV2EAS81fXfRKCVLviEX1wcvHhE43G0b/aKFFPc6ypuHWZR8vxaoHtDz/6b/A==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-length": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.7.tgz", - "integrity": "sha512-URrszwrzPrUn6PtsSFcixG4NwHydaARmPubO0UUnFH+NSNylBaGtair1fnxX7Zf2qVJQltPBVs3PZvcmFPTLXA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.8.tgz", + "integrity": "sha512-CkmQq8/EVUa0ATASKdKfKEMLfmqegGvMjZSRgQtbK4g1VkuRW0lLYC/snMjze7/o3ydSIVO7KHV5rjm1jnP9FA==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-length-prefixed": { @@ -4337,9 +4402,9 @@ } }, "node_modules/it-length-prefixed/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-length-prefixed/node_modules/uint8arrays": { @@ -4352,27 +4417,27 @@ } }, "node_modules/it-map": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.2.tgz", - "integrity": "sha512-G3dzFUjTYHKumJJ8wa9dSDS3yKm8L7qDUnAgzemOD0UMztwm54Qc2v97SuUCiAgbOz/aibkSLImfoFK09RlSFQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.3.tgz", + "integrity": "sha512-BAdTuPN/Ie5K4pKLShqyLGBvkLSPtraYXBrX8h+Ki1CZQI8o0dOcaLewISLTXmEJsOHcAjkwxJsVwxND4/Rkpg==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-peekable": "^3.0.0" } }, "node_modules/it-merge": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.9.tgz", - "integrity": "sha512-TjY4WTiwe4ONmaKScNvHDAJj6Tw0UeQFp4JrtC/3Mq7DTyhytes7mnv5OpZV4gItpZcs0AgRntpT2vAy2cnXUw==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.11.tgz", + "integrity": "sha512-7Kzf/XN1jFlhXRfeDoHeBlgmMv/zOv+ji2LXEN6hsIlW2S/8PRjw+4s4dZbtFd+u5Pk7li+2Hd+a/NHwsqT0iQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-queueless-pushable": "^2.0.0" } }, "node_modules/it-merge/node_modules/it-queueless-pushable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.0.tgz", - "integrity": "sha512-MlNnefWT/ntv5fesrHpxwVIu6ZdtlkN0A4aaJiE5wnmPMBv9ttiwX3UEMf78dFwIj5ZNaU9usYXg4swMEpUNJQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.1.tgz", + "integrity": "sha512-ZFX4ZHpzPwD0Ivpt3y98FtXk/KToO0ec5AjUDBQ4MOdkWVmnjEBfjq6ncvpuGtZ3776KSSK+i6uWkrSspdo/OQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "abort-error": "^1.0.1", @@ -4381,9 +4446,9 @@ } }, "node_modules/it-ndjson": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/it-ndjson/-/it-ndjson-1.1.2.tgz", - "integrity": "sha512-TPKpdYSNKjDdroCPnLamM5Up6XnPQ7F1KgNP3Ib5y5O4ayOVP+DHac/pzjUigcg9Kf9gkGVXDz8+FFKpWwoB3w==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/it-ndjson/-/it-ndjson-1.1.3.tgz", + "integrity": "sha512-HQTTCY1mi651Qz6Ijss1GtammSnPSN+MXzpXcD6RvytG2xJlMxD95RlKQP5JAE8jZtfSugGRUf9geXai7DuNBQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arraylist": "^2.4.8" @@ -4404,27 +4469,27 @@ } }, "node_modules/it-parallel": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.9.tgz", - "integrity": "sha512-FSg8T+pr7Z1VUuBxEzAAp/K1j8r1e9mOcyzpWMxN3mt33WFhroFjWXV1oYSSjNqcdYwxD/XgydMVMktJvKiDog==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.11.tgz", + "integrity": "sha512-ABHAwLO6RMB9zBKUN1v7pJWupwGaMkUrtGNnygDqog5yB8PjyKWxUKLwca1OHuZrdnkOx0VzETEXMSzWrzX8bw==", "license": "Apache-2.0 OR MIT", "dependencies": { "p-defer": "^4.0.1" } }, "node_modules/it-parallel-batch": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.7.tgz", - "integrity": "sha512-R/YKQMefUwLYfJ2UxMaxQUf+Zu9TM+X1KFDe4UaSQlcNog6AbMNMBt3w1suvLEjDDMrI9FNrlopVumfBIboeOg==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.8.tgz", + "integrity": "sha512-FWKdzfPNfUgE7DdHWPGPfRHXhFkx427F5rKHCM1DpN0ALsMdi/lhVOIhI7kNHoQwzYz/bFpPLCCA8BgnOcznXA==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-batch": "^3.0.0" } }, "node_modules/it-peekable": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.6.tgz", - "integrity": "sha512-odk9wn8AwFQipy8+tFaZNRCM62riraKZJRysfbmOett9wgJumCwgZFzWUBUwMoiQapEcEVGwjDpMChZIi+zLuQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.7.tgz", + "integrity": "sha512-w9W0WzNCsHLctV0z6vAA6N3jPgJu0qZZVlhngS+L29Rdva940f4Ea4ubtEXXYVBbq3l9Woo1MdWLGiEXzQDtdg==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-pipe": { @@ -4487,9 +4552,9 @@ } }, "node_modules/it-sort": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.7.tgz", - "integrity": "sha512-PsaKSd2Z0uhq8Mq5htdfsE/UagmdLCLWdBXPwi3FZGR4BTG180pFamhK+O+luFtBCNGRoqKAdtbZGTyGwA9uzw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.8.tgz", + "integrity": "sha512-RP0jzwaG9vrCFEpBNW8INOJ0Z2rv+2YXZ2jFICJbtP9BXL/qLWJ/TCgOF3+4hPCJK8g2czDtA55K9DuAJ+Ghsg==", "license": "Apache-2.0 OR MIT", "dependencies": { "it-all": "^3.0.0" @@ -4502,24 +4567,24 @@ "license": "Apache-2.0 OR MIT" }, "node_modules/it-take": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.7.tgz", - "integrity": "sha512-0+EbsTvH1XCpwhhFkjWdqJTjzS5XP3KL69woBqwANNhMLKn0j39jk/WHIlvbg9XW2vEm7cZz4p8w5DkBZR8LoA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.8.tgz", + "integrity": "sha512-avNX5LYv+eUh80eOgCAB+Drg9m1qTt06hpC5w0hc/AVaCFzG5FIJ8dAzPYVzQoq5p7l7hXg1Inoj2RTHJRqCGA==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-to-buffer": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/it-to-buffer/-/it-to-buffer-4.0.8.tgz", - "integrity": "sha512-niZbR/+GbyQ2F2Nj79EJprT0gji5Si4nM1eJpgtlvfbvhsi5ZgA/y+mzSrOoNajiTC3svqvoNy8HGlTW2Faz/A==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/it-to-buffer/-/it-to-buffer-4.0.9.tgz", + "integrity": "sha512-NJbd5SHCf5p3+6DMcPKCVnVj+wh4pCI2ugtxfurmkNUItNbZLGzmzJ7Q68N5xytQaH1qd/0lNbDGcXHIc0n9oA==", "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arrays": "^5.1.0" } }, "node_modules/it-to-buffer/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-to-buffer/node_modules/uint8arrays": { @@ -4549,9 +4614,9 @@ } }, "node_modules/it-ws/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/it-ws/node_modules/uint8arrays": { @@ -4563,6 +4628,27 @@ "multiformats": "^13.0.0" } }, + "node_modules/it-ws/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "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/just-debounce-it": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/just-debounce-it/-/just-debounce-it-3.2.0.tgz", @@ -4747,9 +4833,9 @@ } }, "node_modules/miniflare": { - "version": "4.20250416.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250416.0.tgz", - "integrity": "sha512-261PhPgD9zs5/BTdbWqwiaXtWxb+Av5zKCwTU+HXrA5E4tf3qnULwh3u6SVUOAEArEroFuKJzawsQ9COtNBurQ==", + "version": "4.20250523.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250523.0.tgz", + "integrity": "sha512-g4F1AC5xi66rB2eQNo2Fx7EffaXhMdgUSRl/ivgb4LMALMpxghG98oC4twqVwDLWIFSVFjtL1YEuYrPO8044mg==", "dev": true, "license": "MIT", "dependencies": { @@ -4758,9 +4844,10 @@ "acorn-walk": "8.3.2", "exit-hook": "2.2.1", "glob-to-regexp": "0.4.1", + "sharp": "^0.33.5", "stoppable": "1.1.0", "undici": "^5.28.5", - "workerd": "1.20250416.0", + "workerd": "1.20250523.0", "ws": "8.18.0", "youch": "3.3.4", "zod": "3.22.3" @@ -4772,6 +4859,28 @@ "node": ">=18.0.0" } }, + "node_modules/miniflare/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "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/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -4927,9 +5036,9 @@ } }, "node_modules/node-abi": { - "version": "3.74.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz", - "integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==", + "version": "3.75.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", + "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -4953,9 +5062,10 @@ } }, "node_modules/node-domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-2.0.1.tgz", - "integrity": "sha512-M85rnSC7WQ7wnfQTARPT4LrK7nwCHLdDFOCcItZMhTQjyCebJH8GciKqYJNgaOFZs9nFmTmd/VMyi3OW5jA47w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-2.0.2.tgz", + "integrity": "sha512-Qf9vHK9c5MGgUXj8SnucCIS4oEPuUstjRaMplLGeZpbWMfNV1rvEcXuwoXfN51dUfD1b4muPHPQtCx/5Dj/QAA==", + "deprecated": "Use your platform's native DOMException instead", "funding": [ { "type": "github", @@ -5328,9 +5438,9 @@ "license": "Apache-2.0 OR MIT" }, "node_modules/protobufjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.0.tgz", - "integrity": "sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { @@ -5363,9 +5473,9 @@ } }, "node_modules/protons-runtime/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/protons-runtime/node_modules/uint8arrays": { @@ -5502,6 +5612,16 @@ "node": ">= 12.13.0" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/retimer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz", @@ -5517,6 +5637,23 @@ "node": ">= 4" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5563,9 +5700,9 @@ "license": "ISC" }, "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5581,7 +5718,6 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", - "optional": true, "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.3", @@ -5636,6 +5772,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -5693,7 +5842,6 @@ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "is-arrayish": "^0.3.1" } @@ -5823,6 +5971,34 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -5857,9 +6033,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", - "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "license": "MIT", "dependencies": { "chownr": "^1.1.1", @@ -5959,6 +6135,16 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -5969,12 +6155,11 @@ } }, "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "license": "0BSD", - "optional": true + "peer": true }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -6015,9 +6200,9 @@ } }, "node_modules/uint8-varint/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/uint8-varint/node_modules/uint8arrays": { @@ -6039,9 +6224,9 @@ } }, "node_modules/uint8arraylist/node_modules/multiformats": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.2.tgz", - "integrity": "sha512-qbB0CQDt3QKfiAzZ5ZYjLFOs+zW43vA4uyM8g27PeEuXZybUOFyjrVdP93HPBHMoglibwfkdVwbzfUq8qGcH6g==", + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", "license": "Apache-2.0 OR MIT" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { @@ -6089,9 +6274,9 @@ "license": "MIT" }, "node_modules/unenv": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.15.tgz", - "integrity": "sha512-J/rEIZU8w6FOfLNz/hNKsnY+fFHWnu9MH4yRbSZF3xbbGHovcetXPs7sD+9p8L6CeNC//I9bhRYAOsBt2u7/OA==", + "version": "2.0.0-rc.17", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.17.tgz", + "integrity": "sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==", "dev": true, "license": "MIT", "dependencies": { @@ -6099,24 +6284,24 @@ "exsolve": "^1.0.4", "ohash": "^2.0.11", "pathe": "^2.0.3", - "ufo": "^1.5.4" + "ufo": "^1.6.1" } }, "node_modules/unstorage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.15.0.tgz", - "integrity": "sha512-m40eHdGY/gA6xAPqo8eaxqXgBuzQTlAKfmB1iF7oCKXE1HfwHwzDJBywK+qQGn52dta+bPlZluPF7++yR3p/bg==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", + "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", "license": "MIT", "peer": true, "dependencies": { "anymatch": "^3.1.3", "chokidar": "^4.0.3", - "destr": "^2.0.3", - "h3": "^1.15.0", + "destr": "^2.0.5", + "h3": "^1.15.2", "lru-cache": "^10.4.3", "node-fetch-native": "^1.6.6", "ofetch": "^1.4.1", - "ufo": "^1.5.4" + "ufo": "^1.6.1" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", @@ -6125,7 +6310,7 @@ "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", - "@capacitor/preferences": "^6.0.3", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", "@planetscale/database": "^1.19.0", @@ -6296,9 +6481,9 @@ } }, "node_modules/workerd": { - "version": "1.20250416.0", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250416.0.tgz", - "integrity": "sha512-Yrx/bZAKbmSvomdTAzzIpOHwpYhs0ldr2wqed22UEhQ0mIplAHY4xmY+SjAJhP/TydZrciOVzBxwM1+4T40KNA==", + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250523.0.tgz", + "integrity": "sha512-OClsq9ZzZZNdkY8/JTBjf+/A6F1q/SOn3/RQWCR0kDoclxecHS6Nq80jY6NP0ubJBKnqrUggA9WOWBgwWWOGUA==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -6309,28 +6494,28 @@ "node": ">=16" }, "optionalDependencies": { - "@cloudflare/workerd-darwin-64": "1.20250416.0", - "@cloudflare/workerd-darwin-arm64": "1.20250416.0", - "@cloudflare/workerd-linux-64": "1.20250416.0", - "@cloudflare/workerd-linux-arm64": "1.20250416.0", - "@cloudflare/workerd-windows-64": "1.20250416.0" + "@cloudflare/workerd-darwin-64": "1.20250523.0", + "@cloudflare/workerd-darwin-arm64": "1.20250523.0", + "@cloudflare/workerd-linux-64": "1.20250523.0", + "@cloudflare/workerd-linux-arm64": "1.20250523.0", + "@cloudflare/workerd-windows-64": "1.20250523.0" } }, "node_modules/wrangler": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.12.0.tgz", - "integrity": "sha512-4rfAXOi5KqM3ECvOrZJ97k3zEqxVwtdt4bijd8jcRBZ6iJYvEtjgjVi4TsfkVa/eXGhpfHTUnKu2uk8UHa8M2w==", + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.17.0.tgz", + "integrity": "sha512-FIOriw2Z7aNALAtnt4hTojDuU44n8pGJl62id0ig0s45Mej/Clg07vpmz+QCLTT7huiaSSyA1wthYOwtp0+K6A==", "dev": true, "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "0.4.0", - "@cloudflare/unenv-preset": "2.3.1", + "@cloudflare/unenv-preset": "2.3.2", "blake3-wasm": "2.1.5", - "esbuild": "0.25.2", - "miniflare": "4.20250416.0", + "esbuild": "0.25.4", + "miniflare": "4.20250523.0", "path-to-regexp": "6.3.0", - "unenv": "2.0.0-rc.15", - "workerd": "1.20250416.0" + "unenv": "2.0.0-rc.17", + "workerd": "1.20250523.0" }, "bin": { "wrangler": "bin/wrangler.js", @@ -6340,11 +6525,10 @@ "node": ">=18.0.0" }, "optionalDependencies": { - "fsevents": "~2.3.2", - "sharp": "^0.33.5" + "fsevents": "~2.3.2" }, "peerDependencies": { - "@cloudflare/workers-types": "^4.20250415.0" + "@cloudflare/workers-types": "^4.20250523.0" }, "peerDependenciesMeta": { "@cloudflare/workers-types": { @@ -6352,6 +6536,24 @@ } } }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6359,16 +6561,17 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", + "peer": true, "engines": { - "node": ">=10.0.0" + "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -6407,6 +6610,45 @@ "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==", "license": "MIT" }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/youch": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.4.tgz", diff --git a/cmd/radar/package.json b/cmd/radar/package.json new file mode 100644 index 0000000..bc35638 --- /dev/null +++ b/cmd/radar/package.json @@ -0,0 +1,23 @@ +{ + "name": "@sonr-io/radar-worker", + "version": "0.0.1", + "private": true, + "scripts": { + "deploy": "wrangler deploy", + "start": "wrangler dev" + }, + "dependencies": { + "@extism/extism": "^2.0.0-rc11", + "@helia/dag-cbor": "^1.0.1", + "@helia/dag-json": "^1.0.1", + "@helia/json": "^1.0.1", + "@helia/strings": "^1.0.1", + "@helia/unixfs": "^1.4.1", + "helia": "^2.1.0", + "sonr-cosmes": "^0.0.5" + }, + "devDependencies": { + "concurrently": "^9.1.2", + "wrangler": "^4.10.0" + } +} diff --git a/cmd/front/wrangler.toml b/cmd/radar/wrangler.toml similarity index 73% rename from cmd/front/wrangler.toml rename to cmd/radar/wrangler.toml index 7deffb6..22738b7 100644 --- a/cmd/front/wrangler.toml +++ b/cmd/radar/wrangler.toml @@ -1,41 +1,25 @@ # Top-level configuration -name = "motr-front" +name = "motr-radar" main = "build/worker.mjs" compatibility_date = "2025-04-14" routes = [ - { pattern = "sonr.id", custom_domain = true }, + { pattern = "did.run", custom_domain = true }, ] [build] -command = "npm run build" +command = "devbox run build:radar" [dev] -port = 8787 - -[vars] -SONR_CHAIN_ID = 'sonr-testnet-1' -IPFS_GATEWAY = 'https://ipfs.sonr.land' -SONR_API_URL = 'https://api.sonr.land' -SONR_RPC_URL = 'https://rpc.sonr.land' -SONR_GRPC_URL = 'https://grpc.sonr.id' -MATRIX_SERVER = 'https://bm.chat' -MOTR_GATEWAY = 'https://sonr.id' -MOTR_VAULT = 'https://did.run' -MOTR_MODE = 'resolver' +port = 4242 [observability] enabled = true -logpush = true - -[[r2_buckets]] -binding = 'PROFILES' -bucket_name = 'profiles' [[d1_databases]] binding = "DB" # available in your Worker on env.DB -database_name = "motr-db" -database_id = "abc70ab3-32ce-4600-9b15-a452f92b7987" +database_name = "motr-controller-db" +database_id = "872a4b08-7e07-4978-b227-5b60940238ed" [[kv_namespaces]] binding = "SESSIONS" # available in your Worker on env.KV @@ -45,3 +29,17 @@ id = "ea5de66fcfc14b5eba170395e29432ee" binding = "HANDLES" # available in your Worker on env.KV id = "271d47087a8842b2aac5ee79cf7bb203" +[[r2_buckets]] +binding = 'PROFILES' +bucket_name = 'profiles' + +[vars] +SONR_CHAIN_ID = 'sonr-testnet-1' +IPFS_GATEWAY = 'https://ipfs.sonr.land' +SONR_API_URL = 'https://api.sonr.land' +SONR_RPC_URL = 'https://rpc.sonr.land' +SONR_GRPC_URL = 'https://grpc.sonr.land' +MATRIX_SERVER = 'https://bm.chat' +MOTR_GATEWAY = 'https://sonr.id' +MOTR_VAULT = 'https://did.run' +MOTR_MODE = 'controller' diff --git a/cmd/vault/.gitignore b/cmd/vault/.gitignore deleted file mode 100644 index 63d5b35..0000000 --- a/cmd/vault/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -build -node_modules -.wrangler - -.dev.vars* diff --git a/cmd/vault/main.go b/cmd/vault/main.go deleted file mode 100644 index 7277f73..0000000 --- a/cmd/vault/main.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package main - -import ( - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/routes" - "github.com/sonr-io/motr/sink/config" -) - -func main() { - // Setup config - e, c := config.New() - e.Use(middleware.UseSession(c), middleware.UseCloudflareCache(c)) - routes.SetupRoutes(e) - e.Serve() -} diff --git a/cmd/vault/package.json b/cmd/vault/package.json deleted file mode 100644 index 83bf416..0000000 --- a/cmd/vault/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "@sonr-io/motr-vault", - "version": "0.0.1", - "private": true, - "scripts": { - "build": "npm run clean && npm run assets && npm run wasm", - "assets": "go run github.com/syumai/workers/cmd/workers-assets-gen -mode=go", - "wasm": "GOOS=js GOARCH=wasm go build -o ./build/app.wasm .", - "migrate": "npx wrangler d1 execute motr-db --remote --file=./schema.sql", - "deploy": "npx wrangler deploy", - "start": "npx wrangler dev", - "clean": "rm -rf ./build && rm -rf .wrangler && rm -rf ./dist && rm -rf ./node_modules && npm install" - }, - "dependencies": { - "@extism/extism": "^2.0.0-rc11", - "@helia/dag-cbor": "^1.0.1", - "@helia/dag-json": "^1.0.1", - "@helia/json": "^1.0.1", - "@helia/strings": "^1.0.1", - "@helia/unixfs": "^1.4.1", - "helia": "^2.1.0", - "sonr-cosmes": "^0.0.5" - }, - "devDependencies": { - "wrangler": "^4.10.0" - } -} diff --git a/cmd/worker/main.go b/cmd/worker/main.go new file mode 100644 index 0000000..a8372ad --- /dev/null +++ b/cmd/worker/main.go @@ -0,0 +1,23 @@ +//go:build js && wasm +// +build js,wasm + +package main + +import ( + "github.com/labstack/echo/v4" + "github.com/sonr-io/motr/pkg/database" + "github.com/sonr-io/motr/pkg/session" + "github.com/sonr-io/motr/routes" + "github.com/syumai/workers" + _ "github.com/syumai/workers/cloudflare/d1" +) + +func main() { + e := echo.New() + e.Use(session.Middleware(), database.Middleware()) + + routes.SetupViews(e) + routes.SetupPartials(e) + + workers.Serve(e) +} diff --git a/cmd/worker/package-lock.json b/cmd/worker/package-lock.json new file mode 100644 index 0000000..8e01abe --- /dev/null +++ b/cmd/worker/package-lock.json @@ -0,0 +1,6675 @@ +{ + "name": "@sonr-io/motr-worker", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@sonr-io/motr-worker", + "version": "0.0.1", + "dependencies": { + "@extism/extism": "^2.0.0-rc11", + "@helia/dag-cbor": "^1.0.1", + "@helia/dag-json": "^1.0.1", + "@helia/json": "^1.0.1", + "@helia/strings": "^1.0.1", + "@helia/unixfs": "^1.4.1", + "helia": "^2.1.0", + "sonr-cosmes": "^0.0.5" + }, + "devDependencies": { + "concurrently": "^9.1.2", + "wrangler": "^4.10.0" + } + }, + "node_modules/@achingbrain/nat-port-mapper": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-1.0.18.tgz", + "integrity": "sha512-B3sD+1KmD6qtmnCSdTtoMIwsw5Lj8XNDWnPakXnChm92eaFO7JRfS76oCts6iMFttJzOHq7FT0sNY7sDcbvosA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/ssdp": "^4.0.1", + "@libp2p/logger": "^5.0.1", + "default-gateway": "^7.2.2", + "err-code": "^3.0.1", + "it-first": "^3.0.1", + "p-defer": "^4.0.0", + "p-timeout": "^6.1.1", + "xml2js": "^0.6.0" + } + }, + "node_modules/@achingbrain/nat-port-mapper/node_modules/@libp2p/interface": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.2.tgz", + "integrity": "sha512-aQ9jZaZZq9/y9NFax0K8Z6tTqLg3Qsyv1EY0O+eFrltmIkoUOCeCAybUTiOTwieknznHc9AMrHifaK3BYb+bqg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.4.0", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "multiformats": "^13.3.4", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@achingbrain/nat-port-mapper/node_modules/@libp2p/logger": { + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.18.tgz", + "integrity": "sha512-venbhUr6riuMTu8c8bnphZ27XcOuDDq6fdYaRVggokQpwSC6QRejlaFnY8w0K1ZuwFv9uc19UA2ELtOBQ26AJw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.10.2", + "@multiformats/multiaddr": "^12.4.0", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.4", + "weald": "^1.0.4" + } + }, + "node_modules/@achingbrain/nat-port-mapper/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@achingbrain/ssdp": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@achingbrain/ssdp/-/ssdp-4.2.2.tgz", + "integrity": "sha512-Lp/IKQY4Gu+2yKmUtlSKYAEdjtP7Zz1MZ3ihDE3o2IdU5WgSBHDi+gOcbmCI74v8PWCqAGT/CYxwMOWqtDgbUg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.0", + "freeport-promise": "^2.0.0", + "merge-options": "^3.0.4", + "xml2js": "^0.6.2" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", + "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==", + "license": "Apache-2.0" + }, + "node_modules/@bufbuild/protobuf": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.2.0.tgz", + "integrity": "sha512-MBVuQMOBHxgGnZ9XCUIi8WOy5O/T4ma3TduCRhRvndv3UDbG9cHgd8h6nOYSGyBYPEvXf1z9nTwhp8mVIDbq2g==", + "license": "(Apache-2.0 AND BSD-3-Clause)", + "peer": true + }, + "node_modules/@chainsafe/as-chacha20poly1305": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz", + "integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-0.4.2.tgz", + "integrity": "sha512-HJ8GZBRjLeWtRsAXf3EbNsNzmTGpzTFjfpSf4yHkLYC+E52DhT6hwz+7qpj6I/EmFzSUm5tYYvT9K8GZokLQCQ==", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.1.0.tgz", + "integrity": "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==", + "license": "MIT" + }, + "node_modules/@chainsafe/libp2p-gossipsub": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-gossipsub/-/libp2p-gossipsub-10.1.1.tgz", + "integrity": "sha512-nou65zlGaUIPwlUq7ceEVpszJX4tBWRRanppYaKsJk7rbDeIKRJQla2duATGOI3fwj1+pGSlDQuF2zG7P0VJQw==", + "license": "Apache-2.0", + "dependencies": { + "@libp2p/crypto": "^2.0.0", + "@libp2p/interface": "^0.1.4", + "@libp2p/interface-internal": "^0.1.0", + "@libp2p/logger": "^3.0.0", + "@libp2p/peer-id": "^3.0.0", + "@libp2p/pubsub": "^8.0.0", + "@multiformats/multiaddr": "^12.1.3", + "abortable-iterator": "^5.0.1", + "denque": "^2.1.0", + "it-length-prefixed": "^9.0.1", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.0", + "multiformats": "^12.0.1", + "protobufjs": "^7.2.4", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.4" + }, + "engines": { + "npm": ">=8.7.0" + } + }, + "node_modules/@chainsafe/libp2p-noise": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-13.0.5.tgz", + "integrity": "sha512-xXqwrkH4nXlv3cYENHtqOgmIT2M4irPDwi548UvpmxzeC9hqa0kmiqbtAFYMV3v+gJ9pqVBVWFRk2hjs83GNrw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^0.4.1", + "@libp2p/crypto": "^2.0.0", + "@libp2p/interface": "^0.1.0", + "@libp2p/logger": "^3.0.0", + "@libp2p/peer-id": "^3.0.0", + "@noble/ciphers": "^0.4.0", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "it-byte-stream": "^1.0.0", + "it-length-prefixed": "^9.0.1", + "it-length-prefixed-stream": "^1.0.0", + "it-pair": "^2.0.6", + "it-pipe": "^3.0.1", + "it-stream-types": "^2.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.4", + "wherearewe": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@chainsafe/libp2p-noise/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==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@chainsafe/libp2p-yamux": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-5.0.4.tgz", + "integrity": "sha512-3cfOjomFde7+6sscoM0gK7cgA5aEm20oYeVXSSonVzaas/UZzNsGP+FnF/bjLATjdyTB+YqhBHJs/KKk1PAy/Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.0", + "@libp2p/logger": "^3.0.0", + "get-iterator": "^2.0.1", + "it-foreach": "^2.0.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.0", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", + "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", + "license": "MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1" + } + }, + "node_modules/@cloudflare/kv-asset-handler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", + "integrity": "sha512-+tv3z+SPp+gqTIcImN9o0hqE9xyfQjI1XD9pL6NuKjua9B1y7mNYv0S9cP+QEbA4ppVgGZEmKOvHX5G5Ei1CVA==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "mime": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@cloudflare/unenv-preset": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.3.2.tgz", + "integrity": "sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg==", + "dev": true, + "license": "MIT OR Apache-2.0", + "peerDependencies": { + "unenv": "2.0.0-rc.17", + "workerd": "^1.20250508.0" + }, + "peerDependenciesMeta": { + "workerd": { + "optional": true + } + } + }, + "node_modules/@cloudflare/workerd-darwin-64": { + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250523.0.tgz", + "integrity": "sha512-/K7vKkPDx9idJ7hJtqYXYsKkHX9XQ6awyDyBZ4RwbaQ/o3fyS/tgHaej2rUO6zkb7CfUxiaeAB7Z6i7KltMY5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-darwin-arm64": { + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250523.0.tgz", + "integrity": "sha512-tVQqStt245KzkrCT6DBXoMNHaJgh/8hQy3fsG+4gHfqw/JdKEgXigkc9hWdC6BoS5DiGK+dGVJo2MnWHFC7XlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-64": { + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250523.0.tgz", + "integrity": "sha512-PCPWBlwiKr9Es2TP93JVygXRPwx+AkygUMV2gFOPerVrdXUd13A4dJ68Qjpmh3O0xqmVIRV6PSogM3wNvwnw5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-linux-arm64": { + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250523.0.tgz", + "integrity": "sha512-uKa/L9W1AzT+yE0wNxFZPlMXms5xmGaaOmTAK0wuLPW6qmKj1zyBidjHqQXVZ+eK/fLy3CNeyB9EBtR0/8FH7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cloudflare/workerd-windows-64": { + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250523.0.tgz", + "integrity": "sha512-H5ggClWrskRs7pj2Fd+iJpjFMrh7DZqAfhJT3IloTW85lCEY2+y/yfXEGyDsc0UTLuTS0znldcUrVCRjSiSOkw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", + "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@extism/extism": { + "version": "2.0.0-rc13", + "resolved": "https://registry.npmjs.org/@extism/extism/-/extism-2.0.0-rc13.tgz", + "integrity": "sha512-iQ3mrPKOC0WMZ94fuJrKbJmMyz4LQ9Abf8gd4F5ShxKWa+cRKcVzk0EqRQsp5xXsQ2dO3zJTiA6eTc4Ihf7k+A==", + "license": "BSD-3-Clause" + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@helia/dag-cbor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@helia/dag-cbor/-/dag-cbor-1.0.3.tgz", + "integrity": "sha512-ZQHdRj6YwLegv6AyzhzU1z5OB7rI+hsufYud0LiVNznc+Pgbkpjyqg6pwAYCsJLt6fIEPHbt5cOH2aqjVfA6LQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^2.0.0", + "@ipld/dag-cbor": "^9.0.0", + "@libp2p/interfaces": "^3.3.1", + "interface-blockstore": "^5.0.0", + "multiformats": "^12.0.1", + "progress-events": "^1.0.0" + } + }, + "node_modules/@helia/dag-json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@helia/dag-json/-/dag-json-1.0.3.tgz", + "integrity": "sha512-u/M3rOR3UfMXpRo82r8BWfIaR1fazwW6gtRRvpwXKaoDPWDa/HkfrROAduYZ6IvUVqhkxk36oGboYN1ld0bTlQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^2.0.0", + "@ipld/dag-json": "^10.0.1", + "@libp2p/interfaces": "^3.3.1", + "interface-blockstore": "^5.0.0", + "multiformats": "^12.0.1", + "progress-events": "^1.0.0" + } + }, + "node_modules/@helia/delegated-routing-v1-http-api-client": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@helia/delegated-routing-v1-http-api-client/-/delegated-routing-v1-http-api-client-1.1.2.tgz", + "integrity": "sha512-u+sVdOxFieusZh/AxC8c0lU1micWfAosju7A80n62rdJ1fr1lclkhhrlfaKWIgVOq+pwonEzoOE7QgnTL22tYw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.2", + "@libp2p/logger": "^3.0.2", + "@libp2p/peer-id": "^3.0.3", + "@multiformats/multiaddr": "^12.1.3", + "any-signal": "^4.1.1", + "browser-readablestream-to-it": "^2.0.3", + "ipns": "^7.0.1", + "it-first": "^3.0.3", + "it-map": "^3.0.4", + "it-ndjson": "^1.0.4", + "multiformats": "^12.1.1", + "p-defer": "^4.0.0", + "p-queue": "^7.3.4", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@helia/delegated-routing-v1-http-api-client/node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@helia/delegated-routing-v1-http-api-client/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@helia/interface": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@helia/interface/-/interface-2.1.0.tgz", + "integrity": "sha512-Z7PwuDIR0BODfSMzYcdzgdTYLsshCawAoPvGuuazvBddWSD9y82/QBmsWp6CTkyM/ziEaWbz5wERmRS+wejDLg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.1", + "interface-blockstore": "^5.0.0", + "interface-datastore": "^8.0.0", + "interface-store": "^5.0.1", + "ipfs-bitswap": "^19.0.0", + "multiformats": "^12.0.1", + "progress-events": "^1.0.0" + } + }, + "node_modules/@helia/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@helia/json/-/json-1.0.3.tgz", + "integrity": "sha512-f3w17sYPwR4V9qxXgmC0kGj8vHF4313Ur+7zjK3yjXyWnf3Kjs5EY+uX82MjFk2Zndfj9jod2UvzkS9qn5v7tg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^2.0.0", + "@libp2p/interfaces": "^3.3.1", + "interface-blockstore": "^5.0.0", + "multiformats": "^12.0.1", + "progress-events": "^1.0.0" + } + }, + "node_modules/@helia/strings": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@helia/strings/-/strings-1.0.1.tgz", + "integrity": "sha512-2Hfp9qVccegmQJ36t2DX3nusSzBeaoRmsqcTMz/4QT8a68VMUC9eaEZ4wABMpGiDChInIaKk+KSVXkJPHmnOvA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^2.0.0", + "@libp2p/interfaces": "^3.3.1", + "interface-blockstore": "^5.0.0", + "multiformats": "^12.1.2", + "progress-events": "^1.0.0", + "uint8arrays": "^4.0.3" + } + }, + "node_modules/@helia/unixfs": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@helia/unixfs/-/unixfs-1.4.3.tgz", + "integrity": "sha512-jS0En8fGhb01XH+nnxo3kQsmc1lwBEdlttAZFvTo7HCjBGPNFuaYdwTqF9S1wMVWV2fWqj7eS2zBZZa0MDsi1Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^2.0.0", + "@ipld/dag-pb": "^4.0.0", + "@libp2p/interface": "^0.1.2", + "@libp2p/logger": "^3.0.2", + "@multiformats/murmur3": "^2.1.2", + "hamt-sharding": "^3.0.2", + "interface-blockstore": "^5.0.0", + "ipfs-unixfs": "^11.0.0", + "ipfs-unixfs-exporter": "^13.1.0", + "ipfs-unixfs-importer": "^15.1.0", + "it-glob": "^2.0.4", + "it-last": "^3.0.1", + "it-pipe": "^3.0.1", + "merge-options": "^3.0.4", + "multiformats": "^12.1.1", + "progress-events": "^1.0.0", + "sparse-array": "^1.3.2" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@ipld/dag-cbor": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.4.tgz", + "integrity": "sha512-GbDWYl2fdJgkYtIJN0HY9oO0o50d1nB4EQb7uYWKUd2ztxCjxiEW3PjwGG0nqUpN1G4Cug6LX8NzbA7fKT+zfA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-cbor/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@ipld/dag-json": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.5.tgz", + "integrity": "sha512-Q4Fr3IBDEN8gkpgNefynJ4U/ZO5Kwr7WSUMBDbZx0c37t0+IwQCTM9yJh8l5L4SRFjm31MuHwniZ/kM+P7GQ3Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-json/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@ipld/dag-pb": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.5.tgz", + "integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-pb/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@libp2p/bootstrap": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-9.0.12.tgz", + "integrity": "sha512-w/Mzq8tNBy4DQJXlIN4mwged/6ZHltsAr/J2Wpv0mijrKrr3PLEF1XWfQtdvNUb/exOlXOMCNwVRcXfeAha1qg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-id": "^3.0.6", + "@multiformats/mafmt": "^12.1.2", + "@multiformats/multiaddr": "^12.1.5" + } + }, + "node_modules/@libp2p/crypto": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-2.0.8.tgz", + "integrity": "sha512-8e5fh6bsJNpSjhrggtlm8QF+BERjelJswIjRS69aKgxp24R4z2kDM4pRYPkfQjXJDLNDtqWtKNmePgX23+QJsA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@noble/curves": "^1.1.0", + "@noble/hashes": "^1.3.1", + "multiformats": "^12.0.1", + "node-forge": "^1.1.0", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/interface": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz", + "integrity": "sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.1.5", + "abortable-iterator": "^5.0.1", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "race-signal": "^1.0.0", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/interface-internal": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-0.1.12.tgz", + "integrity": "sha512-tUZ4hxU8fO4397p/GtXNvAANHiLA/Uxdil90TuNNCnlb+GZijDYEEJiqBfnk2zYAdwm7Q9iO0fVxZCpfoW8B7Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/peer-collections": "^4.0.8", + "@multiformats/multiaddr": "^12.1.5", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/interfaces": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.3.2.tgz", + "integrity": "sha512-p/M7plbrxLzuQchvNwww1Was7ZeGE2NaOFulMaZBYIihU8z3fhaV+a033OqnC/0NTX/yhfdNOG7znhYq3XoR/g==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@libp2p/kad-dht": { + "version": "10.0.15", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-10.0.15.tgz", + "integrity": "sha512-S4pQY8t4lXBlicBREThtOHnLn79e07sVgKZPa9SmJ4hC1+i0HFD8XLzrHm3cnKSO/4RhoaF5YdlnZMMjbb7q0w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^2.0.8", + "@libp2p/interface": "^0.1.6", + "@libp2p/interface-internal": "^0.1.9", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-collections": "^4.0.8", + "@libp2p/peer-id": "^3.0.6", + "@multiformats/multiaddr": "^12.1.5", + "@types/sinon": "^17.0.0", + "abortable-iterator": "^5.0.1", + "any-signal": "^4.1.1", + "datastore-core": "^9.0.1", + "hashlru": "^2.3.0", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "it-drain": "^3.0.2", + "it-first": "^3.0.1", + "it-length": "^3.0.1", + "it-length-prefixed": "^9.0.1", + "it-map": "^3.0.3", + "it-merge": "^3.0.0", + "it-parallel": "^3.0.0", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.1", + "it-stream-types": "^2.0.1", + "it-take": "^3.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "p-event": "^6.0.0", + "p-queue": "^7.3.4", + "private-ip": "^3.0.0", + "progress-events": "^1.0.0", + "protons-runtime": "^5.0.0", + "uint8-varint": "^2.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/kad-dht/node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/kad-dht/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/keychain": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@libp2p/keychain/-/keychain-3.0.8.tgz", + "integrity": "sha512-+WmW9bN9WE0uKqTG3DVk+zsd9Np63lLS+uYRhncwCGTvg0HKXq1t+i4Xd8KbZvUv7UVakE8aae1oMezW3nS+2g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^2.0.8", + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-id": "^3.0.6", + "interface-datastore": "^8.2.0", + "merge-options": "^3.0.4", + "sanitize-filename": "^1.6.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/logger": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-3.1.0.tgz", + "integrity": "sha512-qJbJBAhxHVsRBtQSOIkSLi0lskUSFjzE+zm0QvoyxzZKSz+mX41mZLbnofPIVOVauoDQ40dXpe7WDUOq8AbiQQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@multiformats/multiaddr": "^12.1.5", + "debug": "^4.3.4", + "interface-datastore": "^8.2.0", + "multiformats": "^12.0.1" + } + }, + "node_modules/@libp2p/mdns": { + "version": "9.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-9.0.14.tgz", + "integrity": "sha512-kS+hEGnA4X3AUknn6N/RiUu72AomiYyD0mwHtyPdcTmYYI6VNKWkniS95wQKXMSaHk+pEN7NAugTXJf478jkRg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-id": "^3.0.6", + "@libp2p/utils": "^4.0.7", + "@multiformats/multiaddr": "^12.1.5", + "@types/multicast-dns": "^7.2.1", + "dns-packet": "^5.4.0", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/@libp2p/mplex": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-9.0.12.tgz", + "integrity": "sha512-ll+fsz9zJ9OW3Z14hN4uh5JDQWIfudp2HTsSKoBiiFnKNY58tMH01iijNtHXGyGiVPmFCPeJf01oPlx0j9OgDQ==", + "deprecated": "Mplex has no flow control - please use @chainsafe/libp2p-yamux instead", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "abortable-iterator": "^5.0.1", + "benchmark": "^2.1.4", + "it-batched-bytes": "^2.0.2", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "rate-limiter-flexible": "^3.0.0", + "uint8-varint": "^2.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/multistream-select": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-4.0.10.tgz", + "integrity": "sha512-f0BDv96L2yF9SZ0YXdg41JcGWwPBGZNAoeFGkna38SMFtj00NQWBOwAjqVdhrYVF58ymB0Ci6OfMzYv1XHVj/A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "abortable-iterator": "^5.0.1", + "it-first": "^3.0.1", + "it-handshake": "^4.1.3", + "it-length-prefixed": "^9.0.1", + "it-merge": "^3.0.0", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.0", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-collections": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-4.0.11.tgz", + "integrity": "sha512-4bHtIm3VfYMm2laRuebkswQukgQmWTUbExnu1sD5vcbI186aCZ7P56QjWyOIMn3XflIoZ0cx9AXX/WuDQSolDA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/peer-id": "^3.0.6" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-3.0.6.tgz", + "integrity": "sha512-iN1Ia5gH2U1V/GOVRmLHmVY6fblxzrOPUoZrMYjHl/K4s+AiI7ym/527WDeQvhQpD7j3TfDwcAYforD2dLGpLw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "multiformats": "^12.0.1", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-id-factory": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id-factory/-/peer-id-factory-3.0.11.tgz", + "integrity": "sha512-BmXKgeyAGezPyoY/uni95t439+AE0eqEKMxjfkfy2Hv/LcJ9gdR3zjRl7Hzci1O12b+yeVFtYVU8DZtBCcsZjQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^2.0.8", + "@libp2p/interface": "^0.1.6", + "@libp2p/peer-id": "^3.0.6", + "multiformats": "^12.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-record": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-6.0.12.tgz", + "integrity": "sha512-8IItsbcPeIaFC5QMZD+gGl/dDbwLjE9nrmL7ZAOvMwcfZx+2AVZPN/6nubahO/wQrchpvBYiK3TxaWGnOH8sIA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^2.0.8", + "@libp2p/interface": "^0.1.6", + "@libp2p/peer-id": "^3.0.6", + "@libp2p/utils": "^4.0.7", + "@multiformats/multiaddr": "^12.1.5", + "protons-runtime": "^5.0.0", + "uint8-varint": "^2.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/peer-store": { + "version": "9.0.12", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-9.0.12.tgz", + "integrity": "sha512-rYpUUhvDI7GTfMFWNJ+HQoEOAVOxfp3t0bgJWLvUFKNtULojEk0znKHa6da7hX2KE06wM7ZEMfF23jZCmrwk1g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-collections": "^4.0.8", + "@libp2p/peer-id": "^3.0.6", + "@libp2p/peer-id-factory": "^3.0.8", + "@libp2p/peer-record": "^6.0.9", + "@multiformats/multiaddr": "^12.1.5", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "mortice": "^3.0.1", + "multiformats": "^12.0.1", + "protons-runtime": "^5.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/pubsub": { + "version": "8.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/pubsub/-/pubsub-8.0.14.tgz", + "integrity": "sha512-hkNqUC6ef96WxqYFnmG0CKy9Vvb0mum5IrllUypwWiV0iK1zj8PcqO8oyTjLl/waLG56Kuy8CAjahnMov+U3dw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^2.0.8", + "@libp2p/interface": "^0.1.6", + "@libp2p/interface-internal": "^0.1.9", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-collections": "^4.0.8", + "@libp2p/peer-id": "^3.0.6", + "abortable-iterator": "^5.0.1", + "it-length-prefixed": "^9.0.1", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.0", + "multiformats": "^12.0.1", + "p-queue": "^7.3.4", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/pubsub/node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/pubsub/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@libp2p/tcp": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-8.0.13.tgz", + "integrity": "sha512-uN8p1gONoD7z8NteDE3a7F8yy9HblC3b9zX39L2/ztrqeAPiqRfGpBhXK+osXXj07jjnjhSNLBSVNHJNSmADRg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/utils": "^4.0.7", + "@multiformats/mafmt": "^12.1.2", + "@multiformats/multiaddr": "^12.1.5", + "@types/sinon": "^17.0.0", + "stream-to-it": "^0.2.2" + } + }, + "node_modules/@libp2p/utils": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-4.0.7.tgz", + "integrity": "sha512-xA6mS4II14870/DmmI3GFRWdNwHeOd2QV3ltatpdVmeEQpdn82jjtCzqn45AChjCugFOskOthXnQiWp+FvdKZg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@multiformats/multiaddr": "^12.1.5", + "@multiformats/multiaddr-matcher": "^1.0.1", + "is-loopback-addr": "^2.0.1", + "it-stream-types": "^2.0.1", + "private-ip": "^3.0.0", + "uint8arraylist": "^2.4.3" + } + }, + "node_modules/@libp2p/webrtc": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-3.2.11.tgz", + "integrity": "sha512-djp1pgtmIT3zeRaTGMbr6Jl3N7qwcaYlgaNqU3hH5ys/+2SVRIDMwBcsSOuv3414fCM7n0SCRjk3QBYxk0WKNg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/libp2p-noise": "^13.0.0", + "@libp2p/interface": "^0.1.6", + "@libp2p/interface-internal": "^0.1.9", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-id": "^3.0.6", + "@multiformats/mafmt": "^12.1.2", + "@multiformats/multiaddr": "^12.1.5", + "@multiformats/multiaddr-matcher": "^1.0.1", + "abortable-iterator": "^5.0.1", + "any-signal": "^4.1.1", + "detect-browser": "^5.3.0", + "it-length-prefixed": "^9.0.1", + "it-pipe": "^3.0.1", + "it-protobuf-stream": "^1.0.0", + "it-pushable": "^3.2.0", + "it-stream-types": "^2.0.1", + "it-to-buffer": "^4.0.2", + "multiformats": "^12.0.1", + "multihashes": "^4.0.3", + "node-datachannel": "^0.5.0-dev", + "p-defer": "^4.0.0", + "p-event": "^6.0.0", + "p-timeout": "^6.1.2", + "protons-runtime": "^5.0.0", + "race-signal": "^1.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "node_modules/@libp2p/websockets": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-7.0.13.tgz", + "integrity": "sha512-frRvTtk7++bJ/JLEX8iulpHAMMkEfroWDn2RhiY24SMPwkHWs3CZwm0P6nQ6p0YHft3OQfwPZaqBu0KItxnVHQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/utils": "^4.0.7", + "@multiformats/mafmt": "^12.1.2", + "@multiformats/multiaddr": "^12.1.5", + "@multiformats/multiaddr-to-uri": "^9.0.2", + "@types/ws": "^8.5.4", + "abortable-iterator": "^5.0.1", + "it-ws": "^6.0.0", + "p-defer": "^4.0.0", + "wherearewe": "^2.0.1", + "ws": "^8.12.1" + } + }, + "node_modules/@libp2p/websockets/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "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/@libp2p/webtransport": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/@libp2p/webtransport/-/webtransport-3.1.10.tgz", + "integrity": "sha512-8bdnqs9Jz1D5Wy+VDMluW9HsD2A712PZMmYTbBXEG4BabDWHI6l2UdJDt4zkaP1rqn+o9YooipA0wZU34MuiSA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/libp2p-noise": "^13.0.0", + "@libp2p/interface": "^0.1.6", + "@libp2p/logger": "^3.1.0", + "@libp2p/peer-id": "^3.0.6", + "@multiformats/multiaddr": "^12.1.5", + "@multiformats/multiaddr-matcher": "^1.0.1", + "it-stream-types": "^2.0.1", + "multiformats": "^12.0.1", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/@multiformats/dns": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz", + "integrity": "sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@types/dns-packet": "^5.6.5", + "buffer": "^6.0.3", + "dns-packet": "^5.6.1", + "hashlru": "^2.3.0", + "p-queue": "^8.0.1", + "progress-events": "^1.0.0", + "uint8arrays": "^5.0.2" + } + }, + "node_modules/@multiformats/dns/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@multiformats/dns/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@multiformats/mafmt": { + "version": "12.1.6", + "resolved": "https://registry.npmjs.org/@multiformats/mafmt/-/mafmt-12.1.6.tgz", + "integrity": "sha512-tlJRfL21X+AKn9b5i5VnaTD6bNttpSpcqwKVmDmSHLwxoz97fAHaepqFOk/l1fIu94nImIXneNbhsJx/RQNIww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.0.0" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.4.0.tgz", + "integrity": "sha512-FL7yBTLijJ5JkO044BGb2msf+uJLrwpD6jD6TkXlbjA9N12+18HT40jvd4o5vL4LOJMc86dPX6tGtk/uI9kYKg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@multiformats/dns": "^1.0.3", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/@multiformats/multiaddr-matcher": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-1.7.2.tgz", + "integrity": "sha512-BJzHOBAAxGZKw+FY/MzeIKGKERAW/1XOrpj61wgzZVvR/iksyGTQhliyTgmuakpBJPSsCxlrk3eLemVhZuJIFQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@multiformats/multiaddr": "^12.0.0", + "multiformats": "^13.0.0" + } + }, + "node_modules/@multiformats/multiaddr-matcher/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@multiformats/multiaddr-to-uri": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-9.0.8.tgz", + "integrity": "sha512-4eiN5iEiQfy2A98BxekUfW410L/ivg0sgjYSgSqmklnrBhK+QyMz4yqgfkub8xDTXOc7O5jp4+LVyM3ZqMeWNw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.0.0" + } + }, + "node_modules/@multiformats/multiaddr/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@multiformats/multiaddr/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/@multiformats/murmur3": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.1.8.tgz", + "integrity": "sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0", + "murmurhash3js-revisited": "^3.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@multiformats/murmur3/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/@noble/ciphers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.2.0.tgz", + "integrity": "sha512-YGdEUzYEd+82jeaVbSKKVp1jFZb8LwaNMIIzHFkihGvYdd/KKAr7KaJHdEdSYGredE3ssSravXIa0Jxg28Sv5w==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", + "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", + "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.2.3.tgz", + "integrity": "sha512-l7r5oEQym9Us7EAigzg30/PQAvynhMt2uoYtT3t26eGDVm9Yii5mZ5jWSWmZ/oSIR2Et0xfc6DXrG0bZ787V3w==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@scure/base": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", + "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.7.0.tgz", + "integrity": "sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.6.0.tgz", + "integrity": "sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@stablelib/aead": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==", + "license": "MIT", + "peer": 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==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@stablelib/chacha": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", + "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/chacha20poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", + "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/aead": "^1.0.1", + "@stablelib/binary": "^1.0.1", + "@stablelib/chacha": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/poly1305": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==", + "license": "MIT", + "peer": true + }, + "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==", + "license": "MIT", + "peer": true + }, + "node_modules/@stablelib/hkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hkdf/-/hkdf-1.0.1.tgz", + "integrity": "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/hash": "^1.0.1", + "@stablelib/hmac": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hmac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "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==", + "license": "MIT", + "peer": true + }, + "node_modules/@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/bytes": "^1.0.1" + } + }, + "node_modules/@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", + "peer": true, + "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==", + "license": "MIT", + "peer": true, + "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==", + "license": "MIT", + "peer": true + }, + "node_modules/@stablelib/x25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@types/dns-packet": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", + "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/multicast-dns": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@types/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw==", + "license": "MIT", + "dependencies": { + "@types/dns-packet": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.15.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.23.tgz", + "integrity": "sha512-7Ec1zaFPF4RJ0eXu1YT/xgiebqwqoJz8rYPDi/O2BcZ++Wpt0Kq9cl0eg6NN6bYbPnR67ZLo7St5Q3UK0SnARw==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "license": "MIT" + }, + "node_modules/@types/sinon": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", + "integrity": "sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==", + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vascosantos/moving-average": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", + "integrity": "sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w==", + "license": "MIT" + }, + "node_modules/@walletconnect/core": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-2.8.6.tgz", + "integrity": "sha512-rnSqm1KJLcww/v6+UH8JeibQkJ3EKgyUDPfEK0stSEkrIUIcXaFlq3Et8S+vgV8bPhI0MVUhAhFL5OJZ3t2ryg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-provider": "1.0.13", + "@walletconnect/jsonrpc-types": "1.0.3", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/jsonrpc-ws-connection": "^1.0.11", + "@walletconnect/keyvaluestorage": "^1.0.2", + "@walletconnect/logger": "^2.0.1", + "@walletconnect/relay-api": "^1.0.9", + "@walletconnect/relay-auth": "^1.0.4", + "@walletconnect/safe-json": "^1.0.2", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.8.6", + "@walletconnect/utils": "2.8.6", + "events": "^3.3.0", + "lodash.isequal": "4.5.0", + "uint8arrays": "^3.1.0" + } + }, + "node_modules/@walletconnect/core/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz", + "integrity": "sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==", + "license": "MIT", + "peer": true, + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/core/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)", + "peer": true + }, + "node_modules/@walletconnect/core/node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/@walletconnect/crypto": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@walletconnect/crypto/-/crypto-1.1.0.tgz", + "integrity": "sha512-yZO8BBTQt7BcaemjDgwN56OmSv0OO4QjIpvtfj5OxZfL6IQZQWHOhwC6pJg+BmZPbDlJlWFqFuCZRtiPwRmsoA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/ciphers": "1.2.0", + "@noble/hashes": "1.7.0", + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/environment": "^1.0.1", + "@walletconnect/randombytes": "^1.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/crypto/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/encoding": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/encoding/-/encoding-1.0.2.tgz", + "integrity": "sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-typedarray": "1.0.0", + "tslib": "1.14.1", + "typedarray-to-buffer": "3.1.5" + } + }, + "node_modules/@walletconnect/environment": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/environment/-/environment-1.0.1.tgz", + "integrity": "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/events/-/events-1.0.1.tgz", + "integrity": "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/heartbeat": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz", + "integrity": "sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-provider": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz", + "integrity": "sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.8", + "@walletconnect/safe-json": "^1.0.2", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz", + "integrity": "sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "events": "^3.3.0", + "keyvaluestorage-interface": "^1.0.0" + } + }, + "node_modules/@walletconnect/jsonrpc-utils": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz", + "integrity": "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/environment": "^1.0.1", + "@walletconnect/jsonrpc-types": "^1.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/jsonrpc-ws-connection": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.16.tgz", + "integrity": "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/jsonrpc-utils": "^1.0.6", + "@walletconnect/safe-json": "^1.0.2", + "events": "^3.3.0", + "ws": "^7.5.1" + } + }, + "node_modules/@walletconnect/keyvaluestorage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz", + "integrity": "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/safe-json": "^1.0.1", + "idb-keyval": "^6.2.1", + "unstorage": "^1.9.0" + }, + "peerDependencies": { + "@react-native-async-storage/async-storage": "1.x" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, + "node_modules/@walletconnect/legacy-client": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@walletconnect/legacy-client/-/legacy-client-2.0.0.tgz", + "integrity": "sha512-v5L7rYk9loVnfvUf0mF+76bUPFaU5/Vh7mzL6/950CD/yoGdzYZ3Kj+L7mkC6HPMEGeQsBP1+sqBuiVGZ/aODA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@walletconnect/crypto": "^1.0.3", + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/jsonrpc-utils": "^1.0.4", + "@walletconnect/legacy-types": "^2.0.0", + "@walletconnect/legacy-utils": "^2.0.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "^5.3.0", + "query-string": "^6.13.5" + } + }, + "node_modules/@walletconnect/legacy-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@walletconnect/legacy-types/-/legacy-types-2.0.0.tgz", + "integrity": "sha512-sOVrA7HUdbI1OwKyPOQU0/DdvTSVFlsXWpAk2K2WvP2erTkBWPMTJq6cv2BmKdoJ3p6gLApT7sd+jHi3OF71uw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "node_modules/@walletconnect/legacy-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@walletconnect/legacy-utils/-/legacy-utils-2.0.0.tgz", + "integrity": "sha512-CPWxSVVXw0kgNCxvU126g4GiV3mzXmC8IPJ15twE46aJ1FX+RHEIfAzFMFz2F2+fEhBxL63A7dwNQKDXorRPcQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/jsonrpc-utils": "^1.0.4", + "@walletconnect/legacy-types": "^2.0.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "^5.3.0", + "query-string": "^6.13.5" + } + }, + "node_modules/@walletconnect/logger": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@walletconnect/logger/-/logger-2.1.2.tgz", + "integrity": "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/safe-json": "^1.0.2", + "pino": "7.11.0" + } + }, + "node_modules/@walletconnect/randombytes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@walletconnect/randombytes/-/randombytes-1.1.0.tgz", + "integrity": "sha512-X+LO/9ClnXX2Q/1+u83qMnohVaxC4qsXByM/gMSwGMrUObxEiqEWS+b9Upg9oNl6mTr85dTCRF8W17KVcKKXQw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.7.0", + "@walletconnect/encoding": "^1.0.2", + "@walletconnect/environment": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/randombytes/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/relay-api": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-api/-/relay-api-1.0.11.tgz", + "integrity": "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/jsonrpc-types": "^1.0.2" + } + }, + "node_modules/@walletconnect/relay-auth": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@walletconnect/relay-auth/-/relay-auth-1.1.0.tgz", + "integrity": "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/curves": "1.8.0", + "@noble/hashes": "1.7.0", + "@walletconnect/safe-json": "^1.0.1", + "@walletconnect/time": "^1.0.2", + "uint8arrays": "^3.0.0" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/@noble/curves": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.0.tgz", + "integrity": "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@noble/hashes": "1.7.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/@noble/hashes": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.0.tgz", + "integrity": "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@walletconnect/relay-auth/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)", + "peer": true + }, + "node_modules/@walletconnect/relay-auth/node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/@walletconnect/safe-json": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/safe-json/-/safe-json-1.0.2.tgz", + "integrity": "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/sign-client": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@walletconnect/sign-client/-/sign-client-2.8.6.tgz", + "integrity": "sha512-rOFTKTHP7oJfXgYHX7+SdB8VbcsEE3ZFG/bMdmZboWaBim1mrY3vUyDdKrNr0VgI3AwBiEQezQDfKxBX0pMSQQ==", + "deprecated": "Reliability and performance improvements. See: https://github.com/WalletConnect/walletconnect-monorepo/releases", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@walletconnect/core": "2.8.6", + "@walletconnect/events": "^1.0.1", + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-utils": "1.0.8", + "@walletconnect/logger": "^2.0.1", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.8.6", + "@walletconnect/utils": "2.8.6", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@walletconnect/time/-/time-1.0.2.tgz", + "integrity": "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/types": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@walletconnect/types/-/types-2.8.6.tgz", + "integrity": "sha512-Z/PFa3W1XdxeTcCtdR6lUsFgZfU/69wWJBPyclPwn7cu1+eriuCr6XZXQpJjib3flU+HnwHiXeUuqZaheehPxw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@walletconnect/events": "^1.0.1", + "@walletconnect/heartbeat": "1.2.1", + "@walletconnect/jsonrpc-types": "1.0.3", + "@walletconnect/keyvaluestorage": "^1.0.2", + "@walletconnect/logger": "^2.0.1", + "events": "^3.3.0" + } + }, + "node_modules/@walletconnect/types/node_modules/@walletconnect/jsonrpc-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz", + "integrity": "sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw==", + "license": "MIT", + "peer": true, + "dependencies": { + "keyvaluestorage-interface": "^1.0.0", + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/utils": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-2.8.6.tgz", + "integrity": "sha512-wcy6e5+COYo7tfNnW8YqidnATdJDIW6vDiWWE7A1F78Sl/VflkaevB9cIgyn8eLdxC1SxXgGoeC2oLP90nnHJg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@stablelib/chacha20poly1305": "1.0.1", + "@stablelib/hkdf": "1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/sha256": "1.0.1", + "@stablelib/x25519": "^1.0.3", + "@walletconnect/relay-api": "^1.0.9", + "@walletconnect/safe-json": "^1.0.2", + "@walletconnect/time": "^1.0.2", + "@walletconnect/types": "2.8.6", + "@walletconnect/window-getters": "^1.0.1", + "@walletconnect/window-metadata": "^1.0.1", + "detect-browser": "5.3.0", + "query-string": "7.1.3", + "uint8arrays": "^3.1.0" + } + }, + "node_modules/@walletconnect/utils/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)", + "peer": true + }, + "node_modules/@walletconnect/utils/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==", + "license": "MIT", + "peer": true, + "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/@walletconnect/utils/node_modules/uint8arrays": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", + "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", + "peer": true, + "dependencies": { + "multiformats": "^9.4.2" + } + }, + "node_modules/@walletconnect/window-getters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-getters/-/window-getters-1.0.1.tgz", + "integrity": "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/@walletconnect/window-metadata": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz", + "integrity": "sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@walletconnect/window-getters": "^1.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/abort-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz", + "integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/abortable-iterator": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-5.1.0.tgz", + "integrity": "sha512-a3nRG0GOGw3IPFA2hdhrZU+QuD3mA6i+5f4YM/Obe+D5lYccxScI32rAIHAW5ttFV7+beiof09gHav4qUEZDwg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "get-iterator": "^2.0.0", + "it-stream-types": "^2.0.1" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-signal": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz", + "integrity": "sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/as-table": { + "version": "1.0.55", + "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", + "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "printable-characters": "^1.0.42" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blake3-wasm": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", + "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", + "dev": true, + "license": "MIT" + }, + "node_modules/blockstore-core": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/blockstore-core/-/blockstore-core-4.4.1.tgz", + "integrity": "sha512-peXfL9ZLx1cb84QALocMjhT8CsQ4JsreI/AitlN1inipSdC/G+jcYVJCqeCD5ecSTv/0LMpg8NlAPH/eBYZLjA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/logger": "^4.0.6", + "err-code": "^3.0.1", + "interface-blockstore": "^5.0.0", + "interface-store": "^5.0.0", + "it-drain": "^3.0.5", + "it-filter": "^3.0.4", + "it-merge": "^3.0.3", + "it-pushable": "^3.2.3", + "multiformats": "^13.0.1" + } + }, + "node_modules/blockstore-core/node_modules/@libp2p/interface": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.7.0.tgz", + "integrity": "sha512-/zFyaIaIGW0aihhsH7/93vQdpWInUzFocxF11RO/029Y6h0SVjs24HHbils+DqaFDTqN+L7oNlBx2rM2MnmTjA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.2.3", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.1", + "multiformats": "^13.1.0", + "progress-events": "^1.0.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/blockstore-core/node_modules/@libp2p/logger": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.20.tgz", + "integrity": "sha512-TTh2dhHsOTAlMPxSa9ncFPHa/0jTt+0AQxwHdlxg/OGLAgc9VRhnrhHUbJZp07Crcw4T/MOfS4KhjlxgqYgJRw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^1.7.0", + "@multiformats/multiaddr": "^12.2.3", + "interface-datastore": "^8.2.11", + "multiformats": "^13.1.0", + "weald": "^1.0.2" + } + }, + "node_modules/blockstore-core/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/browser-readablestream-to-it": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.9.tgz", + "integrity": "sha512-f/yOqsXAC1tTJuq4vK1JSGLDTlK08XxTAAzoM5ePJhddySkI1yh/VjNoo0LACxwy+M1PV1xvD1OBJdToZ877ew==", + "license": "Apache-2.0 OR MIT" + }, + "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" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/cborg": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.2.11.tgz", + "integrity": "sha512-7gs3iaqtsD9OHowgqzc6ixQGwSBONqosVR2co0Bg0pARgrLap+LCcEIXJuuIz2jHy0WWQeDMFPEsU2r17I2XPQ==", + "license": "Apache-2.0", + "bin": { + "cborg": "lib/bin.js" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "peer": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/concurrently": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.1.2.tgz", + "integrity": "sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-es": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz", + "integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==", + "license": "MIT", + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crossws": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/crossws/-/crossws-0.3.5.tgz", + "integrity": "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==", + "license": "MIT", + "peer": true, + "dependencies": { + "uncrypto": "^0.1.3" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", + "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", + "dev": true, + "license": "MIT" + }, + "node_modules/datastore-core": { + "version": "9.2.9", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-9.2.9.tgz", + "integrity": "sha512-wraWTPsbtdE7FFaVo3pwPuTB/zXsgwGGAm8BgBYwYAuzZCTS0MfXmd/HH1vR9s0/NFFjOVmBkGiWCvKxZ+QjVw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/logger": "^4.0.6", + "err-code": "^3.0.1", + "interface-datastore": "^8.0.0", + "interface-store": "^5.0.0", + "it-drain": "^3.0.5", + "it-filter": "^3.0.4", + "it-map": "^3.0.5", + "it-merge": "^3.0.3", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-sort": "^3.0.4", + "it-take": "^3.0.4" + } + }, + "node_modules/datastore-core/node_modules/@libp2p/interface": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-1.7.0.tgz", + "integrity": "sha512-/zFyaIaIGW0aihhsH7/93vQdpWInUzFocxF11RO/029Y6h0SVjs24HHbils+DqaFDTqN+L7oNlBx2rM2MnmTjA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^12.2.3", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.1", + "multiformats": "^13.1.0", + "progress-events": "^1.0.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/datastore-core/node_modules/@libp2p/logger": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.20.tgz", + "integrity": "sha512-TTh2dhHsOTAlMPxSa9ncFPHa/0jTt+0AQxwHdlxg/OGLAgc9VRhnrhHUbJZp07Crcw4T/MOfS4KhjlxgqYgJRw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^1.7.0", + "@multiformats/multiaddr": "^12.2.3", + "interface-datastore": "^8.2.11", + "multiformats": "^13.1.0", + "weald": "^1.0.2" + } + }, + "node_modules/datastore-core/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/default-gateway": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-7.2.2.tgz", + "integrity": "sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^7.1.1" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "license": "MIT" + }, + "node_modules/delay": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", + "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==", + "license": "MIT", + "peer": true + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "license": "MIT", + "peer": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/event-iterator": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/event-iterator/-/event-iterator-2.0.0.tgz", + "integrity": "sha512-KGft0ldl31BZVV//jj+IAIGCxkvvUkkON+ScH6zfoX+l+omX6001ggyRSpI0Io2Hlro0ThXotswCtfzS8UkIiQ==", + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit-hook": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", + "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/exsolve": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", + "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/freeport-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-promise/-/freeport-promise-2.0.0.tgz", + "integrity": "sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz", + "integrity": "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg==", + "license": "MIT" + }, + "node_modules/get-source": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", + "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "data-uri-to-buffer": "^2.0.0", + "source-map": "^0.6.1" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/h3": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.3.tgz", + "integrity": "sha512-z6GknHqyX0h9aQaTx22VZDf6QyZn+0Nh+Ym8O/u0SGSkyF5cuTJYKlc8MkzW3Nzf9LE1ivcpmYC3FUGpywhuUQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "cookie-es": "^1.2.2", + "crossws": "^0.3.4", + "defu": "^6.1.4", + "destr": "^2.0.5", + "iron-webcrypto": "^1.2.1", + "node-mock-http": "^1.0.0", + "radix3": "^1.1.2", + "ufo": "^1.6.1", + "uncrypto": "^0.1.3" + } + }, + "node_modules/hamt-sharding": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.6.tgz", + "integrity": "sha512-nZeamxfymIWLpVcAN0CRrb7uVq3hCOGj9IcL6NMA6VVCVWqj+h9Jo/SmaWuS92AEDf1thmHsM5D5c70hM3j2Tg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "sparse-array": "^1.3.1", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/hamt-sharding/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/hamt-sharding/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hashlru": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", + "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==", + "license": "MIT" + }, + "node_modules/helia": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/helia/-/helia-2.1.0.tgz", + "integrity": "sha512-OJOm99WYZC7o3hGRhv2rbWK6nDw2cRWx2+g6uMDF5YL04yZ2vZcE/8xccM3ekhrZFSJhbUGPID4AKGULIaxHbg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/libp2p-gossipsub": "^10.0.0", + "@chainsafe/libp2p-noise": "^13.0.0", + "@chainsafe/libp2p-yamux": "^5.0.0", + "@helia/delegated-routing-v1-http-api-client": "^1.1.0", + "@helia/interface": "^2.1.0", + "@ipld/dag-cbor": "^9.0.0", + "@ipld/dag-json": "^10.0.1", + "@ipld/dag-pb": "^4.0.3", + "@libp2p/bootstrap": "^9.0.2", + "@libp2p/interface": "^0.1.1", + "@libp2p/kad-dht": "^10.0.2", + "@libp2p/logger": "^3.0.1", + "@libp2p/mdns": "^9.0.2", + "@libp2p/mplex": "^9.0.2", + "@libp2p/tcp": "^8.0.2", + "@libp2p/webrtc": "^3.1.3", + "@libp2p/websockets": "^7.0.2", + "@libp2p/webtransport": "^3.0.3", + "any-signal": "^4.1.1", + "blockstore-core": "^4.0.0", + "cborg": "^4.0.1", + "datastore-core": "^9.0.0", + "interface-blockstore": "^5.0.0", + "interface-datastore": "^8.0.0", + "interface-store": "^5.0.1", + "ipfs-bitswap": "^19.0.0", + "ipns": "^7.0.1", + "it-all": "^3.0.2", + "it-drain": "^3.0.1", + "it-filter": "^3.0.1", + "it-foreach": "^2.0.2", + "libp2p": "^0.46.6", + "mortice": "^3.0.1", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "p-queue": "^7.3.4", + "progress-events": "^1.0.0", + "uint8arrays": "^4.0.3" + } + }, + "node_modules/helia/node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/helia/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/idb-keyval": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/idb-keyval/-/idb-keyval-6.2.2.tgz", + "integrity": "sha512-yjD9nARJ/jb1g+CvD0tlhUHOrJ9Sy0P8T9MF3YaLlHnSRpwPfpTX0XIvpmw3gAJUmEu3FiICLBDPXVwyEvrleg==", + "license": "Apache-2.0", + "peer": true + }, + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/interface-blockstore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.3.2.tgz", + "integrity": "sha512-oA9Pjkxun/JHAsZrYEyKX+EoPjLciTzidE7wipLc/3YoHDjzsnXRJzAzFJXNUvogtY4g7hIwxArx8+WKJs2RIg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^6.0.0", + "multiformats": "^13.3.6" + } + }, + "node_modules/interface-blockstore/node_modules/interface-store": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/interface-blockstore/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/interface-datastore": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.2.tgz", + "integrity": "sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^6.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/interface-datastore/node_modules/interface-store": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/interface-datastore/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/interface-datastore/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/interface-store": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-5.1.8.tgz", + "integrity": "sha512-7na81Uxkl0vqk0CBPO5PvyTkdaJBaezwUJGsMOz7riPOq0rJt+7W31iaopaMICWea/iykUsvNlPx/Tc+MxC3/w==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/ipfs-bitswap": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/ipfs-bitswap/-/ipfs-bitswap-19.0.2.tgz", + "integrity": "sha512-pm0EcnTAwMMkCmdXHw/a7uPXzQ4I/pxVFiQZ6Ebg/R64XxAky/bCOJRzmqsgqH0+prH2bXAOgzS0mOZdL+zFSw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^0.1.1", + "@libp2p/logger": "^3.0.1", + "@multiformats/multiaddr": "^12.1.0", + "@vascosantos/moving-average": "^1.1.0", + "any-signal": "^4.1.1", + "blockstore-core": "^4.0.0", + "events": "^3.3.0", + "interface-blockstore": "^5.0.0", + "interface-store": "^5.1.0", + "it-foreach": "^2.0.2", + "it-length-prefixed": "^9.0.0", + "it-map": "^3.0.2", + "it-pipe": "^3.0.1", + "it-take": "^3.0.1", + "just-debounce-it": "^3.0.1", + "multiformats": "^12.0.1", + "progress-events": "^1.0.0", + "protons-runtime": "^5.0.0", + "timeout-abort-controller": "^3.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.2", + "varint": "^6.0.0", + "varint-decoder": "^1.0.0" + } + }, + "node_modules/ipfs-unixfs": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz", + "integrity": "sha512-gUeeX63EFgiaMgcs0cUs2ZUPvlOeEZ38okjK8twdWGZX2jYd2rCk8k/TJ3DSRIDZ2t/aZMv6I23guxHaofZE3w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/ipfs-unixfs-exporter": { + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.6.2.tgz", + "integrity": "sha512-U3NkQHvQn5XzxtjSo1/GfoFIoXYY4hPgOlZG5RUrV5ScBI222b3jAHbHksXZuMy7sqPkA9ieeWdOmnG1+0nxyw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-cbor": "^9.2.1", + "@ipld/dag-json": "^10.2.2", + "@ipld/dag-pb": "^4.1.2", + "@multiformats/murmur3": "^2.1.8", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^5.3.0", + "ipfs-unixfs": "^11.0.0", + "it-filter": "^3.1.1", + "it-last": "^3.0.6", + "it-map": "^3.1.1", + "it-parallel": "^3.0.8", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "multiformats": "^13.2.3", + "p-queue": "^8.0.1", + "progress-events": "^1.0.1" + } + }, + "node_modules/ipfs-unixfs-exporter/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/ipfs-unixfs-importer": { + "version": "15.3.2", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.3.2.tgz", + "integrity": "sha512-12FqAAAE3YC6AHtYxZ944nDCabmvbNLdhNCVIN5RJIOri82ss62XdX4lsLpex9VvPzDIJyTAsrKJPcwM6hXGdQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-pb": "^4.1.2", + "@multiformats/murmur3": "^2.1.8", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^5.3.0", + "interface-store": "^6.0.0", + "ipfs-unixfs": "^11.0.0", + "it-all": "^3.0.6", + "it-batch": "^3.0.6", + "it-first": "^3.0.6", + "it-parallel-batch": "^3.0.6", + "multiformats": "^13.2.3", + "progress-events": "^1.0.1", + "rabin-wasm": "^0.1.5", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/ipfs-unixfs-importer/node_modules/interface-store": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/ipfs-unixfs-importer/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/ipfs-unixfs-importer/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/ipns": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/ipns/-/ipns-7.0.2.tgz", + "integrity": "sha512-jsrIgsCmFZL/kATuO+4N5Oy3b4xhnO42N39nCLyhhC8NM+SZIxTmZmUSDU0GoI8Vn0X/Zy2Sj3Lxbhg3UlVMUA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^2.0.3", + "@libp2p/interface": "^0.1.2", + "@libp2p/logger": "^3.0.2", + "@libp2p/peer-id": "^3.0.2", + "cborg": "^4.0.1", + "err-code": "^3.0.1", + "interface-datastore": "^8.1.0", + "multiformats": "^12.0.1", + "protons-runtime": "^5.0.0", + "timestamp-nano": "^1.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/ipns/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/ipns/node_modules/uint8arrays/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/iron-webcrypto": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz", + "integrity": "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/brc-dd" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-loopback-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", + "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==", + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT", + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/it-all": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.8.tgz", + "integrity": "sha512-TFAXqUjwuPFhyktbU7XIOjdvqjpc/c2xvDYfCrfHA6HP68+EQDCXuwGJ9YchvZTyXSaB2fkX3lI9aybcFUHWUw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-batch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.8.tgz", + "integrity": "sha512-sZPc1Wwtht3hzUcoPMTr5ByxPJ+y7ok3kAduxTslSnilGsR02aTNMc/wUrZlRHxyx6oWnjTrv1ASpSszguPumQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-batched-bytes": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/it-batched-bytes/-/it-batched-bytes-2.0.9.tgz", + "integrity": "sha512-JMemcPthyk3TVe3wjiay+9UJNSc2smIqONj9i59HEYz57UbGNj5HVSM9kscd91vf6b5MkSBrIwr6x32PHHZCOg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-byte-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-1.1.1.tgz", + "integrity": "sha512-OIOb8PvK9ZV7MHvyxIDNyN3jmrxrJdx99G0RIYYb3Tzo1OWv+O1C6mfg7nnlDuuTQz2POYFXe87AShKAEl+POw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-queueless-pushable": "^1.0.0", + "it-stream-types": "^2.0.2", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-drain": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.9.tgz", + "integrity": "sha512-HKy+UVYAqSFm+naEkNg14BwKymjHK0SxYLi8H5nACTIgbemDMZ4SNa2omzMUuk2Nu3jhaHMoqUJfZ0aBcdn4oA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-filter": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.3.tgz", + "integrity": "sha512-jicHnWmWdRj9NpznADvidoc/9Vlte/Bv+bg/Amf/Zc3U8iovSQMPB0aZSqOSjXGe5KXQuau5poocOFyyiP+RTg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-first": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.8.tgz", + "integrity": "sha512-neaRRwOMCmMKkXJVZ4bvUDVlde+Xh0aTWr7hFaOZeDXzbctGVV/WHmPVqBqy3RjlsP7eRM0vcqNtlM8hivcmGw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-foreach": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.3.tgz", + "integrity": "sha512-QfrD0Sjv0Uy664huiZevAgY1UEsJ1GlmPpjwy38vjSi4rCmdGkO7ef/KKG86ZXd9j+j1bXXGnfDLjCs7lU8A0A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-glob": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-2.0.7.tgz", + "integrity": "sha512-FjL2rAsGu566sMVKexFG5ciDoKoi1lgwXlSE6DW0yVbGRyvrlzi0OQ3fbfrw89dpIAzJFHnLNQwZS4yRkt3d/Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "minimatch": "^9.0.4" + } + }, + "node_modules/it-handshake": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/it-handshake/-/it-handshake-4.1.3.tgz", + "integrity": "sha512-V6Lt9A9usox9iduOX+edU1Vo94E6v9Lt9dOvg3ubFaw1qf5NCxXLi93Ao4fyCHWDYd8Y+DUhadwNtWVyn7qqLg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-pushable": "^3.1.0", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-last": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.8.tgz", + "integrity": "sha512-sdzoMeMAIJmRucZTnRd1GTtcoGV2EAS81fXfRKCVLviEX1wcvHhE43G0b/aKFFPc6ypuHWZR8vxaoHtDz/6b/A==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.8.tgz", + "integrity": "sha512-CkmQq8/EVUa0ATASKdKfKEMLfmqegGvMjZSRgQtbK4g1VkuRW0lLYC/snMjze7/o3ydSIVO7KHV5rjm1jnP9FA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length-prefixed": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.1.1.tgz", + "integrity": "sha512-O88nBweT6M9ozsmok68/auKH7ik/slNM4pYbM9lrfy2z5QnpokW5SlrepHZDKtN71llhG2sZvd6uY4SAl+lAQg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-length-prefixed-stream": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-1.2.1.tgz", + "integrity": "sha512-FYqlxc2toUoK+aPO5r3KDBIUG1mOvk2DzmjQcsfLUTHRWMJP4Va9855tVzg/22Bj+VUUaT7gxBg7HmbiCxTK4w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-byte-stream": "^1.0.0", + "it-stream-types": "^2.0.2", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-length-prefixed/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length-prefixed/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/it-map": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.3.tgz", + "integrity": "sha512-BAdTuPN/Ie5K4pKLShqyLGBvkLSPtraYXBrX8h+Ki1CZQI8o0dOcaLewISLTXmEJsOHcAjkwxJsVwxND4/Rkpg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-merge": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.11.tgz", + "integrity": "sha512-7Kzf/XN1jFlhXRfeDoHeBlgmMv/zOv+ji2LXEN6hsIlW2S/8PRjw+4s4dZbtFd+u5Pk7li+2Hd+a/NHwsqT0iQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-queueless-pushable": "^2.0.0" + } + }, + "node_modules/it-merge/node_modules/it-queueless-pushable": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.1.tgz", + "integrity": "sha512-ZFX4ZHpzPwD0Ivpt3y98FtXk/KToO0ec5AjUDBQ4MOdkWVmnjEBfjq6ncvpuGtZ3776KSSK+i6uWkrSspdo/OQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "p-defer": "^4.0.1", + "race-signal": "^1.1.3" + } + }, + "node_modules/it-ndjson": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/it-ndjson/-/it-ndjson-1.1.3.tgz", + "integrity": "sha512-HQTTCY1mi651Qz6Ijss1GtammSnPSN+MXzpXcD6RvytG2xJlMxD95RlKQP5JAE8jZtfSugGRUf9geXai7DuNBQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-pair": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/it-pair/-/it-pair-2.0.6.tgz", + "integrity": "sha512-5M0t5RAcYEQYNG5BV7d7cqbdwbCAp5yLdzvkxsZmkuZsLbTdZzah6MQySYfaAQjNDCq6PUnDt0hqBZ4NwMfW6g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.1", + "p-defer": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-parallel": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.11.tgz", + "integrity": "sha512-ABHAwLO6RMB9zBKUN1v7pJWupwGaMkUrtGNnygDqog5yB8PjyKWxUKLwca1OHuZrdnkOx0VzETEXMSzWrzX8bw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.1" + } + }, + "node_modules/it-parallel-batch": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.8.tgz", + "integrity": "sha512-FWKdzfPNfUgE7DdHWPGPfRHXhFkx427F5rKHCM1DpN0ALsMdi/lhVOIhI7kNHoQwzYz/bFpPLCCA8BgnOcznXA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-batch": "^3.0.0" + } + }, + "node_modules/it-peekable": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.7.tgz", + "integrity": "sha512-w9W0WzNCsHLctV0z6vAA6N3jPgJu0qZZVlhngS+L29Rdva940f4Ea4ubtEXXYVBbq3l9Woo1MdWLGiEXzQDtdg==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-pipe": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-protobuf-stream": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-1.1.6.tgz", + "integrity": "sha512-TxqgDHXTBt1XkYhrGKP8ubNsYD4zuTClSg6S1M0xTPsskGKA4nPFOGM60zrkh4NMB1Wt3EnsqM5U7kXkx60EXQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-length-prefixed-stream": "^1.0.0", + "it-stream-types": "^2.0.2", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-pushable": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.0" + } + }, + "node_modules/it-queueless-pushable": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-1.0.2.tgz", + "integrity": "sha512-BFIm48C4O8+i+oVEPQpZ70+CaAsVUircvZtZCrpG2Q64933aLp+tDmas1mTBwqVBfIUUlg09d+e6SWW1CBuykQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.1", + "race-signal": "^1.1.3" + } + }, + "node_modules/it-reader": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz", + "integrity": "sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-sort": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.8.tgz", + "integrity": "sha512-RP0jzwaG9vrCFEpBNW8INOJ0Z2rv+2YXZ2jFICJbtP9BXL/qLWJ/TCgOF3+4hPCJK8g2czDtA55K9DuAJ+Ghsg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-all": "^3.0.0" + } + }, + "node_modules/it-stream-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz", + "integrity": "sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-take": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.8.tgz", + "integrity": "sha512-avNX5LYv+eUh80eOgCAB+Drg9m1qTt06hpC5w0hc/AVaCFzG5FIJ8dAzPYVzQoq5p7l7hXg1Inoj2RTHJRqCGA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-to-buffer": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/it-to-buffer/-/it-to-buffer-4.0.9.tgz", + "integrity": "sha512-NJbd5SHCf5p3+6DMcPKCVnVj+wh4pCI2ugtxfurmkNUItNbZLGzmzJ7Q68N5xytQaH1qd/0lNbDGcXHIc0n9oA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arrays": "^5.1.0" + } + }, + "node_modules/it-to-buffer/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-to-buffer/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/it-ws": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/it-ws/-/it-ws-6.1.5.tgz", + "integrity": "sha512-uWjMtpy5HqhSd/LlrlP3fhYrr7rUfJFFMABv0F5d6n13Q+0glhZthwUKpEAVhDrXY95Tb1RB5lLqqef+QbVNaw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@types/ws": "^8.2.2", + "event-iterator": "^2.0.0", + "it-stream-types": "^2.0.1", + "uint8arrays": "^5.0.0", + "ws": "^8.4.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-ws/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-ws/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/it-ws/node_modules/ws": { + "version": "8.18.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz", + "integrity": "sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==", + "license": "MIT", + "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/just-debounce-it": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/just-debounce-it/-/just-debounce-it-3.2.0.tgz", + "integrity": "sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ==", + "license": "MIT" + }, + "node_modules/keyvaluestorage-interface": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz", + "integrity": "sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==", + "license": "MIT", + "peer": true + }, + "node_modules/libp2p": { + "version": "0.46.21", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.46.21.tgz", + "integrity": "sha512-p/3vCpw+ciizhlBofpzuez+4Fs8EeVFaVQZUQPwnQwycuOFcWLBhcqkOtv4KlqImFKOk+9TuyW1Xofjmr/wPnA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/nat-port-mapper": "^1.0.9", + "@libp2p/crypto": "^2.0.8", + "@libp2p/interface": "^0.1.6", + "@libp2p/interface-internal": "^0.1.9", + "@libp2p/keychain": "^3.0.8", + "@libp2p/logger": "^3.1.0", + "@libp2p/multistream-select": "^4.0.6", + "@libp2p/peer-collections": "^4.0.8", + "@libp2p/peer-id": "^3.0.6", + "@libp2p/peer-id-factory": "^3.0.8", + "@libp2p/peer-record": "^6.0.9", + "@libp2p/peer-store": "^9.0.9", + "@libp2p/utils": "^4.0.7", + "@multiformats/mafmt": "^12.1.2", + "@multiformats/multiaddr": "^12.1.5", + "@multiformats/multiaddr-matcher": "^1.0.0", + "any-signal": "^4.1.1", + "datastore-core": "^9.0.1", + "delay": "^6.0.0", + "interface-datastore": "^8.2.0", + "it-all": "^3.0.2", + "it-drain": "^3.0.2", + "it-filter": "^3.0.1", + "it-first": "^3.0.1", + "it-handshake": "^4.1.3", + "it-length-prefixed": "^9.0.1", + "it-map": "^3.0.3", + "it-merge": "^3.0.0", + "it-pair": "^2.0.6", + "it-parallel": "^3.0.0", + "it-pipe": "^3.0.1", + "it-protobuf-stream": "^1.0.0", + "it-stream-types": "^2.0.1", + "merge-options": "^3.0.4", + "multiformats": "^12.0.1", + "p-defer": "^4.0.0", + "p-queue": "^7.3.4", + "p-retry": "^6.0.0", + "private-ip": "^3.0.0", + "protons-runtime": "^5.0.0", + "rate-limiter-flexible": "^3.0.0", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^4.0.6", + "wherearewe": "^2.0.1", + "xsalsa20": "^1.1.0" + } + }, + "node_modules/libp2p/node_modules/p-queue": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz", + "integrity": "sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^5.0.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/libp2p/node_modules/p-timeout": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", + "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT", + "peer": true + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC", + "peer": true + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/miniflare": { + "version": "4.20250523.0", + "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250523.0.tgz", + "integrity": "sha512-g4F1AC5xi66rB2eQNo2Fx7EffaXhMdgUSRl/ivgb4LMALMpxghG98oC4twqVwDLWIFSVFjtL1YEuYrPO8044mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.8.1", + "acorn": "8.14.0", + "acorn-walk": "8.3.2", + "exit-hook": "2.2.1", + "glob-to-regexp": "0.4.1", + "sharp": "^0.33.5", + "stoppable": "1.1.0", + "undici": "^5.28.5", + "workerd": "1.20250523.0", + "ws": "8.18.0", + "youch": "3.3.4", + "zod": "3.22.3" + }, + "bin": { + "miniflare": "bootstrap.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/miniflare/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "license": "MIT", + "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/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/mortice": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.0.6.tgz", + "integrity": "sha512-xUjsTQreX8rO3pHuGYDZ3PY/sEiONIzqzjLeog5akdY4bz9TlDDuvYlU8fm+6qnm4rnpa6AFxLhsfSBThLijdA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "observable-webworkers": "^2.0.1", + "p-queue": "^8.0.1", + "p-timeout": "^6.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "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", + "license": "MIT", + "dependencies": { + "@multiformats/base-x": "^4.0.1" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multiformats": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", + "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/multihashes": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-4.0.3.tgz", + "integrity": "sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA==", + "license": "MIT", + "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/node_modules/multiformats": { + "version": "9.9.0", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/murmurhash3js-revisited": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz", + "integrity": "sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/node-abi": { + "version": "3.75.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", + "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-datachannel": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/node-datachannel/-/node-datachannel-0.5.5.tgz", + "integrity": "sha512-B0MS/iK0qjCiNY5Go4055zuRCOuiFkOrhNOZuj2PAnaJN7YlnKxKidOLhLXf/lAcsJQXgj8BR31zsqJKKA16jA==", + "hasInstallScript": true, + "license": "MPL 2.0", + "dependencies": { + "node-domexception": "^2.0.1", + "prebuild-install": "^7.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/node-domexception": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-2.0.2.tgz", + "integrity": "sha512-Qf9vHK9c5MGgUXj8SnucCIS4oEPuUstjRaMplLGeZpbWMfNV1rvEcXuwoXfN51dUfD1b4muPHPQtCx/5Dj/QAA==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==", + "license": "MIT", + "peer": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-mock-http": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-mock-http/-/node-mock-http-1.0.0.tgz", + "integrity": "sha512-0uGYQ1WQL1M5kKvGRXWQ3uZCHtLTO8hln3oBjIusM75WoesZ909uQJs/Hb946i2SS+Gsrhkaa6iAO17jRIv6DQ==", + "license": "MIT", + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/observable-webworkers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/observable-webworkers/-/observable-webworkers-2.0.1.tgz", + "integrity": "sha512-JI1vB0u3pZjoQKOK1ROWzp0ygxSi7Yb0iR+7UNsw4/Zn4cQ0P3R7XL38zac/Dy2tEA7Lg88/wIJTjF8vYXZ0uw==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/ofetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", + "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", + "license": "MIT", + "peer": true, + "dependencies": { + "destr": "^2.0.3", + "node-fetch-native": "^1.6.4", + "ufo": "^1.5.4" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "license": "MIT", + "peer": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-defer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", + "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.0.tgz", + "integrity": "sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", + "license": "MIT", + "peer": true + }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "license": "MIT" + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/printable-characters": { + "version": "1.0.42", + "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", + "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/private-ip": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-3.0.2.tgz", + "integrity": "sha512-2pkOVPGYD/4QyAg95c6E/4bLYXPthT5Xw4ocXYzIIsMBhskOMn6IwkWXmg6ZiA6K58+O6VD/n02r1hDhk7vDPw==", + "license": "MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "ip-regex": "^5.0.0", + "ipaddr.js": "^2.1.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "license": "MIT", + "peer": true + }, + "node_modules/progress-events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz", + "integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protons-runtime": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz", + "integrity": "sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/protons-runtime/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/protons-runtime/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "license": "MIT", + "peer": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "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/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT", + "peer": true + }, + "node_modules/rabin-wasm": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", + "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", + "license": "MIT", + "dependencies": { + "@assemblyscript/loader": "^0.9.4", + "bl": "^5.0.0", + "debug": "^4.3.1", + "minimist": "^1.2.5", + "node-fetch": "^2.6.1", + "readable-stream": "^3.6.0" + }, + "bin": { + "rabin-wasm": "cli/bin.js" + } + }, + "node_modules/race-signal": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/race-signal/-/race-signal-1.1.3.tgz", + "integrity": "sha512-Mt2NznMgepLfORijhQMncE26IhkmjEphig+/1fKC0OtaKwys/gpvpmswSjoN01SS+VO951mj0L4VIDXdXsjnfA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/radix3": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz", + "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==", + "license": "MIT", + "peer": true + }, + "node_modules/rate-limiter-flexible": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/rate-limiter-flexible/-/rate-limiter-flexible-3.0.6.tgz", + "integrity": "sha512-tlvbee6lyse/XTWmsuBDS4MT8N65FyM151bPmQlFyfhv9+RIHs7d3rSTXoz0j35H910dM01mH0yTIeWYo8+aAw==", + "license": "ISC" + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/retimer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz", + "integrity": "sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==", + "license": "MIT" + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "license": "MIT", + "peer": true, + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/sonr-cosmes": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/sonr-cosmes/-/sonr-cosmes-0.0.5.tgz", + "integrity": "sha512-P5hitnxWm7fjreEGZYV9omC9vtdqQUZfzckD8oxQ1LNbgoXBeVLvuGs2hy+GtuUzuw9ABYWW1rX7KBoa5BTeTA==", + "peerDependencies": { + "@bufbuild/protobuf": "1.2.0", + "@noble/hashes": "^1.3.2", + "@noble/secp256k1": "^2.0.0", + "@scure/base": "^1.1.3", + "@scure/bip32": "^1.3.2", + "@scure/bip39": "^1.2.1", + "@walletconnect/legacy-client": "^2.0.0", + "@walletconnect/sign-client": "2.8.6", + "lodash-es": "^4.17.21" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sparse-array": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", + "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stacktracey": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", + "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "as-table": "^1.0.36", + "get-source": "^2.0.12" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "license": "MIT", + "peer": true + }, + "node_modules/stream-to-it": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz", + "integrity": "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==", + "license": "MIT", + "dependencies": { + "get-iterator": "^1.0.2" + } + }, + "node_modules/stream-to-it/node_modules/get-iterator": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz", + "integrity": "sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tar-fs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "license": "MIT", + "peer": true, + "dependencies": { + "real-require": "^0.1.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/timeout-abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", + "license": "MIT", + "dependencies": { + "retimer": "^3.0.0" + } + }, + "node_modules/timestamp-nano": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.1.tgz", + "integrity": "sha512-4oGOVZWTu5sl89PtCDnhQBSt7/vL1zVEwAfxH1p49JhTosxzVQWYBYFRFZ8nJmo0G6f824iyP/44BFAwIoKvIA==", + "license": "MIT", + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD", + "peer": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/uint8-varint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/uint8-varint/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/uint8-varint/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/uint8arraylist": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arrays": "^5.0.1" + } + }, + "node_modules/uint8arraylist/node_modules/multiformats": { + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/uint8arraylist/node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/uint8arrays": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", + "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^12.0.1" + } + }, + "node_modules/uncrypto": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", + "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==", + "license": "MIT", + "peer": true + }, + "node_modules/undici": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", + "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" + }, + "node_modules/unenv": { + "version": "2.0.0-rc.17", + "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.17.tgz", + "integrity": "sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defu": "^6.1.4", + "exsolve": "^1.0.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "ufo": "^1.6.1" + } + }, + "node_modules/unstorage": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.16.0.tgz", + "integrity": "sha512-WQ37/H5A7LcRPWfYOrDa1Ys02xAbpPJq6q5GkO88FBXVSQzHd7+BjEwfRqyaSWCv9MbsJy058GWjjPjcJ16GGA==", + "license": "MIT", + "peer": true, + "dependencies": { + "anymatch": "^3.1.3", + "chokidar": "^4.0.3", + "destr": "^2.0.5", + "h3": "^1.15.2", + "lru-cache": "^10.4.3", + "node-fetch-native": "^1.6.6", + "ofetch": "^1.4.1", + "ufo": "^1.6.1" + }, + "peerDependencies": { + "@azure/app-configuration": "^1.8.0", + "@azure/cosmos": "^4.2.0", + "@azure/data-tables": "^13.3.0", + "@azure/identity": "^4.6.0", + "@azure/keyvault-secrets": "^4.9.0", + "@azure/storage-blob": "^12.26.0", + "@capacitor/preferences": "^6.0.3 || ^7.0.0", + "@deno/kv": ">=0.9.0", + "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0", + "@planetscale/database": "^1.19.0", + "@upstash/redis": "^1.34.3", + "@vercel/blob": ">=0.27.1", + "@vercel/kv": "^1.0.1", + "aws4fetch": "^1.0.20", + "db0": ">=0.2.1", + "idb-keyval": "^6.2.1", + "ioredis": "^5.4.2", + "uploadthing": "^7.4.4" + }, + "peerDependenciesMeta": { + "@azure/app-configuration": { + "optional": true + }, + "@azure/cosmos": { + "optional": true + }, + "@azure/data-tables": { + "optional": true + }, + "@azure/identity": { + "optional": true + }, + "@azure/keyvault-secrets": { + "optional": true + }, + "@azure/storage-blob": { + "optional": true + }, + "@capacitor/preferences": { + "optional": true + }, + "@deno/kv": { + "optional": true + }, + "@netlify/blobs": { + "optional": true + }, + "@planetscale/database": { + "optional": true + }, + "@upstash/redis": { + "optional": true + }, + "@vercel/blob": { + "optional": true + }, + "@vercel/kv": { + "optional": true + }, + "aws4fetch": { + "optional": true + }, + "db0": { + "optional": true + }, + "idb-keyval": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "uploadthing": { + "optional": true + } + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "license": "MIT" + }, + "node_modules/varint-decoder": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/varint-decoder/-/varint-decoder-1.0.0.tgz", + "integrity": "sha512-JkOvdztASWGUAsXshCFHrB9f6AgR2Q8W08CEyJ+43b1qtFocmI8Sp1R/M0E/hDOY2FzVIqk63tOYLgDYWuJ7IQ==", + "license": "MIT", + "dependencies": { + "varint": "^5.0.0" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/varint-decoder/node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "license": "MIT" + }, + "node_modules/weald": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz", + "integrity": "sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "ms": "^3.0.0-canary.1", + "supports-color": "^9.4.0" + } + }, + "node_modules/weald/node_modules/ms": { + "version": "3.0.0-canary.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz", + "integrity": "sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g==", + "license": "MIT", + "engines": { + "node": ">=12.13" + } + }, + "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==", + "license": "BSD-2-Clause" + }, + "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==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wherearewe": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz", + "integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.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==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerd": { + "version": "1.20250523.0", + "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250523.0.tgz", + "integrity": "sha512-OClsq9ZzZZNdkY8/JTBjf+/A6F1q/SOn3/RQWCR0kDoclxecHS6Nq80jY6NP0ubJBKnqrUggA9WOWBgwWWOGUA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "workerd": "bin/workerd" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "@cloudflare/workerd-darwin-64": "1.20250523.0", + "@cloudflare/workerd-darwin-arm64": "1.20250523.0", + "@cloudflare/workerd-linux-64": "1.20250523.0", + "@cloudflare/workerd-linux-arm64": "1.20250523.0", + "@cloudflare/workerd-windows-64": "1.20250523.0" + } + }, + "node_modules/wrangler": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.17.0.tgz", + "integrity": "sha512-FIOriw2Z7aNALAtnt4hTojDuU44n8pGJl62id0ig0s45Mej/Clg07vpmz+QCLTT7huiaSSyA1wthYOwtp0+K6A==", + "dev": true, + "license": "MIT OR Apache-2.0", + "dependencies": { + "@cloudflare/kv-asset-handler": "0.4.0", + "@cloudflare/unenv-preset": "2.3.2", + "blake3-wasm": "2.1.5", + "esbuild": "0.25.4", + "miniflare": "4.20250523.0", + "path-to-regexp": "6.3.0", + "unenv": "2.0.0-rc.17", + "workerd": "1.20250523.0" + }, + "bin": { + "wrangler": "bin/wrangler.js", + "wrangler2": "bin/wrangler.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@cloudflare/workers-types": "^4.20250523.0" + }, + "peerDependenciesMeta": { + "@cloudflare/workers-types": { + "optional": true + } + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "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/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xsalsa20": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", + "integrity": "sha512-FIr/DEeoHfj7ftfylnoFt3rAIRoWXpx2AoDfrT2qD2wtp7Dp+COajvs/Icb7uHqRW9m60f5iXZwdsJJO3kvb7w==", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/youch": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.4.tgz", + "integrity": "sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cookie": "^0.7.1", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" + } + }, + "node_modules/zod": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", + "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/cmd/worker/package.json b/cmd/worker/package.json new file mode 100644 index 0000000..2d10986 --- /dev/null +++ b/cmd/worker/package.json @@ -0,0 +1,23 @@ +{ + "name": "@sonr-io/motr-worker", + "version": "0.0.1", + "private": true, + "scripts": { + "deploy": "wrangler deploy", + "start": "wrangler dev" + }, + "dependencies": { + "@extism/extism": "^2.0.0-rc11", + "@helia/dag-cbor": "^1.0.1", + "@helia/dag-json": "^1.0.1", + "@helia/json": "^1.0.1", + "@helia/strings": "^1.0.1", + "@helia/unixfs": "^1.4.1", + "helia": "^2.1.0", + "sonr-cosmes": "^0.0.5" + }, + "devDependencies": { + "concurrently": "^9.1.2", + "wrangler": "^4.10.0" + } +} diff --git a/cmd/vault/worker.mjs b/cmd/worker/worker.mjs similarity index 100% rename from cmd/vault/worker.mjs rename to cmd/worker/worker.mjs diff --git a/cmd/vault/wrangler.toml b/cmd/worker/wrangler.toml similarity index 87% rename from cmd/vault/wrangler.toml rename to cmd/worker/wrangler.toml index c33796c..5c90ff3 100644 --- a/cmd/vault/wrangler.toml +++ b/cmd/worker/wrangler.toml @@ -1,21 +1,20 @@ # Top-level configuration -name = "motr-vault" -main = "./worker.mjs" +name = "motr-worker" +main = "worker.mjs" compatibility_date = "2025-04-14" routes = [ - { pattern = "did.run", custom_domain = true }, + { pattern = "sonr.id", custom_domain = true }, ] [build] -command = "npm run build" +command = "devbox run build:worker" [dev] port = 6969 [observability] enabled = true -logpush = true [[d1_databases]] binding = "DB" # available in your Worker on env.DB @@ -43,7 +42,6 @@ SONR_GRPC_URL = 'https://grpc.sonr.land' MATRIX_SERVER = 'https://bm.chat' MOTR_GATEWAY = 'https://sonr.id' MOTR_VAULT = 'https://did.run' -MOTR_MODE = 'controller' [durable_objects] bindings = [{name = "VAULT", class_name = "Vault"}] diff --git a/config/config.go b/config/config.go new file mode 100644 index 0000000..b3840c4 --- /dev/null +++ b/config/config.go @@ -0,0 +1,69 @@ +//go:build js && wasm +// +build js,wasm + +package config + +import ( + "time" + + "github.com/syumai/workers/cloudflare" +) + +type Config struct { + Cache CacheSettings `json:"cache"` // Added Cache configuration + Sonr NetworkParams `json:"network"` + DefaultExpiry time.Duration `json:"expiry"` +} + +type NetworkParams struct { + SonrChainID string `json:"sonr_chain_id"` + SonrAPIURL string `json:"sonr_api_url"` + SonrRPCURL string `json:"sonr_rpc_url"` + IPFSGateway string `json:"ipfs_gateway"` +} + +// CacheSettings defines the configuration for Cloudflare cache +type CacheSettings struct { + Enabled bool `json:"enabled"` + DefaultMaxAge int `json:"default_max_age"` + BypassHeader string `json:"bypass_header"` + BypassValue string `json:"bypass_value"` + CacheableStatusCodes []int `json:"cacheable_status_codes"` + CacheableContentTypes []string `json:"cacheable_content_types"` +} + +func Get() Config { + cache := CacheSettings{ + Enabled: true, + DefaultMaxAge: 60, // 1 minute by default + BypassHeader: "X-Cache-Bypass", + BypassValue: "true", + CacheableStatusCodes: []int{ + 200, 301, 302, + }, + CacheableContentTypes: []string{ + "text/html", + "text/css", + "text/javascript", + "application/javascript", + "application/json", + "image/jpeg", + "image/png", + "image/gif", + "image/webp", + }, + } + + sonr := NetworkParams{ + SonrChainID: cloudflare.Getenv("SONR_CHAIN_ID"), + SonrAPIURL: cloudflare.Getenv("SONR_API_URL"), + SonrRPCURL: cloudflare.Getenv("SONR_RPC_URL"), + IPFSGateway: cloudflare.Getenv("IPFS_GATEWAY"), + } + c := Config{ + Sonr: sonr, + Cache: cache, + DefaultExpiry: time.Hour * 1, + } + return c +} diff --git a/controllers/account/card.templ b/controllers/account/card.templ deleted file mode 100644 index 8e7efb6..0000000 --- a/controllers/account/card.templ +++ /dev/null @@ -1,48 +0,0 @@ -package account - -import "github.com/sonr-io/motr/sink/models" - -templ cardComponent(handle, addr, block, name string) { -
-
-
-
-

sonr-testnet-1

-

{ handle }

-
-
- -
-
-
- { addr } -
-
-
-

Block Created

-

#{ block }

-
-
-

Issued to

-

{ name }

-
-
-
-
-} - -// option is a single option in the dropdown -templ optionComponent(account models.Account) { -
- { account.Address } - -
-} - -// row is a single row in the list with a basic card -templ rowComponent(account models.Account) { -
- { account.Address } - -
-} diff --git a/controllers/account/card_templ.go b/controllers/account/card_templ.go deleted file mode 100644 index 2343b0a..0000000 --- a/controllers/account/card_templ.go +++ /dev/null @@ -1,180 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package account - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -import "github.com/sonr-io/motr/sink/models" - -func cardComponent(handle, addr, block, name string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

sonr-testnet-1

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var2 string - templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(handle) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/account/card.templ`, Line: 11, Col: 43} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(addr) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/account/card.templ`, Line: 18, Col: 42} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "

Block Created

#") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(block) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/account/card.templ`, Line: 23, Col: 47} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "

Issued to

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(name) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/account/card.templ`, Line: 27, Col: 32} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -// option is a single option in the dropdown -func optionComponent(account models.Account) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var6 := templ.GetChildren(ctx) - if templ_7745c5c3_Var6 == nil { - templ_7745c5c3_Var6 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var7 string - templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(account.Address) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/account/card.templ`, Line: 37, Col: 19} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -// row is a single row in the list with a basic card -func rowComponent(account models.Account) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var8 := templ.GetChildren(ctx) - if templ_7745c5c3_Var8 == nil { - templ_7745c5c3_Var8 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(account.Address) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/account/card.templ`, Line: 45, Col: 19} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/account/entity.go b/controllers/account/entity.go deleted file mode 100644 index 4f18603..0000000 --- a/controllers/account/entity.go +++ /dev/null @@ -1,63 +0,0 @@ -package account - -import ( - "strconv" - - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type AccountEntity interface { - GetModel() models.Account - GetCard() templ.Component - shortAddr() string -} - -type AccountsEntity interface { - GetModels() []models.Account - GetList() templ.Component - GetDropdown() templ.Component -} - -func NewAccountEntity(account models.Account) AccountEntity { - return &accountEntity{Account: account} -} - -func NewAccountsEntity(accounts []models.Account) AccountsEntity { - return &accountsEntity{Accounts: accounts} -} - -type accountEntity struct { - models.Account -} - -func (a *accountEntity) shortAddr() string { - if len(a.Address) <= 20 { - return a.Address - } - return a.Address[:16] + "..." + a.Address[len(a.Address)-4:] -} - -func (a *accountEntity) GetModel() models.Account { - return a.Account -} - -func (a *accountEntity) GetCard() templ.Component { - return cardComponent(a.Handle, a.shortAddr(), strconv.FormatInt(a.BlockCreated, 10), a.Label) -} - -type accountsEntity struct { - Accounts []models.Account -} - -func (a *accountsEntity) GetModels() []models.Account { - return a.Accounts -} - -func (a *accountsEntity) GetList() templ.Component { - return nil -} - -func (a *accountsEntity) GetDropdown() templ.Component { - return nil -} diff --git a/controllers/account/list.templ b/controllers/account/list.templ deleted file mode 100644 index 7025477..0000000 --- a/controllers/account/list.templ +++ /dev/null @@ -1,11 +0,0 @@ -package account - -templ listComponent(accounts AccountsEntity) { -
- for _,account := range accounts.GetModels() { -
- @rowComponent(account) -
- } -
-} diff --git a/controllers/account/list_templ.go b/controllers/account/list_templ.go deleted file mode 100644 index a6a39f3..0000000 --- a/controllers/account/list_templ.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package account - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func listComponent(accounts AccountsEntity) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - for _, account := range accounts.GetModels() { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = rowComponent(account).Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/account/queries.go b/controllers/account/queries.go deleted file mode 100644 index 1aece17..0000000 --- a/controllers/account/queries.go +++ /dev/null @@ -1,32 +0,0 @@ -package account - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetAccountByID(ctx context.Context, id string) (models.Account, error) - GetAccountByAddress(ctx context.Context, address string) (models.Account, error) - GetAccountByController(ctx context.Context, controller string) (models.Account, error) - GetAccountByPublicKey(ctx context.Context, publicKey string) (models.Account, error) - GetAccountByNumber(ctx context.Context, number int64) (models.Account, error) - GetAccountBySequence(ctx context.Context, sequence int64) (models.Account, error) - GetAccountsByChainID(ctx context.Context, chainID string) ([]models.Account, error) - GetAccountsByHandle(ctx context.Context, handle string) ([]models.Account, error) - GetAccountsByLabel(ctx context.Context, name string) ([]models.Account, error) - UpdateAccountLabel(ctx context.Context, arg models.UpdateAccountLabelParams) (models.Account, error) - UpdateAccountSequence(ctx context.Context, arg models.UpdateAccountSequenceParams) (models.Account, error) - SoftDeleteAccount(ctx context.Context, id string) error - ListValidatorAccounts(ctx context.Context) ([]models.Account, error) - ListDelegatorAccounts(ctx context.Context) ([]models.Account, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/account/select.templ b/controllers/account/select.templ deleted file mode 100644 index 1b5da87..0000000 --- a/controllers/account/select.templ +++ /dev/null @@ -1,11 +0,0 @@ -package account - -templ selectComponent(accounts AccountsEntity) { -
- for _,account := range accounts.GetModels() { -
- @optionComponent(account) -
- } -
-} diff --git a/controllers/account/select_templ.go b/controllers/account/select_templ.go deleted file mode 100644 index 86fe28a..0000000 --- a/controllers/account/select_templ.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package account - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func selectComponent(accounts AccountsEntity) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - for _, account := range accounts.GetModels() { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = optionComponent(account).Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/activity/card.templ b/controllers/activity/card.templ deleted file mode 100644 index 678b66e..0000000 --- a/controllers/activity/card.templ +++ /dev/null @@ -1,48 +0,0 @@ -package activity - -import "github.com/sonr-io/motr/sink/models" - -templ cardComponent(handle, addr, block, name string) { -
-
-
-
-

sonr-testnet-1

-

{ handle }

-
-
- -
-
-
- { addr } -
-
-
-

Block Created

-

#{ block }

-
-
-

Issued to

-

{ name }

-
-
-
-
-} - -// option is a single option in the dropdown -templ optionComponent(account models.Activity) { -
- { account.Status } - -
-} - -// row is a single row in the list with a basic card -templ rowComponent(account models.Activity) { -
- { account.Status } - -
-} diff --git a/controllers/activity/card_templ.go b/controllers/activity/card_templ.go deleted file mode 100644 index 809bda4..0000000 --- a/controllers/activity/card_templ.go +++ /dev/null @@ -1,180 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package activity - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -import "github.com/sonr-io/motr/sink/models" - -func cardComponent(handle, addr, block, name string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

sonr-testnet-1

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var2 string - templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(handle) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/activity/card.templ`, Line: 11, Col: 43} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(addr) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/activity/card.templ`, Line: 18, Col: 42} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "

Block Created

#") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var4 string - templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(block) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/activity/card.templ`, Line: 23, Col: 47} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "

Issued to

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var5 string - templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(name) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/activity/card.templ`, Line: 27, Col: 32} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -// option is a single option in the dropdown -func optionComponent(account models.Activity) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var6 := templ.GetChildren(ctx) - if templ_7745c5c3_Var6 == nil { - templ_7745c5c3_Var6 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var7 string - templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(account.Status) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/activity/card.templ`, Line: 37, Col: 18} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -// row is a single row in the list with a basic card -func rowComponent(account models.Activity) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var8 := templ.GetChildren(ctx) - if templ_7745c5c3_Var8 == nil { - templ_7745c5c3_Var8 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(account.Status) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `controllers/activity/card.templ`, Line: 45, Col: 18} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/activity/entity.go b/controllers/activity/entity.go deleted file mode 100644 index 38113b6..0000000 --- a/controllers/activity/entity.go +++ /dev/null @@ -1,16 +0,0 @@ -package activity - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type ActivityEntity interface { - GetModel() models.Activity - GetCard() templ.Component -} - -type ActivitiesEntity interface { - GetModels() []models.Activity - GetList() templ.Component -} diff --git a/controllers/activity/list.templ b/controllers/activity/list.templ deleted file mode 100644 index 2eb905e..0000000 --- a/controllers/activity/list.templ +++ /dev/null @@ -1,11 +0,0 @@ -package activity - -templ listComponent(accounts ActivitiesEntity) { -
- for _,account := range accounts.GetModels() { -
- @rowComponent(account) -
- } -
-} diff --git a/controllers/activity/list_templ.go b/controllers/activity/list_templ.go deleted file mode 100644 index 455d711..0000000 --- a/controllers/activity/list_templ.go +++ /dev/null @@ -1,58 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package activity - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func listComponent(accounts ActivitiesEntity) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - for _, account := range accounts.GetModels() { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = rowComponent(account).Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/activity/queries.go b/controllers/activity/queries.go deleted file mode 100644 index 5e1104a..0000000 --- a/controllers/activity/queries.go +++ /dev/null @@ -1,27 +0,0 @@ -package activity - -import ( - "context" - "database/sql" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetActivityByID(ctx context.Context, id string) (models.Activity, error) - GetActivityByTxHash(ctx context.Context, txHash sql.NullString) (models.Activity, error) - InsertActivity(ctx context.Context, arg models.InsertActivityParams) (models.Activity, error) - ListActivitiesByAccount(ctx context.Context, arg models.ListActivitiesByAccountParams) ([]models.Activity, error) - ListActivitiesByStatus(ctx context.Context, arg models.ListActivitiesByStatusParams) ([]models.Activity, error) - ListActivitiesByType(ctx context.Context, arg models.ListActivitiesByTypeParams) ([]models.Activity, error) - SoftDeleteActivity(ctx context.Context, id string) error - UpdateActivityStatus(ctx context.Context, arg models.UpdateActivityStatusParams) (models.Activity, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/asset/entity.go b/controllers/asset/entity.go deleted file mode 100644 index a6292e6..0000000 --- a/controllers/asset/entity.go +++ /dev/null @@ -1,17 +0,0 @@ -package asset - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type AssetEntity interface { - GetModel() models.Asset - GetCard(ticker, price string) templ.Component -} - -type AssetsEntity interface { - GetModels() []models.Asset - GetList() templ.Component - GetDropdown() templ.Component -} diff --git a/controllers/asset/queries.go b/controllers/asset/queries.go deleted file mode 100644 index 317c212..0000000 --- a/controllers/asset/queries.go +++ /dev/null @@ -1,27 +0,0 @@ -package asset - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetAssetByChainAndSymbol(ctx context.Context, arg models.GetAssetByChainAndSymbolParams) (models.Asset, error) - GetAssetByID(ctx context.Context, id string) (models.Asset, error) - GetAssetBySymbol(ctx context.Context, symbol string) (models.Asset, error) - GetAssetWithLatestPrice(ctx context.Context, id string) (models.GetAssetWithLatestPriceRow, error) - InsertAsset(ctx context.Context, arg models.InsertAssetParams) (models.Asset, error) - ListAssetsByChain(ctx context.Context, chainID string) ([]models.Asset, error) - ListAssetsWithLatestPrices(ctx context.Context, arg models.ListAssetsWithLatestPricesParams) ([]models.ListAssetsWithLatestPricesRow, error) - SoftDeleteAsset(ctx context.Context, id string) error - UpdateAsset(ctx context.Context, arg models.UpdateAssetParams) (models.Asset, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/asset/select.templ b/controllers/asset/select.templ deleted file mode 100644 index 54c86a2..0000000 --- a/controllers/asset/select.templ +++ /dev/null @@ -1,7 +0,0 @@ -package asset - -templ selectComponent() { -
-
-
-} diff --git a/controllers/asset/select_templ.go b/controllers/asset/select_templ.go deleted file mode 100644 index f366e66..0000000 --- a/controllers/asset/select_templ.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package asset - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func selectComponent() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/blockchain/entity.go b/controllers/blockchain/entity.go deleted file mode 100644 index a50f15b..0000000 --- a/controllers/blockchain/entity.go +++ /dev/null @@ -1,17 +0,0 @@ -package blockchain - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type BlockchainEntity interface { - GetModel() models.Blockchain - GetCard(ticker, price string) templ.Component -} - -type BlockchainsEntity interface { - GetModels() []models.Blockchain - GetList() templ.Component - GetDropdown() templ.Component -} diff --git a/controllers/blockchain/queries.go b/controllers/blockchain/queries.go deleted file mode 100644 index b9bfb5b..0000000 --- a/controllers/blockchain/queries.go +++ /dev/null @@ -1,41 +0,0 @@ -package blockchain - -import ( - "context" - "database/sql" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetBlockchainByChainName(ctx context.Context, chainName string) (models.Blockchain, error) - GetBlockchainByCosmosChainID(ctx context.Context, chainIDCosmos sql.NullString) (models.Blockchain, error) - GetBlockchainByEvmChainID(ctx context.Context, chainIDEvm sql.NullString) (models.Blockchain, error) - GetBlockchainByID(ctx context.Context, id string) (models.Blockchain, error) - GetBlockchainEndpoints(ctx context.Context, id string) (models.GetBlockchainEndpointsRow, error) - GetBlockchainExplorer(ctx context.Context, id string) (models.GetBlockchainExplorerRow, error) - GetBlockchainWithAssetInfo(ctx context.Context, id string) (models.GetBlockchainWithAssetInfoRow, error) - InsertBlockchain(ctx context.Context, arg models.InsertBlockchainParams) (models.Blockchain, error) - ListBlockchainsWithAssetInfo(ctx context.Context, arg models.ListBlockchainsWithAssetInfoParams) ([]models.ListBlockchainsWithAssetInfoRow, error) - ListBlockchainsWithERC20Support(ctx context.Context) ([]models.Blockchain, error) - ListBlockchainsWithExtensionSupport(ctx context.Context) ([]models.Blockchain, error) - ListBlockchainsWithMobileSupport(ctx context.Context) ([]models.Blockchain, error) - ListBlockchainsWithStaking(ctx context.Context) ([]models.Blockchain, error) - SearchBlockchains(ctx context.Context, arg models.SearchBlockchainsParams) ([]models.Blockchain, error) - SoftDeleteBlockchain(ctx context.Context, id string) error - UpdateBlockchain(ctx context.Context, arg models.UpdateBlockchainParams) (models.Blockchain, error) - UpdateBlockchainDescriptions(ctx context.Context, arg models.UpdateBlockchainDescriptionsParams) (models.Blockchain, error) - UpdateBlockchainEndpoints(ctx context.Context, arg models.UpdateBlockchainEndpointsParams) (models.Blockchain, error) - UpdateBlockchainExplorer(ctx context.Context, arg models.UpdateBlockchainExplorerParams) (models.Blockchain, error) - UpdateBlockchainFeeInfo(ctx context.Context, arg models.UpdateBlockchainFeeInfoParams) (models.Blockchain, error) - UpdateBlockchainImages(ctx context.Context, arg models.UpdateBlockchainImagesParams) (models.Blockchain, error) - UpdateBlockchainSocialLinks(ctx context.Context, arg models.UpdateBlockchainSocialLinksParams) (models.Blockchain, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/credential/entity.go b/controllers/credential/entity.go deleted file mode 100644 index 173154c..0000000 --- a/controllers/credential/entity.go +++ /dev/null @@ -1,18 +0,0 @@ -package credential - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type CredentialEntity interface { - GetModel() models.Credential - GetDescriptor() *CredentialDescriptor - GetInfoModal() templ.Component -} - -type CredentialsEntity interface { - GetModels() []models.Credential - GetDescriptors() []*CredentialDescriptor - GetList() templ.Component -} diff --git a/controllers/credential/inputs_templ.go b/controllers/credential/inputs_templ.go deleted file mode 100644 index ef72e9f..0000000 --- a/controllers/credential/inputs_templ.go +++ /dev/null @@ -1,232 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package credential - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func PasskeyInitial(clickHandler templ.ComponentScript) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " Register Passkey") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func PasskeyError(clickHandler templ.ComponentScript) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var3 := templ.GetChildren(ctx) - if templ_7745c5c3_Var3 == nil { - templ_7745c5c3_Var3 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, " Register Passkey") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func PasskeySuccess(clickHandler templ.ComponentScript) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var5 := templ.GetChildren(ctx) - if templ_7745c5c3_Var5 == nil { - templ_7745c5c3_Var5 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " Register Passkey") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func NavigatorCredentialsCreate(userId string, userHandle string, challenge string) templ.ComponentScript { - return templ.ComponentScript{ - Name: `__templ_NavigatorCredentialsCreate_8f96`, - Function: `function __templ_NavigatorCredentialsCreate_8f96(userId, userHandle, challenge){const publicKey = { - challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)), - rp: { - name: "Sonr.ID", - }, - user: { - // Assuming that userId is ASCII-only - id: Uint8Array.from(userId, (c) => c.charCodeAt(0)), - name: userId, - displayName: userHandle, - }, - pubKeyCredParams: [ - { - type: "public-key", - alg: -7, // "ES256" - }, - { - type: "public-key", - alg: -257, // "RS256" - }, - ], - authenticatorSelection: { - userVerification: "required", - residentKey: "required", - authenticatorAttachment: "platform", - }, - timeout: 60000, // 1 minute - extensions: { - payment: { - isPayment: true, - }, - largeBlob: { - supported: "preferred", - }, - }, - }; - - // Helper function to convert ArrayBuffer to Base64URL string - function arrayBufferToBase64URL(buffer) { - const bytes = new Uint8Array(buffer); - let str = ''; - bytes.forEach(byte => { str += String.fromCharCode(byte) }); - return btoa(str) - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=/g, ''); - } - -navigator.credentials - .create({ publicKey }) - .then((newCredentialInfo) => { - if (!(newCredentialInfo instanceof PublicKeyCredential)) { - throw new Error('Received credential is not a PublicKeyCredential'); - } - - const response = newCredentialInfo.response; - if (!(response instanceof AuthenticatorAttestationResponse)) { - throw new Error('Response is not an AuthenticatorAttestationResponse'); - } - - // Convert the credential data to a cross-platform compatible format - const credentialJSON = { - id: newCredentialInfo.id, - rawId: arrayBufferToBase64URL(newCredentialInfo.rawId), - type: newCredentialInfo.type, - authenticatorAttachment: newCredentialInfo.authenticatorAttachment || null, - transports: Array.isArray(response.getTransports) ? response.getTransports() : [], - clientExtensionResults: newCredentialInfo.getClientExtensionResults(), - response: { - attestationObject: arrayBufferToBase64URL(response.attestationObject), - clientDataJSON: arrayBufferToBase64URL(response.clientDataJSON) - } - }; - - // Set the form value with the stringified credential data - const credential = document.getElementById('credential-data'); - credential.value = JSON.stringify(credentialJSON); - - // Submit the form - const form = document.getElementById('passkey-form'); - form.submit(); - }) - .catch((err) => { - console.error('Passkey creation failed:', err); - alert(` + "`" + `Failed to create passkey: ${err.message || 'Unknown error'}` + "`" + `); - }); -}`, - Call: templ.SafeScript(`__templ_NavigatorCredentialsCreate_8f96`, userId, userHandle, challenge), - CallInline: templ.SafeScriptInline(`__templ_NavigatorCredentialsCreate_8f96`, userId, userHandle, challenge), - } -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/credential/queries.go b/controllers/credential/queries.go deleted file mode 100644 index 26501b9..0000000 --- a/controllers/credential/queries.go +++ /dev/null @@ -1,22 +0,0 @@ -package credential - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetCredentialByID(ctx context.Context, credentialID string) (models.Credential, error) - GetCredentialsByHandle(ctx context.Context, handle string) ([]models.Credential, error) - InsertCredential(ctx context.Context, arg models.InsertCredentialParams) (models.Credential, error) - SoftDeleteCredential(ctx context.Context, credentialID string) error -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/health/entity.go b/controllers/health/entity.go deleted file mode 100644 index 11c3bb4..0000000 --- a/controllers/health/entity.go +++ /dev/null @@ -1,16 +0,0 @@ -package health - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type HealthEntity interface { - GetModel() models.Health - GetCard() templ.Component -} - -type HealthsEntity interface { - GetModels() []models.Health - GetList() templ.Component -} diff --git a/controllers/health/queries.go b/controllers/health/queries.go deleted file mode 100644 index 9ca565c..0000000 --- a/controllers/health/queries.go +++ /dev/null @@ -1,26 +0,0 @@ -package health - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetHealthByEndpoint(ctx context.Context, endpointUrl string) (models.Health, error) - GetHealthByID(ctx context.Context, id string) (models.Health, error) - InsertHealth(ctx context.Context, arg models.InsertHealthParams) (models.Health, error) - ListHealthByChain(ctx context.Context, arg models.ListHealthByChainParams) ([]models.Health, error) - ListHealthByStatus(ctx context.Context, arg models.ListHealthByStatusParams) ([]models.Health, error) - ListHealthChecksNeedingUpdate(ctx context.Context, limit int64) ([]models.Health, error) - SoftDeleteHealth(ctx context.Context, id string) error - UpdateHealthCheck(ctx context.Context, arg models.UpdateHealthCheckParams) (models.Health, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/prices/entity.go b/controllers/prices/entity.go deleted file mode 100644 index 53bd021..0000000 --- a/controllers/prices/entity.go +++ /dev/null @@ -1,16 +0,0 @@ -package prices - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type PriceEntity interface { - GetModel() models.Price - GetCard() templ.Component -} - -type PricesEntity interface { - GetModels() []models.Price - GetList() templ.Component -} diff --git a/controllers/prices/queries.go b/controllers/prices/queries.go deleted file mode 100644 index b2e017c..0000000 --- a/controllers/prices/queries.go +++ /dev/null @@ -1,23 +0,0 @@ -package prices - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetPriceByAssetID(ctx context.Context, assetID string) (models.Price, error) - GetPriceByID(ctx context.Context, id string) (models.Price, error) - InsertPrice(ctx context.Context, arg models.InsertPriceParams) (models.Price, error) - ListPriceHistoryByAssetID(ctx context.Context, arg models.ListPriceHistoryByAssetIDParams) ([]models.Price, error) - UpdatePrice(ctx context.Context, arg models.UpdatePriceParams) (models.Price, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/profile/entity.go b/controllers/profile/entity.go deleted file mode 100644 index 73eaea2..0000000 --- a/controllers/profile/entity.go +++ /dev/null @@ -1,16 +0,0 @@ -package profile - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type ProfileEntity interface { - GetModel() models.Profile -} - -type ProfilesEntity interface { - GetModels() []models.Profile - GetList() templ.Component - GetDropdown() templ.Component -} diff --git a/controllers/profile/inputs.templ b/controllers/profile/inputs.templ deleted file mode 100644 index c167eea..0000000 --- a/controllers/profile/inputs.templ +++ /dev/null @@ -1,8 +0,0 @@ -package profile - -templ InputAvatar(value string, helpText string) { - - - - -} diff --git a/controllers/profile/inputs_templ.go b/controllers/profile/inputs_templ.go deleted file mode 100644 index 2f52b1a..0000000 --- a/controllers/profile/inputs_templ.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package profile - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func InputAvatar(value string, helpText string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " ") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/profile/queries.go b/controllers/profile/queries.go deleted file mode 100644 index cc22ec1..0000000 --- a/controllers/profile/queries.go +++ /dev/null @@ -1,26 +0,0 @@ -package profile - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - CheckHandleExists(ctx context.Context, handle string) (bool, error) - GetAccountsByHandle(ctx context.Context, handle string) ([]models.Account, error) - GetCredentialsByHandle(ctx context.Context, handle string) ([]models.Credential, error) - GetVaultsByHandle(ctx context.Context, handle string) ([]models.Vault, error) - InsertProfile(ctx context.Context, arg models.InsertProfileParams) (models.Profile, error) - ListProfiles(ctx context.Context, arg models.ListProfilesParams) ([]models.Profile, error) - SoftDeleteProfile(ctx context.Context, address string) error - UpdateProfile(ctx context.Context, arg models.UpdateProfileParams) (models.Profile, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/service/entity.go b/controllers/service/entity.go deleted file mode 100644 index 535cc2c..0000000 --- a/controllers/service/entity.go +++ /dev/null @@ -1,16 +0,0 @@ -package service - -import ( - "github.com/a-h/templ" - "github.com/sonr-io/motr/sink/models" -) - -type ServiceEntity interface { - GetModel() models.Service - GetCard() templ.Component -} - -type ServicesEntity interface { - GetModels() []models.Service - GetList() templ.Component -} diff --git a/controllers/service/queries.go b/controllers/service/queries.go deleted file mode 100644 index 15767c5..0000000 --- a/controllers/service/queries.go +++ /dev/null @@ -1,26 +0,0 @@ -package service - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetServiceByAddress(ctx context.Context, address string) (models.Service, error) - GetServiceByChainAndAddress(ctx context.Context, arg models.GetServiceByChainAndAddressParams) (models.Service, error) - GetServiceByID(ctx context.Context, id string) (models.Service, error) - InsertService(ctx context.Context, arg models.InsertServiceParams) (models.Service, error) - ListServicesByChain(ctx context.Context, arg models.ListServicesByChainParams) ([]models.Service, error) - ListServicesByOwner(ctx context.Context, arg models.ListServicesByOwnerParams) ([]models.Service, error) - SoftDeleteService(ctx context.Context, id string) error - UpdateService(ctx context.Context, arg models.UpdateServiceParams) (models.Service, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/controllers/vault/entity.go b/controllers/vault/entity.go deleted file mode 100644 index 6d0275d..0000000 --- a/controllers/vault/entity.go +++ /dev/null @@ -1,9 +0,0 @@ -package vault - -import ( - "github.com/sonr-io/motr/sink/models" -) - -type VaultEntity interface { - GetModel() models.Vault -} diff --git a/controllers/vault/forms.templ b/controllers/vault/forms.templ deleted file mode 100644 index 462429f..0000000 --- a/controllers/vault/forms.templ +++ /dev/null @@ -1,7 +0,0 @@ -package vault - -templ LoginForm(opts LoginOptions) { -
- Login -
-} diff --git a/controllers/vault/forms_templ.go b/controllers/vault/forms_templ.go deleted file mode 100644 index 86f222a..0000000 --- a/controllers/vault/forms_templ.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package vault - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func LoginForm(opts LoginOptions) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
Login
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/controllers/vault/options.go b/controllers/vault/options.go deleted file mode 100644 index 7e68ac7..0000000 --- a/controllers/vault/options.go +++ /dev/null @@ -1,18 +0,0 @@ -package vault - -import "github.com/sonr-io/motr/controllers/credential" - -type LoginOptions struct { - Account string - Handle string - HelpText string - Label string - Challenge string - AllowedCredentials []*credential.CredentialDescriptor -} - -type RegisterOptions struct { - Address string - Handle string - Challenge string -} diff --git a/controllers/vault/queries.go b/controllers/vault/queries.go deleted file mode 100644 index 0a848e2..0000000 --- a/controllers/vault/queries.go +++ /dev/null @@ -1,25 +0,0 @@ -package vault - -import ( - "context" - - "github.com/sonr-io/motr/sink/models" -) - -type Queries interface { - GetVaultByID(ctx context.Context, id string) (models.Vault, error) - GetVaultConfigByCID(ctx context.Context, cid string) (models.Vault, error) - GetVaultRedirectURIBySessionID(ctx context.Context, sessionID string) (string, error) - GetVaultsByHandle(ctx context.Context, handle string) ([]models.Vault, error) - InsertVault(ctx context.Context, arg models.InsertVaultParams) (models.Vault, error) - SoftDeleteVault(ctx context.Context, id string) error - UpdateVault(ctx context.Context, arg models.UpdateVaultParams) (models.Vault, error) -} - -func NewQueries(q models.Querier) Queries { - return &queries{Querier: q} -} - -type queries struct { - models.Querier -} diff --git a/devbox.json b/devbox.json new file mode 100644 index 0000000..d17f5f2 --- /dev/null +++ b/devbox.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.14.1/.schema/devbox.schema.json", + "packages": [ + "templ@latest", + "sqlc@latest", + "nodejs@latest", + "goreleaser@latest", + "doppler@latest", + "commitizen@latest", + "process-compose@latest" + ], + "shell": { + "init_hook": [ + "source .github/setup_env.sh", + "go_tidy", + "npm_install $RADAR_ROOT", + "npm_install $WORKER_ROOT" + ], + "scripts": { + "dev": [ + "process-compose up" + ], + "deploy": [ + "wrangler_deploy $RADAR_ROOT", + "wrangler_deploy $WORKER_ROOT" + ], + "release": [ + "check_deps", + "check_vars", + "publish_release" + ], + "build:radar": [ + "cd $RADAR_ROOT", + "workers-assets-gen -mode=go", + "GOOS=js GOARCH=wasm go build -ldflags=\"-s -w\" -o ./build/app.wasm ." + ], + "build:worker": [ + "cd $WORKER_ROOT", + "workers-assets-gen -mode=go", + "GOOS=js GOARCH=wasm go build -ldflags=\"-s -w\" -o ./build/app.wasm ." + ], + "serve:radar": [ + "cd $RADAR_ROOT", + "npm run start" + ], + "serve:worker": [ + "cd $WORKER_ROOT", + "npm run start" + ], + "gen:sqlc": [ + "cd ./internal/sink && sqlc generate" + ], + "gen:templ": [ + "templ generate" + ], + "watch:templ": [ + "templ generate --watch" + ] + } + } +} diff --git a/devbox.lock b/devbox.lock new file mode 100644 index 0000000..8c68b32 --- /dev/null +++ b/devbox.lock @@ -0,0 +1,394 @@ +{ + "lockfile_version": "1", + "packages": { + "commitizen@latest": { + "last_modified": "2025-05-21T01:27:34Z", + "resolved": "github:NixOS/nixpkgs/f0d925b947cca0bbe7f2d25115cbaf021844aba7#commitizen", + "source": "devbox-search", + "version": "4.7.1", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/m3307fx56ifajpg0qgqjj9dg71xjcfn4-python3.12-commitizen-4.7.1", + "default": true + }, + { + "name": "dist", + "path": "/nix/store/1081mrd0v09sx6g2c12h2bsyyim0s204-python3.12-commitizen-4.7.1-dist" + } + ], + "store_path": "/nix/store/m3307fx56ifajpg0qgqjj9dg71xjcfn4-python3.12-commitizen-4.7.1" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/kiaab8hfkacad3nh3ygc9p6m02sskb0l-python3.12-commitizen-4.7.1", + "default": true + }, + { + "name": "dist", + "path": "/nix/store/y7yqhxmmfnb5i012xvkzg8g5qkq8vrkj-python3.12-commitizen-4.7.1-dist" + } + ], + "store_path": "/nix/store/kiaab8hfkacad3nh3ygc9p6m02sskb0l-python3.12-commitizen-4.7.1" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/06s8d1qwgd1mw0jmp35fhfdznwpppb0l-python3.12-commitizen-4.7.1", + "default": true + }, + { + "name": "dist", + "path": "/nix/store/nlvvhrsg465n918474zh3jirlifvqbww-python3.12-commitizen-4.7.1-dist" + } + ], + "store_path": "/nix/store/06s8d1qwgd1mw0jmp35fhfdznwpppb0l-python3.12-commitizen-4.7.1" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/gaqvcwn0dya1crk789s0xsf7s4knraxz-python3.12-commitizen-4.7.1", + "default": true + }, + { + "name": "dist", + "path": "/nix/store/iagih5hd0nq8a5fh3naads5xc3gpg9jn-python3.12-commitizen-4.7.1-dist" + } + ], + "store_path": "/nix/store/gaqvcwn0dya1crk789s0xsf7s4knraxz-python3.12-commitizen-4.7.1" + } + } + }, + "doppler@latest": { + "last_modified": "2025-05-16T20:19:48Z", + "resolved": "github:NixOS/nixpkgs/12a55407652e04dcf2309436eb06fef0d3713ef3#doppler", + "source": "devbox-search", + "version": "3.74.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/y668f58njmrwndq2vzvd2013klgyr8mc-doppler-3.74.0", + "default": true + } + ], + "store_path": "/nix/store/y668f58njmrwndq2vzvd2013klgyr8mc-doppler-3.74.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/n751mbf77ldbv4daw6nxykzrs2bq84a2-doppler-3.74.0", + "default": true + } + ], + "store_path": "/nix/store/n751mbf77ldbv4daw6nxykzrs2bq84a2-doppler-3.74.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/abmclxna8750chlc5i8yj6hvlmb86q0k-doppler-3.74.0", + "default": true + } + ], + "store_path": "/nix/store/abmclxna8750chlc5i8yj6hvlmb86q0k-doppler-3.74.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/9xmw5l1y9p6s1bw21jj54f77yldrb35p-doppler-3.74.0", + "default": true + } + ], + "store_path": "/nix/store/9xmw5l1y9p6s1bw21jj54f77yldrb35p-doppler-3.74.0" + } + } + }, + "github:NixOS/nixpkgs/nixpkgs-unstable": { + "last_modified": "2025-05-26T00:03:27Z", + "resolved": "github:NixOS/nixpkgs/3108eaa516ae22c2360928589731a4f1581526ef?lastModified=1748217807&narHash=sha256-P3u2PXxMlo49PutQLnk2PhI%2FimC69hFl1yY4aT5Nax8%3D" + }, + "goreleaser@latest": { + "last_modified": "2025-05-16T20:19:48Z", + "resolved": "github:NixOS/nixpkgs/12a55407652e04dcf2309436eb06fef0d3713ef3#goreleaser", + "source": "devbox-search", + "version": "2.9.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/lqihz0f2h9zjqlhk74cayb9l74zgkxj2-goreleaser-2.9.0", + "default": true + } + ], + "store_path": "/nix/store/lqihz0f2h9zjqlhk74cayb9l74zgkxj2-goreleaser-2.9.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/wg1ndxx3hq7lcxg0nkzgs3myrflr5jm0-goreleaser-2.9.0", + "default": true + } + ], + "store_path": "/nix/store/wg1ndxx3hq7lcxg0nkzgs3myrflr5jm0-goreleaser-2.9.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/v17lq7ap19pajdhp04n4b7p4y5f2mxrr-goreleaser-2.9.0", + "default": true + } + ], + "store_path": "/nix/store/v17lq7ap19pajdhp04n4b7p4y5f2mxrr-goreleaser-2.9.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/rvjwgy6zz5qwipcm709jvf3j38r552nw-goreleaser-2.9.0", + "default": true + } + ], + "store_path": "/nix/store/rvjwgy6zz5qwipcm709jvf3j38r552nw-goreleaser-2.9.0" + } + } + }, + "nodejs@latest": { + "last_modified": "2025-05-22T03:53:02Z", + "plugin_version": "0.0.2", + "resolved": "github:NixOS/nixpkgs/a16efe5d2fc7455d7328a01f4692bfec152965b3#nodejs_24", + "source": "devbox-search", + "version": "24.1.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/2q5an9rpdq4vhc5ag04ajxnzxxqsqchq-nodejs-24.1.0", + "default": true + }, + { + "name": "dev", + "path": "/nix/store/hb25vqffnqd3hl7glmm1y4n54bmpfppr-nodejs-24.1.0-dev" + }, + { + "name": "libv8", + "path": "/nix/store/jw04y4lzw7x0v2yh437s3l6cri5l50vv-nodejs-24.1.0-libv8" + } + ], + "store_path": "/nix/store/2q5an9rpdq4vhc5ag04ajxnzxxqsqchq-nodejs-24.1.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/1ypnf27d1amna71zl7jgjpli4r2xqzx9-nodejs-24.1.0", + "default": true + }, + { + "name": "dev", + "path": "/nix/store/3alphvmg91jin165pj9q5zfk7j40azbg-nodejs-24.1.0-dev" + }, + { + "name": "libv8", + "path": "/nix/store/z1cbkwmgw0f94rhvc40v3k8z1rg9zkzf-nodejs-24.1.0-libv8" + } + ], + "store_path": "/nix/store/1ypnf27d1amna71zl7jgjpli4r2xqzx9-nodejs-24.1.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/plga9910l27vbg30ajmdsmccyj2a3pxm-nodejs-24.1.0", + "default": true + }, + { + "name": "libv8", + "path": "/nix/store/d6cq633qq8jr8liaip97fjwpv9r15ivb-nodejs-24.1.0-libv8" + }, + { + "name": "dev", + "path": "/nix/store/4b8xp5vrd08ca1im5b607x1wwvy4njjx-nodejs-24.1.0-dev" + } + ], + "store_path": "/nix/store/plga9910l27vbg30ajmdsmccyj2a3pxm-nodejs-24.1.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/wnayblhh0555nwfccnzcqkzph52y4yby-nodejs-24.1.0", + "default": true + }, + { + "name": "dev", + "path": "/nix/store/8ydr7k53w188y9fhskl7ahl8ibchx7w8-nodejs-24.1.0-dev" + }, + { + "name": "libv8", + "path": "/nix/store/4paqvzbw7jjzvn64liv5wwzc7fdsr7k7-nodejs-24.1.0-libv8" + } + ], + "store_path": "/nix/store/wnayblhh0555nwfccnzcqkzph52y4yby-nodejs-24.1.0" + } + } + }, + "process-compose@latest": { + "last_modified": "2025-05-16T20:19:48Z", + "resolved": "github:NixOS/nixpkgs/12a55407652e04dcf2309436eb06fef0d3713ef3#process-compose", + "source": "devbox-search", + "version": "1.64.1", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/yffykcwzkaqy490wzkiyw0ff6lss5fcx-process-compose-1.64.1", + "default": true + } + ], + "store_path": "/nix/store/yffykcwzkaqy490wzkiyw0ff6lss5fcx-process-compose-1.64.1" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/2n23nlnm52pi84vn3g8mg14xxsg5ww00-process-compose-1.64.1", + "default": true + } + ], + "store_path": "/nix/store/2n23nlnm52pi84vn3g8mg14xxsg5ww00-process-compose-1.64.1" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/g3r6rxrfk09vfv19rzpd6fmc9s75d21p-process-compose-1.64.1", + "default": true + } + ], + "store_path": "/nix/store/g3r6rxrfk09vfv19rzpd6fmc9s75d21p-process-compose-1.64.1" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/4hymfhkv9ldhbjqz6wjln05bhyxfd9xl-process-compose-1.64.1", + "default": true + } + ], + "store_path": "/nix/store/4hymfhkv9ldhbjqz6wjln05bhyxfd9xl-process-compose-1.64.1" + } + } + }, + "sqlc@latest": { + "last_modified": "2025-05-16T20:19:48Z", + "resolved": "github:NixOS/nixpkgs/12a55407652e04dcf2309436eb06fef0d3713ef3#sqlc", + "source": "devbox-search", + "version": "1.29.0", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/59x6309fph8whrgq9km66vh0m6xxbbsm-sqlc-1.29.0", + "default": true + } + ], + "store_path": "/nix/store/59x6309fph8whrgq9km66vh0m6xxbbsm-sqlc-1.29.0" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/8fivw8sfx1b5lskjzwdy3jpahpmpkgsf-sqlc-1.29.0", + "default": true + } + ], + "store_path": "/nix/store/8fivw8sfx1b5lskjzwdy3jpahpmpkgsf-sqlc-1.29.0" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/0klmpx4r5y22qw4q7i77rak1qfxqmmi1-sqlc-1.29.0", + "default": true + } + ], + "store_path": "/nix/store/0klmpx4r5y22qw4q7i77rak1qfxqmmi1-sqlc-1.29.0" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/qs2fwl68y7vl6v82w7jh6bm0zp6k8xbz-sqlc-1.29.0", + "default": true + } + ], + "store_path": "/nix/store/qs2fwl68y7vl6v82w7jh6bm0zp6k8xbz-sqlc-1.29.0" + } + } + }, + "templ@latest": { + "last_modified": "2025-05-16T20:19:48Z", + "resolved": "github:NixOS/nixpkgs/12a55407652e04dcf2309436eb06fef0d3713ef3#templ", + "source": "devbox-search", + "version": "0.3.865", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/6lhjwyf6rdrmihdlc4ypy46gsd2ysjyv-templ-0.3.865", + "default": true + } + ], + "store_path": "/nix/store/6lhjwyf6rdrmihdlc4ypy46gsd2ysjyv-templ-0.3.865" + }, + "aarch64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/6rr5gq33mnj76g8r3bwx35inq2iwx1jk-templ-0.3.865", + "default": true + } + ], + "store_path": "/nix/store/6rr5gq33mnj76g8r3bwx35inq2iwx1jk-templ-0.3.865" + }, + "x86_64-darwin": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/s79pg2247kpidi5sf8p3mvz7jbli7j2p-templ-0.3.865", + "default": true + } + ], + "store_path": "/nix/store/s79pg2247kpidi5sf8p3mvz7jbli7j2p-templ-0.3.865" + }, + "x86_64-linux": { + "outputs": [ + { + "name": "out", + "path": "/nix/store/yq6xygf7hq5alzfwyalfd5wixwzswcfl-templ-0.3.865", + "default": true + } + ], + "store_path": "/nix/store/yq6xygf7hq5alzfwyalfd5wixwzswcfl-templ-0.3.865" + } + } + } + } +} diff --git a/handlers/default_error.go b/handlers/default_error.go deleted file mode 100644 index 4caf549..0000000 --- a/handlers/default_error.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleDefaultError(c echo.Context) error { - return middleware.Render(c, views.HomeView()) -} diff --git a/handlers/default_index.go b/handlers/default_index.go deleted file mode 100644 index 6922a49..0000000 --- a/handlers/default_index.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleDefaultIndex(c echo.Context) error { - return middleware.Render(c, views.HomeView()) -} diff --git a/handlers/default_valid.go b/handlers/default_valid.go deleted file mode 100644 index 9c2c03b..0000000 --- a/handlers/default_valid.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleDefaultValid(c echo.Context) error { - return middleware.Render(c, views.HomeView()) -} diff --git a/handlers/error_handler.go b/handlers/error_handler.go new file mode 100644 index 0000000..722a5a4 --- /dev/null +++ b/handlers/error_handler.go @@ -0,0 +1,11 @@ +package handlers + +import ( + "github.com/labstack/echo/v4" + "github.com/sonr-io/motr/internal/ui/home" + "github.com/sonr-io/motr/pkg/render" +) + +func HandleItemNotFound(c echo.Context) error { + return render.View(c, home.HomeView()) +} diff --git a/handlers/index_handler.go b/handlers/index_handler.go new file mode 100644 index 0000000..c0126a8 --- /dev/null +++ b/handlers/index_handler.go @@ -0,0 +1,15 @@ +package handlers + +import ( + "github.com/labstack/echo/v4" + "github.com/sonr-io/motr/internal/ui/home" + "github.com/sonr-io/motr/pkg/render" +) + +func HandleDefaultIndex(c echo.Context) error { + return render.View(c, home.HomeView()) +} + +func HandleDefaultValid(c echo.Context) error { + return render.View(c, home.HomeView()) +} diff --git a/handlers/login_check.go b/handlers/login_check.go deleted file mode 100644 index a7915c5..0000000 --- a/handlers/login_check.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleLoginCheck(c echo.Context) error { - return middleware.Render(c, views.LoginView()) -} diff --git a/handlers/login_finish.go b/handlers/login_finish.go deleted file mode 100644 index afd134b..0000000 --- a/handlers/login_finish.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleLoginFinish(c echo.Context) error { - return middleware.Render(c, views.LoginView()) -} diff --git a/handlers/login_handler.go b/handlers/login_handler.go new file mode 100644 index 0000000..09a090f --- /dev/null +++ b/handlers/login_handler.go @@ -0,0 +1,33 @@ +package handlers + +import ( + "github.com/labstack/echo/v4" + "github.com/sonr-io/motr/internal/ui/login" + "github.com/sonr-io/motr/pkg/render" + "github.com/sonr-io/motr/pkg/webauth" +) + +type LoginOptions struct { + Account string + Handle string + HelpText string + Label string + Challenge string + AllowedCredentials []*webauth.CredentialDescriptor +} + +func HandleLoginCheck(c echo.Context) error { + return render.View(c, login.LoginView()) +} + +func HandleLoginInitial(c echo.Context) error { + return render.View(c, login.LoginView()) +} + +func HandleLoginFinish(c echo.Context) error { + return render.View(c, login.LoginView()) +} + +func HandleLoginStart(c echo.Context) error { + return render.View(c, login.LoginView()) +} diff --git a/handlers/login_initial.go b/handlers/login_initial.go deleted file mode 100644 index 5c838d3..0000000 --- a/handlers/login_initial.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleLoginInitial(c echo.Context) error { - return middleware.Render(c, views.LoginView()) -} diff --git a/handlers/login_start.go b/handlers/login_start.go deleted file mode 100644 index 43fe71f..0000000 --- a/handlers/login_start.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleLoginStart(c echo.Context) error { - return middleware.Render(c, views.LoginView()) -} diff --git a/handlers/register_check.go b/handlers/register_check.go deleted file mode 100644 index 32c5005..0000000 --- a/handlers/register_check.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleRegisterCheck(c echo.Context) error { - return middleware.Render(c, views.RegisterView()) -} diff --git a/handlers/register_finish.go b/handlers/register_finish.go deleted file mode 100644 index 644774b..0000000 --- a/handlers/register_finish.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleRegisterFinish(c echo.Context) error { - return middleware.Render(c, views.RegisterView()) -} diff --git a/handlers/register_handler.go b/handlers/register_handler.go new file mode 100644 index 0000000..cf9d2c4 --- /dev/null +++ b/handlers/register_handler.go @@ -0,0 +1,29 @@ +package handlers + +import ( + "github.com/labstack/echo/v4" + "github.com/sonr-io/motr/internal/ui/register" + "github.com/sonr-io/motr/pkg/render" +) + +type RegisterOptions struct { + Address string + Handle string + Challenge string +} + +func HandleRegisterInitial(c echo.Context) error { + return render.View(c, register.RegisterView()) +} + +func HandleRegisterCheck(c echo.Context) error { + return render.View(c, register.RegisterView()) +} + +func HandleRegisterFinish(c echo.Context) error { + return render.View(c, register.RegisterView()) +} + +func HandleRegisterStart(c echo.Context) error { + return render.View(c, register.RegisterView()) +} diff --git a/handlers/register_initial.go b/handlers/register_initial.go deleted file mode 100644 index 11c7155..0000000 --- a/handlers/register_initial.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleRegisterInitial(c echo.Context) error { - return middleware.Render(c, views.RegisterView()) -} diff --git a/handlers/register_start.go b/handlers/register_start.go deleted file mode 100644 index d441ee4..0000000 --- a/handlers/register_start.go +++ /dev/null @@ -1,11 +0,0 @@ -package handlers - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/middleware" - "github.com/sonr-io/motr/ui/views" -) - -func HandleRegisterStart(c echo.Context) error { - return middleware.Render(c, views.RegisterView()) -} diff --git a/handlers/status_check.go b/handlers/status_handler.go similarity index 100% rename from handlers/status_check.go rename to handlers/status_handler.go diff --git a/internal/sink/activity/db.go b/internal/sink/activity/db.go new file mode 100644 index 0000000..20a79de --- /dev/null +++ b/internal/sink/activity/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package activity + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/sink/activity/models.go b/internal/sink/activity/models.go new file mode 100644 index 0000000..df36507 --- /dev/null +++ b/internal/sink/activity/models.go @@ -0,0 +1,63 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package activity + +import ( + "database/sql" + "time" +) + +type Activity struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + AccountID string `json:"account_id"` + TxHash sql.NullString `json:"tx_hash"` + TxType string `json:"tx_type"` + Status string `json:"status"` + Amount sql.NullString `json:"amount"` + Fee sql.NullString `json:"fee"` + GasUsed sql.NullInt64 `json:"gas_used"` + GasWanted sql.NullInt64 `json:"gas_wanted"` + Memo sql.NullString `json:"memo"` + BlockHeight sql.NullInt64 `json:"block_height"` + Timestamp time.Time `json:"timestamp"` + RawLog sql.NullString `json:"raw_log"` + Error sql.NullString `json:"error"` +} + +type Health struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + EndpointUrl string `json:"endpoint_url"` + EndpointType string `json:"endpoint_type"` + ChainID sql.NullString `json:"chain_id"` + Status string `json:"status"` + ResponseTimeMs sql.NullInt64 `json:"response_time_ms"` + LastChecked time.Time `json:"last_checked"` + NextCheck sql.NullTime `json:"next_check"` + FailureCount int64 `json:"failure_count"` + SuccessCount int64 `json:"success_count"` + ResponseData sql.NullString `json:"response_data"` + ErrorMessage sql.NullString `json:"error_message"` +} + +type Service struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + Name string `json:"name"` + Description sql.NullString `json:"description"` + ChainID string `json:"chain_id"` + Address string `json:"address"` + OwnerAddress string `json:"owner_address"` + Metadata sql.NullString `json:"metadata"` + Status string `json:"status"` + BlockHeight int64 `json:"block_height"` +} diff --git a/internal/sink/activity/querier.go b/internal/sink/activity/querier.go new file mode 100644 index 0000000..0943c26 --- /dev/null +++ b/internal/sink/activity/querier.go @@ -0,0 +1,41 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package activity + +import ( + "context" + "database/sql" +) + +type Querier interface { + GetActivityByID(ctx context.Context, id string) (Activity, error) + GetActivityByTxHash(ctx context.Context, txHash sql.NullString) (Activity, error) + GetHealthByEndpoint(ctx context.Context, endpointUrl string) (Health, error) + GetHealthByID(ctx context.Context, id string) (Health, error) + GetServiceByAddress(ctx context.Context, address string) (Service, error) + GetServiceByChainAndAddress(ctx context.Context, arg GetServiceByChainAndAddressParams) (Service, error) + GetServiceByID(ctx context.Context, id string) (Service, error) + // ACTIVITY QUERIES + InsertActivity(ctx context.Context, arg InsertActivityParams) (Activity, error) + // HEALTH QUERIES + InsertHealth(ctx context.Context, arg InsertHealthParams) (Health, error) + InsertService(ctx context.Context, arg InsertServiceParams) (Service, error) + ListActivitiesByAccount(ctx context.Context, arg ListActivitiesByAccountParams) ([]Activity, error) + ListActivitiesByStatus(ctx context.Context, arg ListActivitiesByStatusParams) ([]Activity, error) + ListActivitiesByType(ctx context.Context, arg ListActivitiesByTypeParams) ([]Activity, error) + ListHealthByChain(ctx context.Context, arg ListHealthByChainParams) ([]Health, error) + ListHealthByStatus(ctx context.Context, arg ListHealthByStatusParams) ([]Health, error) + ListHealthChecksNeedingUpdate(ctx context.Context, limit int64) ([]Health, error) + ListServicesByChain(ctx context.Context, arg ListServicesByChainParams) ([]Service, error) + ListServicesByOwner(ctx context.Context, arg ListServicesByOwnerParams) ([]Service, error) + SoftDeleteActivity(ctx context.Context, id string) error + SoftDeleteHealth(ctx context.Context, id string) error + SoftDeleteService(ctx context.Context, id string) error + UpdateActivityStatus(ctx context.Context, arg UpdateActivityStatusParams) (Activity, error) + UpdateHealthCheck(ctx context.Context, arg UpdateHealthCheckParams) (Health, error) + UpdateService(ctx context.Context, arg UpdateServiceParams) (Service, error) +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/sink/activity/query.sql b/internal/sink/activity/query.sql new file mode 100644 index 0000000..7c69aea --- /dev/null +++ b/internal/sink/activity/query.sql @@ -0,0 +1,191 @@ +-- name: InsertService :one +INSERT INTO services ( + name, + description, + chain_id, + address, + owner_address, + metadata, + status, + block_height +) VALUES (?, ?, ?, ?, ?, ?, ?, ?) +RETURNING *; + +-- name: GetServiceByID :one +SELECT * FROM services +WHERE id = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetServiceByAddress :one +SELECT * FROM services +WHERE address = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetServiceByChainAndAddress :one +SELECT * FROM services +WHERE chain_id = ? AND address = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: ListServicesByChain :many +SELECT * FROM services +WHERE chain_id = ? AND deleted_at IS NULL +ORDER BY name ASC +LIMIT ? OFFSET ?; + +-- name: ListServicesByOwner :many +SELECT * FROM services +WHERE owner_address = ? AND deleted_at IS NULL +ORDER BY created_at DESC +LIMIT ? OFFSET ?; + +-- name: UpdateService :one +UPDATE services +SET + name = ?, + description = ?, + owner_address = ?, + metadata = ?, + status = ?, + block_height = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: SoftDeleteService :exec +UPDATE services +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ?; + +-- ACTIVITY QUERIES +-- name: InsertActivity :one +INSERT INTO activities ( + account_id, + tx_hash, + tx_type, + status, + amount, + fee, + gas_used, + gas_wanted, + memo, + block_height, + timestamp, + raw_log, + error +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +RETURNING *; + +-- name: GetActivityByID :one +SELECT * FROM activities +WHERE id = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetActivityByTxHash :one +SELECT * FROM activities +WHERE tx_hash = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: ListActivitiesByAccount :many +SELECT * FROM activities +WHERE account_id = ? AND deleted_at IS NULL +ORDER BY timestamp DESC +LIMIT ? OFFSET ?; + +-- name: ListActivitiesByType :many +SELECT * FROM activities +WHERE tx_type = ? AND deleted_at IS NULL +ORDER BY timestamp DESC +LIMIT ? OFFSET ?; + +-- name: ListActivitiesByStatus :many +SELECT * FROM activities +WHERE status = ? AND deleted_at IS NULL +ORDER BY timestamp DESC +LIMIT ? OFFSET ?; + +-- name: UpdateActivityStatus :one +UPDATE activities +SET + status = ?, + tx_hash = ?, + block_height = ?, + gas_used = ?, + raw_log = ?, + error = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: SoftDeleteActivity :exec +UPDATE activities +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ?; + +-- HEALTH QUERIES +-- name: InsertHealth :one +INSERT INTO health ( + endpoint_url, + endpoint_type, + chain_id, + status, + response_time_ms, + last_checked, + next_check, + failure_count, + success_count, + response_data, + error_message +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +RETURNING *; + +-- name: GetHealthByID :one +SELECT * FROM health +WHERE id = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetHealthByEndpoint :one +SELECT * FROM health +WHERE endpoint_url = ? AND deleted_at IS NULL +ORDER BY last_checked DESC +LIMIT 1; + +-- name: ListHealthByChain :many +SELECT * FROM health +WHERE chain_id = ? AND deleted_at IS NULL +ORDER BY last_checked DESC +LIMIT ? OFFSET ?; + +-- name: ListHealthByStatus :many +SELECT * FROM health +WHERE status = ? AND deleted_at IS NULL +ORDER BY last_checked DESC +LIMIT ? OFFSET ?; + +-- name: ListHealthChecksNeedingUpdate :many +SELECT * FROM health +WHERE next_check <= CURRENT_TIMESTAMP AND deleted_at IS NULL +ORDER BY next_check ASC +LIMIT ?; + +-- name: UpdateHealthCheck :one +UPDATE health +SET + status = ?, + response_time_ms = ?, + last_checked = CURRENT_TIMESTAMP, + next_check = ?, + failure_count = CASE WHEN status = 'failed' THEN failure_count + 1 ELSE failure_count END, + success_count = CASE WHEN status = 'success' THEN success_count + 1 ELSE success_count END, + response_data = ?, + error_message = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: SoftDeleteHealth :exec +UPDATE health +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ?; diff --git a/internal/sink/activity/query.sql.go b/internal/sink/activity/query.sql.go new file mode 100644 index 0000000..275270d --- /dev/null +++ b/internal/sink/activity/query.sql.go @@ -0,0 +1,1022 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 +// source: query.sql + +package activity + +import ( + "context" + "database/sql" + "time" +) + +const getActivityByID = `-- name: GetActivityByID :one +SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities +WHERE id = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetActivityByID(ctx context.Context, id string) (Activity, error) { + row := q.db.QueryRowContext(ctx, getActivityByID, id) + var i Activity + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ) + return i, err +} + +const getActivityByTxHash = `-- name: GetActivityByTxHash :one +SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities +WHERE tx_hash = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetActivityByTxHash(ctx context.Context, txHash sql.NullString) (Activity, error) { + row := q.db.QueryRowContext(ctx, getActivityByTxHash, txHash) + var i Activity + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ) + return i, err +} + +const getHealthByEndpoint = `-- name: GetHealthByEndpoint :one +SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health +WHERE endpoint_url = ? AND deleted_at IS NULL +ORDER BY last_checked DESC +LIMIT 1 +` + +func (q *Queries) GetHealthByEndpoint(ctx context.Context, endpointUrl string) (Health, error) { + row := q.db.QueryRowContext(ctx, getHealthByEndpoint, endpointUrl) + var i Health + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ) + return i, err +} + +const getHealthByID = `-- name: GetHealthByID :one +SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health +WHERE id = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetHealthByID(ctx context.Context, id string) (Health, error) { + row := q.db.QueryRowContext(ctx, getHealthByID, id) + var i Health + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ) + return i, err +} + +const getServiceByAddress = `-- name: GetServiceByAddress :one +SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services +WHERE address = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetServiceByAddress(ctx context.Context, address string) (Service, error) { + row := q.db.QueryRowContext(ctx, getServiceByAddress, address) + var i Service + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ) + return i, err +} + +const getServiceByChainAndAddress = `-- name: GetServiceByChainAndAddress :one +SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services +WHERE chain_id = ? AND address = ? AND deleted_at IS NULL +LIMIT 1 +` + +type GetServiceByChainAndAddressParams struct { + ChainID string `json:"chain_id"` + Address string `json:"address"` +} + +func (q *Queries) GetServiceByChainAndAddress(ctx context.Context, arg GetServiceByChainAndAddressParams) (Service, error) { + row := q.db.QueryRowContext(ctx, getServiceByChainAndAddress, arg.ChainID, arg.Address) + var i Service + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ) + return i, err +} + +const getServiceByID = `-- name: GetServiceByID :one +SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services +WHERE id = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetServiceByID(ctx context.Context, id string) (Service, error) { + row := q.db.QueryRowContext(ctx, getServiceByID, id) + var i Service + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ) + return i, err +} + +const insertActivity = `-- name: InsertActivity :one +INSERT INTO activities ( + account_id, + tx_hash, + tx_type, + status, + amount, + fee, + gas_used, + gas_wanted, + memo, + block_height, + timestamp, + raw_log, + error +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error +` + +type InsertActivityParams struct { + AccountID string `json:"account_id"` + TxHash sql.NullString `json:"tx_hash"` + TxType string `json:"tx_type"` + Status string `json:"status"` + Amount sql.NullString `json:"amount"` + Fee sql.NullString `json:"fee"` + GasUsed sql.NullInt64 `json:"gas_used"` + GasWanted sql.NullInt64 `json:"gas_wanted"` + Memo sql.NullString `json:"memo"` + BlockHeight sql.NullInt64 `json:"block_height"` + Timestamp time.Time `json:"timestamp"` + RawLog sql.NullString `json:"raw_log"` + Error sql.NullString `json:"error"` +} + +// ACTIVITY QUERIES +func (q *Queries) InsertActivity(ctx context.Context, arg InsertActivityParams) (Activity, error) { + row := q.db.QueryRowContext(ctx, insertActivity, + arg.AccountID, + arg.TxHash, + arg.TxType, + arg.Status, + arg.Amount, + arg.Fee, + arg.GasUsed, + arg.GasWanted, + arg.Memo, + arg.BlockHeight, + arg.Timestamp, + arg.RawLog, + arg.Error, + ) + var i Activity + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ) + return i, err +} + +const insertHealth = `-- name: InsertHealth :one +INSERT INTO health ( + endpoint_url, + endpoint_type, + chain_id, + status, + response_time_ms, + last_checked, + next_check, + failure_count, + success_count, + response_data, + error_message +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message +` + +type InsertHealthParams struct { + EndpointUrl string `json:"endpoint_url"` + EndpointType string `json:"endpoint_type"` + ChainID sql.NullString `json:"chain_id"` + Status string `json:"status"` + ResponseTimeMs sql.NullInt64 `json:"response_time_ms"` + LastChecked time.Time `json:"last_checked"` + NextCheck sql.NullTime `json:"next_check"` + FailureCount int64 `json:"failure_count"` + SuccessCount int64 `json:"success_count"` + ResponseData sql.NullString `json:"response_data"` + ErrorMessage sql.NullString `json:"error_message"` +} + +// HEALTH QUERIES +func (q *Queries) InsertHealth(ctx context.Context, arg InsertHealthParams) (Health, error) { + row := q.db.QueryRowContext(ctx, insertHealth, + arg.EndpointUrl, + arg.EndpointType, + arg.ChainID, + arg.Status, + arg.ResponseTimeMs, + arg.LastChecked, + arg.NextCheck, + arg.FailureCount, + arg.SuccessCount, + arg.ResponseData, + arg.ErrorMessage, + ) + var i Health + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ) + return i, err +} + +const insertService = `-- name: InsertService :one +INSERT INTO services ( + name, + description, + chain_id, + address, + owner_address, + metadata, + status, + block_height +) VALUES (?, ?, ?, ?, ?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height +` + +type InsertServiceParams struct { + Name string `json:"name"` + Description sql.NullString `json:"description"` + ChainID string `json:"chain_id"` + Address string `json:"address"` + OwnerAddress string `json:"owner_address"` + Metadata sql.NullString `json:"metadata"` + Status string `json:"status"` + BlockHeight int64 `json:"block_height"` +} + +func (q *Queries) InsertService(ctx context.Context, arg InsertServiceParams) (Service, error) { + row := q.db.QueryRowContext(ctx, insertService, + arg.Name, + arg.Description, + arg.ChainID, + arg.Address, + arg.OwnerAddress, + arg.Metadata, + arg.Status, + arg.BlockHeight, + ) + var i Service + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ) + return i, err +} + +const listActivitiesByAccount = `-- name: ListActivitiesByAccount :many +SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities +WHERE account_id = ? AND deleted_at IS NULL +ORDER BY timestamp DESC +LIMIT ? OFFSET ? +` + +type ListActivitiesByAccountParams struct { + AccountID string `json:"account_id"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListActivitiesByAccount(ctx context.Context, arg ListActivitiesByAccountParams) ([]Activity, error) { + rows, err := q.db.QueryContext(ctx, listActivitiesByAccount, arg.AccountID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Activity + for rows.Next() { + var i Activity + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listActivitiesByStatus = `-- name: ListActivitiesByStatus :many +SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities +WHERE status = ? AND deleted_at IS NULL +ORDER BY timestamp DESC +LIMIT ? OFFSET ? +` + +type ListActivitiesByStatusParams struct { + Status string `json:"status"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListActivitiesByStatus(ctx context.Context, arg ListActivitiesByStatusParams) ([]Activity, error) { + rows, err := q.db.QueryContext(ctx, listActivitiesByStatus, arg.Status, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Activity + for rows.Next() { + var i Activity + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listActivitiesByType = `-- name: ListActivitiesByType :many +SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities +WHERE tx_type = ? AND deleted_at IS NULL +ORDER BY timestamp DESC +LIMIT ? OFFSET ? +` + +type ListActivitiesByTypeParams struct { + TxType string `json:"tx_type"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListActivitiesByType(ctx context.Context, arg ListActivitiesByTypeParams) ([]Activity, error) { + rows, err := q.db.QueryContext(ctx, listActivitiesByType, arg.TxType, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Activity + for rows.Next() { + var i Activity + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listHealthByChain = `-- name: ListHealthByChain :many +SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health +WHERE chain_id = ? AND deleted_at IS NULL +ORDER BY last_checked DESC +LIMIT ? OFFSET ? +` + +type ListHealthByChainParams struct { + ChainID sql.NullString `json:"chain_id"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListHealthByChain(ctx context.Context, arg ListHealthByChainParams) ([]Health, error) { + rows, err := q.db.QueryContext(ctx, listHealthByChain, arg.ChainID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Health + for rows.Next() { + var i Health + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listHealthByStatus = `-- name: ListHealthByStatus :many +SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health +WHERE status = ? AND deleted_at IS NULL +ORDER BY last_checked DESC +LIMIT ? OFFSET ? +` + +type ListHealthByStatusParams struct { + Status string `json:"status"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListHealthByStatus(ctx context.Context, arg ListHealthByStatusParams) ([]Health, error) { + rows, err := q.db.QueryContext(ctx, listHealthByStatus, arg.Status, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Health + for rows.Next() { + var i Health + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listHealthChecksNeedingUpdate = `-- name: ListHealthChecksNeedingUpdate :many +SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health +WHERE next_check <= CURRENT_TIMESTAMP AND deleted_at IS NULL +ORDER BY next_check ASC +LIMIT ? +` + +func (q *Queries) ListHealthChecksNeedingUpdate(ctx context.Context, limit int64) ([]Health, error) { + rows, err := q.db.QueryContext(ctx, listHealthChecksNeedingUpdate, limit) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Health + for rows.Next() { + var i Health + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listServicesByChain = `-- name: ListServicesByChain :many +SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services +WHERE chain_id = ? AND deleted_at IS NULL +ORDER BY name ASC +LIMIT ? OFFSET ? +` + +type ListServicesByChainParams struct { + ChainID string `json:"chain_id"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListServicesByChain(ctx context.Context, arg ListServicesByChainParams) ([]Service, error) { + rows, err := q.db.QueryContext(ctx, listServicesByChain, arg.ChainID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Service + for rows.Next() { + var i Service + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listServicesByOwner = `-- name: ListServicesByOwner :many +SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services +WHERE owner_address = ? AND deleted_at IS NULL +ORDER BY created_at DESC +LIMIT ? OFFSET ? +` + +type ListServicesByOwnerParams struct { + OwnerAddress string `json:"owner_address"` + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListServicesByOwner(ctx context.Context, arg ListServicesByOwnerParams) ([]Service, error) { + rows, err := q.db.QueryContext(ctx, listServicesByOwner, arg.OwnerAddress, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Service + for rows.Next() { + var i Service + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const softDeleteActivity = `-- name: SoftDeleteActivity :exec +UPDATE activities +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ? +` + +func (q *Queries) SoftDeleteActivity(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, softDeleteActivity, id) + return err +} + +const softDeleteHealth = `-- name: SoftDeleteHealth :exec +UPDATE health +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ? +` + +func (q *Queries) SoftDeleteHealth(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, softDeleteHealth, id) + return err +} + +const softDeleteService = `-- name: SoftDeleteService :exec +UPDATE services +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ? +` + +func (q *Queries) SoftDeleteService(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, softDeleteService, id) + return err +} + +const updateActivityStatus = `-- name: UpdateActivityStatus :one +UPDATE activities +SET + status = ?, + tx_hash = ?, + block_height = ?, + gas_used = ?, + raw_log = ?, + error = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error +` + +type UpdateActivityStatusParams struct { + Status string `json:"status"` + TxHash sql.NullString `json:"tx_hash"` + BlockHeight sql.NullInt64 `json:"block_height"` + GasUsed sql.NullInt64 `json:"gas_used"` + RawLog sql.NullString `json:"raw_log"` + Error sql.NullString `json:"error"` + ID string `json:"id"` +} + +func (q *Queries) UpdateActivityStatus(ctx context.Context, arg UpdateActivityStatusParams) (Activity, error) { + row := q.db.QueryRowContext(ctx, updateActivityStatus, + arg.Status, + arg.TxHash, + arg.BlockHeight, + arg.GasUsed, + arg.RawLog, + arg.Error, + arg.ID, + ) + var i Activity + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.AccountID, + &i.TxHash, + &i.TxType, + &i.Status, + &i.Amount, + &i.Fee, + &i.GasUsed, + &i.GasWanted, + &i.Memo, + &i.BlockHeight, + &i.Timestamp, + &i.RawLog, + &i.Error, + ) + return i, err +} + +const updateHealthCheck = `-- name: UpdateHealthCheck :one +UPDATE health +SET + status = ?, + response_time_ms = ?, + last_checked = CURRENT_TIMESTAMP, + next_check = ?, + failure_count = CASE WHEN status = 'failed' THEN failure_count + 1 ELSE failure_count END, + success_count = CASE WHEN status = 'success' THEN success_count + 1 ELSE success_count END, + response_data = ?, + error_message = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message +` + +type UpdateHealthCheckParams struct { + Status string `json:"status"` + ResponseTimeMs sql.NullInt64 `json:"response_time_ms"` + NextCheck sql.NullTime `json:"next_check"` + ResponseData sql.NullString `json:"response_data"` + ErrorMessage sql.NullString `json:"error_message"` + ID string `json:"id"` +} + +func (q *Queries) UpdateHealthCheck(ctx context.Context, arg UpdateHealthCheckParams) (Health, error) { + row := q.db.QueryRowContext(ctx, updateHealthCheck, + arg.Status, + arg.ResponseTimeMs, + arg.NextCheck, + arg.ResponseData, + arg.ErrorMessage, + arg.ID, + ) + var i Health + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.EndpointUrl, + &i.EndpointType, + &i.ChainID, + &i.Status, + &i.ResponseTimeMs, + &i.LastChecked, + &i.NextCheck, + &i.FailureCount, + &i.SuccessCount, + &i.ResponseData, + &i.ErrorMessage, + ) + return i, err +} + +const updateService = `-- name: UpdateService :one +UPDATE services +SET + name = ?, + description = ?, + owner_address = ?, + metadata = ?, + status = ?, + block_height = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height +` + +type UpdateServiceParams struct { + Name string `json:"name"` + Description sql.NullString `json:"description"` + OwnerAddress string `json:"owner_address"` + Metadata sql.NullString `json:"metadata"` + Status string `json:"status"` + BlockHeight int64 `json:"block_height"` + ID string `json:"id"` +} + +func (q *Queries) UpdateService(ctx context.Context, arg UpdateServiceParams) (Service, error) { + row := q.db.QueryRowContext(ctx, updateService, + arg.Name, + arg.Description, + arg.OwnerAddress, + arg.Metadata, + arg.Status, + arg.BlockHeight, + arg.ID, + ) + var i Service + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Name, + &i.Description, + &i.ChainID, + &i.Address, + &i.OwnerAddress, + &i.Metadata, + &i.Status, + &i.BlockHeight, + ) + return i, err +} diff --git a/internal/sink/activity/schema.sql b/internal/sink/activity/schema.sql new file mode 100644 index 0000000..e280e7e --- /dev/null +++ b/internal/sink/activity/schema.sql @@ -0,0 +1,84 @@ + +-- Service for Service Records sourced on chain +CREATE TABLE services ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + name TEXT NOT NULL, + description TEXT, + chain_id TEXT NOT NULL, + address TEXT NOT NULL, + owner_address TEXT NOT NULL, + metadata TEXT CHECK(json_valid(metadata)), + status TEXT NOT NULL, + block_height INTEGER NOT NULL, + FOREIGN KEY (chain_id) REFERENCES assets(chain_id), + UNIQUE(chain_id, address) +); + +-- Activity table for basic transaction broadcast activity +CREATE TABLE activities ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + account_id TEXT NOT NULL, + tx_hash TEXT, + tx_type TEXT NOT NULL, + status TEXT NOT NULL, + amount TEXT, + fee TEXT, + gas_used INTEGER, + gas_wanted INTEGER, + memo TEXT, + block_height INTEGER, + timestamp TIMESTAMP NOT NULL, + raw_log TEXT, + error TEXT, + FOREIGN KEY (account_id) REFERENCES accounts(id) +); + +-- Health table for scheduled checks for API endpoints +CREATE TABLE health ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + endpoint_url TEXT NOT NULL, + endpoint_type TEXT NOT NULL, + chain_id TEXT, + status TEXT NOT NULL, + response_time_ms INTEGER, + last_checked TIMESTAMP NOT NULL, + next_check TIMESTAMP, + failure_count INTEGER NOT NULL DEFAULT 0, + success_count INTEGER NOT NULL DEFAULT 0, + response_data TEXT, + error_message TEXT, + FOREIGN KEY (chain_id) REFERENCES assets(chain_id) +); + +CREATE INDEX idx_services_name ON services(name); +CREATE INDEX idx_services_chain_id ON services(chain_id); +CREATE INDEX idx_services_address ON services(address); +CREATE INDEX idx_services_owner_address ON services(owner_address); +CREATE INDEX idx_services_status ON services(status); +CREATE INDEX idx_services_deleted_at ON services(deleted_at); + +CREATE INDEX idx_activities_account_id ON activities(account_id); +CREATE INDEX idx_activities_tx_hash ON activities(tx_hash); +CREATE INDEX idx_activities_tx_type ON activities(tx_type); +CREATE INDEX idx_activities_status ON activities(status); +CREATE INDEX idx_activities_timestamp ON activities(timestamp); +CREATE INDEX idx_activities_block_height ON activities(block_height); +CREATE INDEX idx_activities_deleted_at ON activities(deleted_at); + +CREATE INDEX idx_health_endpoint_url ON health(endpoint_url); +CREATE INDEX idx_health_endpoint_type ON health(endpoint_type); +CREATE INDEX idx_health_chain_id ON health(chain_id); +CREATE INDEX idx_health_status ON health(status); +CREATE INDEX idx_health_last_checked ON health(last_checked); +CREATE INDEX idx_health_next_check ON health(next_check); +CREATE INDEX idx_health_deleted_at ON health(deleted_at); + diff --git a/internal/sink/network/db.go b/internal/sink/network/db.go new file mode 100644 index 0000000..b62b137 --- /dev/null +++ b/internal/sink/network/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package network + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/sink/models/models.go b/internal/sink/network/models.go similarity index 57% rename from sink/models/models.go rename to internal/sink/network/models.go index 1ec296f..29423ec 100644 --- a/sink/models/models.go +++ b/internal/sink/network/models.go @@ -1,54 +1,14 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 -package models +package network import ( "database/sql" "time" ) -type Account struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - Number int64 `json:"number"` - Sequence int64 `json:"sequence"` - Address string `json:"address"` - PublicKey string `json:"public_key"` - ChainID string `json:"chain_id"` - BlockCreated int64 `json:"block_created"` - Controller string `json:"controller"` - Label string `json:"label"` - Handle string `json:"handle"` - IsSubsidiary bool `json:"is_subsidiary"` - IsValidator bool `json:"is_validator"` - IsDelegator bool `json:"is_delegator"` - IsAccountable bool `json:"is_accountable"` -} - -type Activity struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - AccountID string `json:"account_id"` - TxHash sql.NullString `json:"tx_hash"` - TxType string `json:"tx_type"` - Status string `json:"status"` - Amount sql.NullString `json:"amount"` - Fee sql.NullString `json:"fee"` - GasUsed sql.NullInt64 `json:"gas_used"` - GasWanted sql.NullInt64 `json:"gas_wanted"` - Memo sql.NullString `json:"memo"` - BlockHeight sql.NullInt64 `json:"block_height"` - Timestamp time.Time `json:"timestamp"` - RawLog sql.NullString `json:"raw_log"` - Error sql.NullString `json:"error"` -} - type Asset struct { ID string `json:"id"` CreatedAt time.Time `json:"created_at"` @@ -102,19 +62,6 @@ type Blockchain struct { Forum sql.NullString `json:"forum"` } -type Credential struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - Handle string `json:"handle"` - CredentialID string `json:"credential_id"` - AuthenticatorAttachment string `json:"authenticator_attachment"` - Origin string `json:"origin"` - Type string `json:"type"` - Transports string `json:"transports"` -} - type CryptoListing struct { ID string `json:"id"` CreatedAt time.Time `json:"created_at"` @@ -151,24 +98,6 @@ type GlobalMarket struct { LastUpdated time.Time `json:"last_updated"` } -type Health struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - EndpointUrl string `json:"endpoint_url"` - EndpointType string `json:"endpoint_type"` - ChainID sql.NullString `json:"chain_id"` - Status string `json:"status"` - ResponseTimeMs sql.NullInt64 `json:"response_time_ms"` - LastChecked time.Time `json:"last_checked"` - NextCheck sql.NullTime `json:"next_check"` - FailureCount int64 `json:"failure_count"` - SuccessCount int64 `json:"success_count"` - ResponseData sql.NullString `json:"response_data"` - ErrorMessage sql.NullString `json:"error_message"` -} - type Price struct { ID string `json:"id"` CreatedAt time.Time `json:"created_at"` @@ -201,43 +130,3 @@ type PriceConversion struct { MarketCap sql.NullFloat64 `json:"market_cap"` LastUpdated time.Time `json:"last_updated"` } - -type Profile struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - Address string `json:"address"` - Handle string `json:"handle"` - Origin string `json:"origin"` - Name string `json:"name"` -} - -type Service struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - Name string `json:"name"` - Description sql.NullString `json:"description"` - ChainID string `json:"chain_id"` - Address string `json:"address"` - OwnerAddress string `json:"owner_address"` - Metadata sql.NullString `json:"metadata"` - Status string `json:"status"` - BlockHeight int64 `json:"block_height"` -} - -type Vault struct { - ID string `json:"id"` - CreatedAt time.Time `json:"created_at"` - UpdatedAt time.Time `json:"updated_at"` - DeletedAt sql.NullTime `json:"deleted_at"` - Handle string `json:"handle"` - Origin string `json:"origin"` - Address string `json:"address"` - Cid string `json:"cid"` - Config string `json:"config"` - SessionID string `json:"session_id"` - RedirectUri string `json:"redirect_uri"` -} diff --git a/sink/models/querier.go b/internal/sink/network/querier.go similarity index 56% rename from sink/models/querier.go rename to internal/sink/network/querier.go index 634e5d6..69ac647 100644 --- a/sink/models/querier.go +++ b/internal/sink/network/querier.go @@ -1,8 +1,8 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 -package models +package network import ( "context" @@ -10,20 +10,7 @@ import ( ) type Querier interface { - CheckHandleExists(ctx context.Context, handle string) (bool, error) CountBlockchainsByChainType(ctx context.Context, dollar_1 sql.NullString) (int64, error) - GetAccountByAddress(ctx context.Context, address string) (Account, error) - GetAccountByController(ctx context.Context, controller string) (Account, error) - GetAccountByID(ctx context.Context, id string) (Account, error) - GetAccountByNumber(ctx context.Context, number int64) (Account, error) - GetAccountByPublicKey(ctx context.Context, publicKey string) (Account, error) - GetAccountBySequence(ctx context.Context, sequence int64) (Account, error) - GetAccountsByChainID(ctx context.Context, chainID string) ([]Account, error) - GetAccountsByController(ctx context.Context, controller string) ([]Account, error) - GetAccountsByHandle(ctx context.Context, handle string) ([]Account, error) - GetAccountsByLabel(ctx context.Context, label string) ([]Account, error) - GetActivityByID(ctx context.Context, id string) (Activity, error) - GetActivityByTxHash(ctx context.Context, txHash sql.NullString) (Activity, error) GetAssetByChainAndSymbol(ctx context.Context, arg GetAssetByChainAndSymbolParams) (Asset, error) GetAssetByID(ctx context.Context, id string) (Asset, error) GetAssetBySymbol(ctx context.Context, symbol string) (Asset, error) @@ -35,16 +22,12 @@ type Querier interface { GetBlockchainEndpoints(ctx context.Context, id string) (GetBlockchainEndpointsRow, error) GetBlockchainExplorer(ctx context.Context, id string) (GetBlockchainExplorerRow, error) GetBlockchainWithAssetInfo(ctx context.Context, id string) (GetBlockchainWithAssetInfoRow, error) - GetCredentialByID(ctx context.Context, credentialID string) (Credential, error) - GetCredentialsByHandle(ctx context.Context, handle string) ([]Credential, error) GetCryptoListingByApiID(ctx context.Context, apiID string) (CryptoListing, error) GetCryptoListingByID(ctx context.Context, id string) (CryptoListing, error) GetCryptoListingBySymbol(ctx context.Context, symbol string) (CryptoListing, error) GetCryptoListingByWebsiteSlug(ctx context.Context, websiteSlug string) (CryptoListing, error) GetFearGreedIndexByID(ctx context.Context, id string) (FearGreedIndex, error) GetGlobalMarketByID(ctx context.Context, id string) (GlobalMarket, error) - GetHealthByEndpoint(ctx context.Context, endpointUrl string) (Health, error) - GetHealthByID(ctx context.Context, id string) (Health, error) GetLatestFearGreedIndex(ctx context.Context) (FearGreedIndex, error) GetLatestGlobalMarket(ctx context.Context) (GlobalMarket, error) GetPriceByAssetID(ctx context.Context, assetID string) (Price, error) @@ -52,47 +35,20 @@ type Querier interface { GetPriceConversionByCurrency(ctx context.Context, arg GetPriceConversionByCurrencyParams) (PriceConversion, error) GetPriceConversionByID(ctx context.Context, id string) (PriceConversion, error) GetPriceConversionsByPriceID(ctx context.Context, priceID string) ([]PriceConversion, error) - GetProfileByAddress(ctx context.Context, address string) (Profile, error) - GetProfileByHandle(ctx context.Context, handle string) (Profile, error) - GetProfileByID(ctx context.Context, id string) (Profile, error) - GetServiceByAddress(ctx context.Context, address string) (Service, error) - GetServiceByChainAndAddress(ctx context.Context, arg GetServiceByChainAndAddressParams) (Service, error) - GetServiceByID(ctx context.Context, id string) (Service, error) - GetVaultByID(ctx context.Context, id string) (Vault, error) - GetVaultConfigByCID(ctx context.Context, cid string) (Vault, error) - GetVaultRedirectURIBySessionID(ctx context.Context, sessionID string) (string, error) - GetVaultsByHandle(ctx context.Context, handle string) ([]Vault, error) - // ACCOUNT QUERIES - InsertAccount(ctx context.Context, arg InsertAccountParams) (Account, error) - // ACTIVITY QUERIES - InsertActivity(ctx context.Context, arg InsertActivityParams) (Activity, error) // ASSET QUERIES InsertAsset(ctx context.Context, arg InsertAssetParams) (Asset, error) // BLOCKCHAIN QUERIES InsertBlockchain(ctx context.Context, arg InsertBlockchainParams) (Blockchain, error) - // CREDENTIAL QUERIES - InsertCredential(ctx context.Context, arg InsertCredentialParams) (Credential, error) // CRYPTO LISTINGS QUERIES (NEW) InsertCryptoListing(ctx context.Context, arg InsertCryptoListingParams) (CryptoListing, error) // FEAR AND GREED INDEX QUERIES (NEW) InsertFearGreedIndex(ctx context.Context, arg InsertFearGreedIndexParams) (FearGreedIndex, error) // GLOBAL MARKET QUERIES (NEW) InsertGlobalMarket(ctx context.Context, arg InsertGlobalMarketParams) (GlobalMarket, error) - // HEALTH QUERIES - InsertHealth(ctx context.Context, arg InsertHealthParams) (Health, error) // PRICE QUERIES (UPDATED) InsertPrice(ctx context.Context, arg InsertPriceParams) (Price, error) // PRICE CONVERSION QUERIES (NEW) InsertPriceConversion(ctx context.Context, arg InsertPriceConversionParams) (PriceConversion, error) - // PROFILE QUERIES - InsertProfile(ctx context.Context, arg InsertProfileParams) (Profile, error) - // SERVICE QUERIES - InsertService(ctx context.Context, arg InsertServiceParams) (Service, error) - // VAULT QUERIES - InsertVault(ctx context.Context, arg InsertVaultParams) (Vault, error) - ListActivitiesByAccount(ctx context.Context, arg ListActivitiesByAccountParams) ([]Activity, error) - ListActivitiesByStatus(ctx context.Context, arg ListActivitiesByStatusParams) ([]Activity, error) - ListActivitiesByType(ctx context.Context, arg ListActivitiesByTypeParams) ([]Activity, error) ListAllBlockchains(ctx context.Context) ([]Blockchain, error) ListAssetsByChain(ctx context.Context, chainID string) ([]Asset, error) ListAssetsWithLatestPrices(ctx context.Context, arg ListAssetsWithLatestPricesParams) ([]ListAssetsWithLatestPricesRow, error) @@ -103,34 +59,16 @@ type Querier interface { ListBlockchainsWithMobileSupport(ctx context.Context) ([]Blockchain, error) ListBlockchainsWithStaking(ctx context.Context) ([]Blockchain, error) ListCryptoListings(ctx context.Context, arg ListCryptoListingsParams) ([]CryptoListing, error) - ListDelegatorAccounts(ctx context.Context) ([]Account, error) ListFearGreedIndexHistory(ctx context.Context, arg ListFearGreedIndexHistoryParams) ([]FearGreedIndex, error) ListGlobalMarketHistory(ctx context.Context, arg ListGlobalMarketHistoryParams) ([]GlobalMarket, error) - ListHealthByChain(ctx context.Context, arg ListHealthByChainParams) ([]Health, error) - ListHealthByStatus(ctx context.Context, arg ListHealthByStatusParams) ([]Health, error) - ListHealthChecksNeedingUpdate(ctx context.Context, limit int64) ([]Health, error) ListPriceHistoryByAssetID(ctx context.Context, arg ListPriceHistoryByAssetIDParams) ([]Price, error) - ListProfiles(ctx context.Context, arg ListProfilesParams) ([]Profile, error) - ListServicesByChain(ctx context.Context, arg ListServicesByChainParams) ([]Service, error) - ListServicesByOwner(ctx context.Context, arg ListServicesByOwnerParams) ([]Service, error) - ListValidatorAccounts(ctx context.Context) ([]Account, error) SearchBlockchains(ctx context.Context, arg SearchBlockchainsParams) ([]Blockchain, error) - SoftDeleteAccount(ctx context.Context, id string) error - SoftDeleteActivity(ctx context.Context, id string) error SoftDeleteAsset(ctx context.Context, id string) error SoftDeleteBlockchain(ctx context.Context, id string) error - SoftDeleteCredential(ctx context.Context, credentialID string) error SoftDeleteCryptoListing(ctx context.Context, id string) error SoftDeleteFearGreedIndex(ctx context.Context, id string) error SoftDeleteGlobalMarket(ctx context.Context, id string) error - SoftDeleteHealth(ctx context.Context, id string) error SoftDeletePriceConversion(ctx context.Context, id string) error - SoftDeleteProfile(ctx context.Context, address string) error - SoftDeleteService(ctx context.Context, id string) error - SoftDeleteVault(ctx context.Context, id string) error - UpdateAccountLabel(ctx context.Context, arg UpdateAccountLabelParams) (Account, error) - UpdateAccountSequence(ctx context.Context, arg UpdateAccountSequenceParams) (Account, error) - UpdateActivityStatus(ctx context.Context, arg UpdateActivityStatusParams) (Activity, error) UpdateAsset(ctx context.Context, arg UpdateAssetParams) (Asset, error) UpdateBlockchain(ctx context.Context, arg UpdateBlockchainParams) (Blockchain, error) UpdateBlockchainDescriptions(ctx context.Context, arg UpdateBlockchainDescriptionsParams) (Blockchain, error) @@ -142,12 +80,8 @@ type Querier interface { UpdateCryptoListing(ctx context.Context, arg UpdateCryptoListingParams) (CryptoListing, error) UpdateFearGreedIndex(ctx context.Context, arg UpdateFearGreedIndexParams) (FearGreedIndex, error) UpdateGlobalMarket(ctx context.Context, arg UpdateGlobalMarketParams) (GlobalMarket, error) - UpdateHealthCheck(ctx context.Context, arg UpdateHealthCheckParams) (Health, error) UpdatePrice(ctx context.Context, arg UpdatePriceParams) (Price, error) UpdatePriceConversion(ctx context.Context, arg UpdatePriceConversionParams) (PriceConversion, error) - UpdateProfile(ctx context.Context, arg UpdateProfileParams) (Profile, error) - UpdateService(ctx context.Context, arg UpdateServiceParams) (Service, error) - UpdateVault(ctx context.Context, arg UpdateVaultParams) (Vault, error) } var _ Querier = (*Queries)(nil) diff --git a/sink/migrations/query.sql b/internal/sink/network/query.sql similarity index 61% rename from sink/migrations/query.sql rename to internal/sink/network/query.sql index 61446b4..dfdf621 100644 --- a/sink/migrations/query.sql +++ b/internal/sink/network/query.sql @@ -1,237 +1,3 @@ --- PROFILE QUERIES --- name: InsertProfile :one -INSERT INTO profiles ( - address, - handle, - origin, - name -) VALUES (?, ?, ?, ?) -RETURNING *; - --- name: GetProfileByID :one -SELECT * FROM profiles -WHERE id = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetProfileByAddress :one -SELECT * FROM profiles -WHERE address = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetProfileByHandle :one -SELECT * FROM profiles -WHERE handle = ? -AND deleted_at IS NULL -LIMIT 1; - --- name: CheckHandleExists :one -SELECT COUNT(*) > 0 as handle_exists FROM profiles -WHERE handle = ? -AND deleted_at IS NULL; - --- name: UpdateProfile :one -UPDATE profiles -SET - name = ?, - handle = ?, - updated_at = CURRENT_TIMESTAMP -WHERE address = ? -AND deleted_at IS NULL -RETURNING *; - --- name: SoftDeleteProfile :exec -UPDATE profiles -SET deleted_at = CURRENT_TIMESTAMP -WHERE address = ?; - --- name: ListProfiles :many -SELECT * FROM profiles -WHERE deleted_at IS NULL -ORDER BY created_at DESC -LIMIT ? OFFSET ?; - --- VAULT QUERIES --- name: InsertVault :one -INSERT INTO vaults ( - handle, - origin, - address, - cid, - config, - session_id, - redirect_uri -) VALUES (?, ?, ?, ?, ?, ?, ?) -RETURNING *; - --- name: GetVaultByID :one -SELECT * FROM vaults -WHERE id = ? -AND deleted_at IS NULL -LIMIT 1; - --- name: GetVaultsByHandle :many -SELECT * FROM vaults -WHERE handle = ? -AND deleted_at IS NULL -ORDER BY created_at DESC; - --- name: GetVaultConfigByCID :one -SELECT * FROM vaults -WHERE cid = ? -AND deleted_at IS NULL -LIMIT 1; - --- name: GetVaultRedirectURIBySessionID :one -SELECT redirect_uri FROM vaults -WHERE session_id = ? -AND deleted_at IS NULL -LIMIT 1; - --- name: UpdateVault :one -UPDATE vaults -SET - config = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING *; - --- name: SoftDeleteVault :exec -UPDATE vaults -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ?; - --- ACCOUNT QUERIES --- name: InsertAccount :one -INSERT INTO accounts ( - number, - sequence, - address, - public_key, - chain_id, - block_created, - controller, - label, - is_subsidiary, - is_validator, - is_delegator, - is_accountable -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -RETURNING *; - --- name: GetAccountByID :one -SELECT * FROM accounts -WHERE id = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetAccountByAddress :one -SELECT * FROM accounts -WHERE address = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetAccountsByHandle :many -SELECT * FROM accounts -WHERE handle = ? AND deleted_at IS NULL -ORDER BY created_at DESC; - --- name: GetAccountByController :one -SELECT * FROM accounts -WHERE controller = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetAccountByPublicKey :one -SELECT * FROM accounts -WHERE public_key = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetAccountByNumber :one -SELECT * FROM accounts -WHERE number = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetAccountBySequence :one -SELECT * FROM accounts -WHERE sequence = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetAccountsByChainID :many -SELECT * FROM accounts -WHERE chain_id = ? AND deleted_at IS NULL -ORDER BY sequence DESC; - --- name: GetAccountsByController :many -SELECT * FROM accounts -WHERE controller = ? AND deleted_at IS NULL -ORDER BY created_at DESC; - --- name: GetAccountsByLabel :many -SELECT * FROM accounts -WHERE label = ? AND deleted_at IS NULL -ORDER BY created_at DESC; - --- name: UpdateAccountSequence :one -UPDATE accounts -SET - sequence = ?, - updated_at = CURRENT_TIMESTAMP -WHERE address = ? -AND deleted_at IS NULL -RETURNING *; - --- name: UpdateAccountLabel :one -UPDATE accounts -SET - label = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING *; - --- name: SoftDeleteAccount :exec -UPDATE accounts -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ?; - --- name: ListValidatorAccounts :many -SELECT * FROM accounts -WHERE is_validator = 1 -AND deleted_at IS NULL -ORDER BY created_at DESC; - --- name: ListDelegatorAccounts :many -SELECT * FROM accounts -WHERE is_delegator = 1 -AND deleted_at IS NULL -ORDER BY created_at DESC; - --- CREDENTIAL QUERIES --- name: InsertCredential :one -INSERT INTO credentials ( - handle, - credential_id, - authenticator_attachment, - origin, - type, - transports -) VALUES (?, ?, ?, ?, ?, ?) -RETURNING *; - --- name: GetCredentialsByHandle :many -SELECT * FROM credentials -WHERE handle = ? -AND deleted_at IS NULL; - --- name: GetCredentialByID :one -SELECT * FROM credentials -WHERE credential_id = ? -AND deleted_at IS NULL -LIMIT 1; - --- name: SoftDeleteCredential :exec -UPDATE credentials -SET deleted_at = CURRENT_TIMESTAMP -WHERE credential_id = ?; - -- ASSET QUERIES -- name: InsertAsset :one INSERT INTO assets ( @@ -570,199 +336,6 @@ UPDATE crypto_listings SET deleted_at = CURRENT_TIMESTAMP WHERE id = ?; --- SERVICE QUERIES --- name: InsertService :one -INSERT INTO services ( - name, - description, - chain_id, - address, - owner_address, - metadata, - status, - block_height -) VALUES (?, ?, ?, ?, ?, ?, ?, ?) -RETURNING *; - --- name: GetServiceByID :one -SELECT * FROM services -WHERE id = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetServiceByAddress :one -SELECT * FROM services -WHERE address = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetServiceByChainAndAddress :one -SELECT * FROM services -WHERE chain_id = ? AND address = ? AND deleted_at IS NULL -LIMIT 1; - --- name: ListServicesByChain :many -SELECT * FROM services -WHERE chain_id = ? AND deleted_at IS NULL -ORDER BY name ASC -LIMIT ? OFFSET ?; - --- name: ListServicesByOwner :many -SELECT * FROM services -WHERE owner_address = ? AND deleted_at IS NULL -ORDER BY created_at DESC -LIMIT ? OFFSET ?; - --- name: UpdateService :one -UPDATE services -SET - name = ?, - description = ?, - owner_address = ?, - metadata = ?, - status = ?, - block_height = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING *; - --- name: SoftDeleteService :exec -UPDATE services -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ?; - --- ACTIVITY QUERIES --- name: InsertActivity :one -INSERT INTO activities ( - account_id, - tx_hash, - tx_type, - status, - amount, - fee, - gas_used, - gas_wanted, - memo, - block_height, - timestamp, - raw_log, - error -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -RETURNING *; - --- name: GetActivityByID :one -SELECT * FROM activities -WHERE id = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetActivityByTxHash :one -SELECT * FROM activities -WHERE tx_hash = ? AND deleted_at IS NULL -LIMIT 1; - --- name: ListActivitiesByAccount :many -SELECT * FROM activities -WHERE account_id = ? AND deleted_at IS NULL -ORDER BY timestamp DESC -LIMIT ? OFFSET ?; - --- name: ListActivitiesByType :many -SELECT * FROM activities -WHERE tx_type = ? AND deleted_at IS NULL -ORDER BY timestamp DESC -LIMIT ? OFFSET ?; - --- name: ListActivitiesByStatus :many -SELECT * FROM activities -WHERE status = ? AND deleted_at IS NULL -ORDER BY timestamp DESC -LIMIT ? OFFSET ?; - --- name: UpdateActivityStatus :one -UPDATE activities -SET - status = ?, - tx_hash = ?, - block_height = ?, - gas_used = ?, - raw_log = ?, - error = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING *; - --- name: SoftDeleteActivity :exec -UPDATE activities -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ?; - --- HEALTH QUERIES --- name: InsertHealth :one -INSERT INTO health ( - endpoint_url, - endpoint_type, - chain_id, - status, - response_time_ms, - last_checked, - next_check, - failure_count, - success_count, - response_data, - error_message -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -RETURNING *; - --- name: GetHealthByID :one -SELECT * FROM health -WHERE id = ? AND deleted_at IS NULL -LIMIT 1; - --- name: GetHealthByEndpoint :one -SELECT * FROM health -WHERE endpoint_url = ? AND deleted_at IS NULL -ORDER BY last_checked DESC -LIMIT 1; - --- name: ListHealthByChain :many -SELECT * FROM health -WHERE chain_id = ? AND deleted_at IS NULL -ORDER BY last_checked DESC -LIMIT ? OFFSET ?; - --- name: ListHealthByStatus :many -SELECT * FROM health -WHERE status = ? AND deleted_at IS NULL -ORDER BY last_checked DESC -LIMIT ? OFFSET ?; - --- name: ListHealthChecksNeedingUpdate :many -SELECT * FROM health -WHERE next_check <= CURRENT_TIMESTAMP AND deleted_at IS NULL -ORDER BY next_check ASC -LIMIT ?; - --- name: UpdateHealthCheck :one -UPDATE health -SET - status = ?, - response_time_ms = ?, - last_checked = CURRENT_TIMESTAMP, - next_check = ?, - failure_count = CASE WHEN status = 'failed' THEN failure_count + 1 ELSE failure_count END, - success_count = CASE WHEN status = 'success' THEN success_count + 1 ELSE success_count END, - response_data = ?, - error_message = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING *; - --- name: SoftDeleteHealth :exec -UPDATE health -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ?; - -- BLOCKCHAIN QUERIES -- name: InsertBlockchain :one INSERT INTO blockchains ( diff --git a/sink/models/query.sql.go b/internal/sink/network/query.sql.go similarity index 64% rename from sink/models/query.sql.go rename to internal/sink/network/query.sql.go index 8e2ff32..9e93c8a 100644 --- a/sink/models/query.sql.go +++ b/internal/sink/network/query.sql.go @@ -1,9 +1,9 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 // source: query.sql -package models +package network import ( "context" @@ -11,19 +11,6 @@ import ( "time" ) -const checkHandleExists = `-- name: CheckHandleExists :one -SELECT COUNT(*) > 0 as handle_exists FROM profiles -WHERE handle = ? -AND deleted_at IS NULL -` - -func (q *Queries) CheckHandleExists(ctx context.Context, handle string) (bool, error) { - row := q.db.QueryRowContext(ctx, checkHandleExists, handle) - var handle_exists bool - err := row.Scan(&handle_exists) - return handle_exists, err -} - const countBlockchainsByChainType = `-- name: CountBlockchainsByChainType :one SELECT COUNT(*) as count FROM blockchains WHERE chain_type LIKE '%' || ? || '%' AND deleted_at IS NULL @@ -36,442 +23,6 @@ func (q *Queries) CountBlockchainsByChainType(ctx context.Context, dollar_1 sql. return count, err } -const getAccountByAddress = `-- name: GetAccountByAddress :one -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE address = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetAccountByAddress(ctx context.Context, address string) (Account, error) { - row := q.db.QueryRowContext(ctx, getAccountByAddress, address) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const getAccountByController = `-- name: GetAccountByController :one -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE controller = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetAccountByController(ctx context.Context, controller string) (Account, error) { - row := q.db.QueryRowContext(ctx, getAccountByController, controller) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const getAccountByID = `-- name: GetAccountByID :one -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE id = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetAccountByID(ctx context.Context, id string) (Account, error) { - row := q.db.QueryRowContext(ctx, getAccountByID, id) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const getAccountByNumber = `-- name: GetAccountByNumber :one -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE number = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetAccountByNumber(ctx context.Context, number int64) (Account, error) { - row := q.db.QueryRowContext(ctx, getAccountByNumber, number) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const getAccountByPublicKey = `-- name: GetAccountByPublicKey :one -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE public_key = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetAccountByPublicKey(ctx context.Context, publicKey string) (Account, error) { - row := q.db.QueryRowContext(ctx, getAccountByPublicKey, publicKey) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const getAccountBySequence = `-- name: GetAccountBySequence :one -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE sequence = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetAccountBySequence(ctx context.Context, sequence int64) (Account, error) { - row := q.db.QueryRowContext(ctx, getAccountBySequence, sequence) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const getAccountsByChainID = `-- name: GetAccountsByChainID :many -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE chain_id = ? AND deleted_at IS NULL -ORDER BY sequence DESC -` - -func (q *Queries) GetAccountsByChainID(ctx context.Context, chainID string) ([]Account, error) { - rows, err := q.db.QueryContext(ctx, getAccountsByChainID, chainID) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Account - for rows.Next() { - var i Account - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getAccountsByController = `-- name: GetAccountsByController :many -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE controller = ? AND deleted_at IS NULL -ORDER BY created_at DESC -` - -func (q *Queries) GetAccountsByController(ctx context.Context, controller string) ([]Account, error) { - rows, err := q.db.QueryContext(ctx, getAccountsByController, controller) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Account - for rows.Next() { - var i Account - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getAccountsByHandle = `-- name: GetAccountsByHandle :many -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE handle = ? AND deleted_at IS NULL -ORDER BY created_at DESC -` - -func (q *Queries) GetAccountsByHandle(ctx context.Context, handle string) ([]Account, error) { - rows, err := q.db.QueryContext(ctx, getAccountsByHandle, handle) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Account - for rows.Next() { - var i Account - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getAccountsByLabel = `-- name: GetAccountsByLabel :many -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE label = ? AND deleted_at IS NULL -ORDER BY created_at DESC -` - -func (q *Queries) GetAccountsByLabel(ctx context.Context, label string) ([]Account, error) { - rows, err := q.db.QueryContext(ctx, getAccountsByLabel, label) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Account - for rows.Next() { - var i Account - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const getActivityByID = `-- name: GetActivityByID :one -SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities -WHERE id = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetActivityByID(ctx context.Context, id string) (Activity, error) { - row := q.db.QueryRowContext(ctx, getActivityByID, id) - var i Activity - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ) - return i, err -} - -const getActivityByTxHash = `-- name: GetActivityByTxHash :one -SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities -WHERE tx_hash = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetActivityByTxHash(ctx context.Context, txHash sql.NullString) (Activity, error) { - row := q.db.QueryRowContext(ctx, getActivityByTxHash, txHash) - var i Activity - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ) - return i, err -} - const getAssetByChainAndSymbol = `-- name: GetAssetByChainAndSymbol :one SELECT id, created_at, updated_at, deleted_at, name, symbol, decimals, chain_id, channel, asset_type, coingecko_id FROM assets WHERE chain_id = ? AND symbol = ? AND deleted_at IS NULL @@ -990,71 +541,6 @@ func (q *Queries) GetBlockchainWithAssetInfo(ctx context.Context, id string) (Ge return i, err } -const getCredentialByID = `-- name: GetCredentialByID :one -SELECT id, created_at, updated_at, deleted_at, handle, credential_id, authenticator_attachment, origin, type, transports FROM credentials -WHERE credential_id = ? -AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetCredentialByID(ctx context.Context, credentialID string) (Credential, error) { - row := q.db.QueryRowContext(ctx, getCredentialByID, credentialID) - var i Credential - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.CredentialID, - &i.AuthenticatorAttachment, - &i.Origin, - &i.Type, - &i.Transports, - ) - return i, err -} - -const getCredentialsByHandle = `-- name: GetCredentialsByHandle :many -SELECT id, created_at, updated_at, deleted_at, handle, credential_id, authenticator_attachment, origin, type, transports FROM credentials -WHERE handle = ? -AND deleted_at IS NULL -` - -func (q *Queries) GetCredentialsByHandle(ctx context.Context, handle string) ([]Credential, error) { - rows, err := q.db.QueryContext(ctx, getCredentialsByHandle, handle) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Credential - for rows.Next() { - var i Credential - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.CredentialID, - &i.AuthenticatorAttachment, - &i.Origin, - &i.Type, - &i.Transports, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const getCryptoListingByApiID = `-- name: GetCryptoListingByApiID :one SELECT id, created_at, updated_at, deleted_at, api_id, name, symbol, website_slug FROM crypto_listings WHERE api_id = ? AND deleted_at IS NULL @@ -1190,65 +676,6 @@ func (q *Queries) GetGlobalMarketByID(ctx context.Context, id string) (GlobalMar return i, err } -const getHealthByEndpoint = `-- name: GetHealthByEndpoint :one -SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health -WHERE endpoint_url = ? AND deleted_at IS NULL -ORDER BY last_checked DESC -LIMIT 1 -` - -func (q *Queries) GetHealthByEndpoint(ctx context.Context, endpointUrl string) (Health, error) { - row := q.db.QueryRowContext(ctx, getHealthByEndpoint, endpointUrl) - var i Health - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ) - return i, err -} - -const getHealthByID = `-- name: GetHealthByID :one -SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health -WHERE id = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetHealthByID(ctx context.Context, id string) (Health, error) { - row := q.db.QueryRowContext(ctx, getHealthByID, id) - var i Health - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ) - return i, err -} - const getLatestFearGreedIndex = `-- name: GetLatestFearGreedIndex :one SELECT id, created_at, updated_at, deleted_at, value, value_classification, timestamp, time_until_update FROM fear_greed_index WHERE deleted_at IS NULL @@ -1454,411 +881,6 @@ func (q *Queries) GetPriceConversionsByPriceID(ctx context.Context, priceID stri return items, nil } -const getProfileByAddress = `-- name: GetProfileByAddress :one -SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles -WHERE address = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetProfileByAddress(ctx context.Context, address string) (Profile, error) { - row := q.db.QueryRowContext(ctx, getProfileByAddress, address) - var i Profile - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Address, - &i.Handle, - &i.Origin, - &i.Name, - ) - return i, err -} - -const getProfileByHandle = `-- name: GetProfileByHandle :one -SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles -WHERE handle = ? -AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetProfileByHandle(ctx context.Context, handle string) (Profile, error) { - row := q.db.QueryRowContext(ctx, getProfileByHandle, handle) - var i Profile - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Address, - &i.Handle, - &i.Origin, - &i.Name, - ) - return i, err -} - -const getProfileByID = `-- name: GetProfileByID :one -SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles -WHERE id = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetProfileByID(ctx context.Context, id string) (Profile, error) { - row := q.db.QueryRowContext(ctx, getProfileByID, id) - var i Profile - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Address, - &i.Handle, - &i.Origin, - &i.Name, - ) - return i, err -} - -const getServiceByAddress = `-- name: GetServiceByAddress :one -SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services -WHERE address = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetServiceByAddress(ctx context.Context, address string) (Service, error) { - row := q.db.QueryRowContext(ctx, getServiceByAddress, address) - var i Service - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ) - return i, err -} - -const getServiceByChainAndAddress = `-- name: GetServiceByChainAndAddress :one -SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services -WHERE chain_id = ? AND address = ? AND deleted_at IS NULL -LIMIT 1 -` - -type GetServiceByChainAndAddressParams struct { - ChainID string `json:"chain_id"` - Address string `json:"address"` -} - -func (q *Queries) GetServiceByChainAndAddress(ctx context.Context, arg GetServiceByChainAndAddressParams) (Service, error) { - row := q.db.QueryRowContext(ctx, getServiceByChainAndAddress, arg.ChainID, arg.Address) - var i Service - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ) - return i, err -} - -const getServiceByID = `-- name: GetServiceByID :one -SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services -WHERE id = ? AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetServiceByID(ctx context.Context, id string) (Service, error) { - row := q.db.QueryRowContext(ctx, getServiceByID, id) - var i Service - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ) - return i, err -} - -const getVaultByID = `-- name: GetVaultByID :one -SELECT id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri FROM vaults -WHERE id = ? -AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetVaultByID(ctx context.Context, id string) (Vault, error) { - row := q.db.QueryRowContext(ctx, getVaultByID, id) - var i Vault - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.Origin, - &i.Address, - &i.Cid, - &i.Config, - &i.SessionID, - &i.RedirectUri, - ) - return i, err -} - -const getVaultConfigByCID = `-- name: GetVaultConfigByCID :one -SELECT id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri FROM vaults -WHERE cid = ? -AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetVaultConfigByCID(ctx context.Context, cid string) (Vault, error) { - row := q.db.QueryRowContext(ctx, getVaultConfigByCID, cid) - var i Vault - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.Origin, - &i.Address, - &i.Cid, - &i.Config, - &i.SessionID, - &i.RedirectUri, - ) - return i, err -} - -const getVaultRedirectURIBySessionID = `-- name: GetVaultRedirectURIBySessionID :one -SELECT redirect_uri FROM vaults -WHERE session_id = ? -AND deleted_at IS NULL -LIMIT 1 -` - -func (q *Queries) GetVaultRedirectURIBySessionID(ctx context.Context, sessionID string) (string, error) { - row := q.db.QueryRowContext(ctx, getVaultRedirectURIBySessionID, sessionID) - var redirect_uri string - err := row.Scan(&redirect_uri) - return redirect_uri, err -} - -const getVaultsByHandle = `-- name: GetVaultsByHandle :many -SELECT id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri FROM vaults -WHERE handle = ? -AND deleted_at IS NULL -ORDER BY created_at DESC -` - -func (q *Queries) GetVaultsByHandle(ctx context.Context, handle string) ([]Vault, error) { - rows, err := q.db.QueryContext(ctx, getVaultsByHandle, handle) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Vault - for rows.Next() { - var i Vault - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.Origin, - &i.Address, - &i.Cid, - &i.Config, - &i.SessionID, - &i.RedirectUri, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const insertAccount = `-- name: InsertAccount :one -INSERT INTO accounts ( - number, - sequence, - address, - public_key, - chain_id, - block_created, - controller, - label, - is_subsidiary, - is_validator, - is_delegator, - is_accountable -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable -` - -type InsertAccountParams struct { - Number int64 `json:"number"` - Sequence int64 `json:"sequence"` - Address string `json:"address"` - PublicKey string `json:"public_key"` - ChainID string `json:"chain_id"` - BlockCreated int64 `json:"block_created"` - Controller string `json:"controller"` - Label string `json:"label"` - IsSubsidiary bool `json:"is_subsidiary"` - IsValidator bool `json:"is_validator"` - IsDelegator bool `json:"is_delegator"` - IsAccountable bool `json:"is_accountable"` -} - -// ACCOUNT QUERIES -func (q *Queries) InsertAccount(ctx context.Context, arg InsertAccountParams) (Account, error) { - row := q.db.QueryRowContext(ctx, insertAccount, - arg.Number, - arg.Sequence, - arg.Address, - arg.PublicKey, - arg.ChainID, - arg.BlockCreated, - arg.Controller, - arg.Label, - arg.IsSubsidiary, - arg.IsValidator, - arg.IsDelegator, - arg.IsAccountable, - ) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const insertActivity = `-- name: InsertActivity :one -INSERT INTO activities ( - account_id, - tx_hash, - tx_type, - status, - amount, - fee, - gas_used, - gas_wanted, - memo, - block_height, - timestamp, - raw_log, - error -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error -` - -type InsertActivityParams struct { - AccountID string `json:"account_id"` - TxHash sql.NullString `json:"tx_hash"` - TxType string `json:"tx_type"` - Status string `json:"status"` - Amount sql.NullString `json:"amount"` - Fee sql.NullString `json:"fee"` - GasUsed sql.NullInt64 `json:"gas_used"` - GasWanted sql.NullInt64 `json:"gas_wanted"` - Memo sql.NullString `json:"memo"` - BlockHeight sql.NullInt64 `json:"block_height"` - Timestamp time.Time `json:"timestamp"` - RawLog sql.NullString `json:"raw_log"` - Error sql.NullString `json:"error"` -} - -// ACTIVITY QUERIES -func (q *Queries) InsertActivity(ctx context.Context, arg InsertActivityParams) (Activity, error) { - row := q.db.QueryRowContext(ctx, insertActivity, - arg.AccountID, - arg.TxHash, - arg.TxType, - arg.Status, - arg.Amount, - arg.Fee, - arg.GasUsed, - arg.GasWanted, - arg.Memo, - arg.BlockHeight, - arg.Timestamp, - arg.RawLog, - arg.Error, - ) - var i Activity - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ) - return i, err -} - const insertAsset = `-- name: InsertAsset :one INSERT INTO assets ( name, @@ -2066,53 +1088,6 @@ func (q *Queries) InsertBlockchain(ctx context.Context, arg InsertBlockchainPara return i, err } -const insertCredential = `-- name: InsertCredential :one -INSERT INTO credentials ( - handle, - credential_id, - authenticator_attachment, - origin, - type, - transports -) VALUES (?, ?, ?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, handle, credential_id, authenticator_attachment, origin, type, transports -` - -type InsertCredentialParams struct { - Handle string `json:"handle"` - CredentialID string `json:"credential_id"` - AuthenticatorAttachment string `json:"authenticator_attachment"` - Origin string `json:"origin"` - Type string `json:"type"` - Transports string `json:"transports"` -} - -// CREDENTIAL QUERIES -func (q *Queries) InsertCredential(ctx context.Context, arg InsertCredentialParams) (Credential, error) { - row := q.db.QueryRowContext(ctx, insertCredential, - arg.Handle, - arg.CredentialID, - arg.AuthenticatorAttachment, - arg.Origin, - arg.Type, - arg.Transports, - ) - var i Credential - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.CredentialID, - &i.AuthenticatorAttachment, - &i.Origin, - &i.Type, - &i.Transports, - ) - return i, err -} - const insertCryptoListing = `-- name: InsertCryptoListing :one INSERT INTO crypto_listings ( api_id, @@ -2242,73 +1217,6 @@ func (q *Queries) InsertGlobalMarket(ctx context.Context, arg InsertGlobalMarket return i, err } -const insertHealth = `-- name: InsertHealth :one -INSERT INTO health ( - endpoint_url, - endpoint_type, - chain_id, - status, - response_time_ms, - last_checked, - next_check, - failure_count, - success_count, - response_data, - error_message -) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message -` - -type InsertHealthParams struct { - EndpointUrl string `json:"endpoint_url"` - EndpointType string `json:"endpoint_type"` - ChainID sql.NullString `json:"chain_id"` - Status string `json:"status"` - ResponseTimeMs sql.NullInt64 `json:"response_time_ms"` - LastChecked time.Time `json:"last_checked"` - NextCheck sql.NullTime `json:"next_check"` - FailureCount int64 `json:"failure_count"` - SuccessCount int64 `json:"success_count"` - ResponseData sql.NullString `json:"response_data"` - ErrorMessage sql.NullString `json:"error_message"` -} - -// HEALTH QUERIES -func (q *Queries) InsertHealth(ctx context.Context, arg InsertHealthParams) (Health, error) { - row := q.db.QueryRowContext(ctx, insertHealth, - arg.EndpointUrl, - arg.EndpointType, - arg.ChainID, - arg.Status, - arg.ResponseTimeMs, - arg.LastChecked, - arg.NextCheck, - arg.FailureCount, - arg.SuccessCount, - arg.ResponseData, - arg.ErrorMessage, - ) - var i Health - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ) - return i, err -} - const insertPrice = `-- name: InsertPrice :one INSERT INTO prices ( asset_id, @@ -2431,313 +1339,6 @@ func (q *Queries) InsertPriceConversion(ctx context.Context, arg InsertPriceConv return i, err } -const insertProfile = `-- name: InsertProfile :one -INSERT INTO profiles ( - address, - handle, - origin, - name -) VALUES (?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, address, handle, origin, name -` - -type InsertProfileParams struct { - Address string `json:"address"` - Handle string `json:"handle"` - Origin string `json:"origin"` - Name string `json:"name"` -} - -// PROFILE QUERIES -func (q *Queries) InsertProfile(ctx context.Context, arg InsertProfileParams) (Profile, error) { - row := q.db.QueryRowContext(ctx, insertProfile, - arg.Address, - arg.Handle, - arg.Origin, - arg.Name, - ) - var i Profile - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Address, - &i.Handle, - &i.Origin, - &i.Name, - ) - return i, err -} - -const insertService = `-- name: InsertService :one -INSERT INTO services ( - name, - description, - chain_id, - address, - owner_address, - metadata, - status, - block_height -) VALUES (?, ?, ?, ?, ?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height -` - -type InsertServiceParams struct { - Name string `json:"name"` - Description sql.NullString `json:"description"` - ChainID string `json:"chain_id"` - Address string `json:"address"` - OwnerAddress string `json:"owner_address"` - Metadata sql.NullString `json:"metadata"` - Status string `json:"status"` - BlockHeight int64 `json:"block_height"` -} - -// SERVICE QUERIES -func (q *Queries) InsertService(ctx context.Context, arg InsertServiceParams) (Service, error) { - row := q.db.QueryRowContext(ctx, insertService, - arg.Name, - arg.Description, - arg.ChainID, - arg.Address, - arg.OwnerAddress, - arg.Metadata, - arg.Status, - arg.BlockHeight, - ) - var i Service - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ) - return i, err -} - -const insertVault = `-- name: InsertVault :one -INSERT INTO vaults ( - handle, - origin, - address, - cid, - config, - session_id, - redirect_uri -) VALUES (?, ?, ?, ?, ?, ?, ?) -RETURNING id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri -` - -type InsertVaultParams struct { - Handle string `json:"handle"` - Origin string `json:"origin"` - Address string `json:"address"` - Cid string `json:"cid"` - Config string `json:"config"` - SessionID string `json:"session_id"` - RedirectUri string `json:"redirect_uri"` -} - -// VAULT QUERIES -func (q *Queries) InsertVault(ctx context.Context, arg InsertVaultParams) (Vault, error) { - row := q.db.QueryRowContext(ctx, insertVault, - arg.Handle, - arg.Origin, - arg.Address, - arg.Cid, - arg.Config, - arg.SessionID, - arg.RedirectUri, - ) - var i Vault - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.Origin, - &i.Address, - &i.Cid, - &i.Config, - &i.SessionID, - &i.RedirectUri, - ) - return i, err -} - -const listActivitiesByAccount = `-- name: ListActivitiesByAccount :many -SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities -WHERE account_id = ? AND deleted_at IS NULL -ORDER BY timestamp DESC -LIMIT ? OFFSET ? -` - -type ListActivitiesByAccountParams struct { - AccountID string `json:"account_id"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListActivitiesByAccount(ctx context.Context, arg ListActivitiesByAccountParams) ([]Activity, error) { - rows, err := q.db.QueryContext(ctx, listActivitiesByAccount, arg.AccountID, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Activity - for rows.Next() { - var i Activity - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listActivitiesByStatus = `-- name: ListActivitiesByStatus :many -SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities -WHERE status = ? AND deleted_at IS NULL -ORDER BY timestamp DESC -LIMIT ? OFFSET ? -` - -type ListActivitiesByStatusParams struct { - Status string `json:"status"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListActivitiesByStatus(ctx context.Context, arg ListActivitiesByStatusParams) ([]Activity, error) { - rows, err := q.db.QueryContext(ctx, listActivitiesByStatus, arg.Status, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Activity - for rows.Next() { - var i Activity - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listActivitiesByType = `-- name: ListActivitiesByType :many -SELECT id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error FROM activities -WHERE tx_type = ? AND deleted_at IS NULL -ORDER BY timestamp DESC -LIMIT ? OFFSET ? -` - -type ListActivitiesByTypeParams struct { - TxType string `json:"tx_type"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListActivitiesByType(ctx context.Context, arg ListActivitiesByTypeParams) ([]Activity, error) { - rows, err := q.db.QueryContext(ctx, listActivitiesByType, arg.TxType, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Activity - for rows.Next() { - var i Activity - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const listAllBlockchains = `-- name: ListAllBlockchains :many SELECT id, created_at, updated_at, deleted_at, chain_name, chain_id_cosmos, chain_id_evm, api_name, bech_account_prefix, bech_validator_prefix, main_asset_symbol, main_asset_denom, staking_asset_symbol, staking_asset_denom, is_stake_enabled, chain_image, main_asset_image, staking_asset_image, chain_type, is_support_mobile_wallet, is_support_extension_wallet, is_support_erc20, description_en, description_ko, description_ja, origin_genesis_time, account_type, btc_staking, cosmos_fee_info, evm_fee_info, lcd_endpoint, grpc_endpoint, evm_rpc_endpoint, explorer, about, forum FROM blockchains WHERE deleted_at IS NULL @@ -3453,54 +2054,6 @@ func (q *Queries) ListCryptoListings(ctx context.Context, arg ListCryptoListings return items, nil } -const listDelegatorAccounts = `-- name: ListDelegatorAccounts :many -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE is_delegator = 1 -AND deleted_at IS NULL -ORDER BY created_at DESC -` - -func (q *Queries) ListDelegatorAccounts(ctx context.Context) ([]Account, error) { - rows, err := q.db.QueryContext(ctx, listDelegatorAccounts) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Account - for rows.Next() { - var i Account - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const listFearGreedIndexHistory = `-- name: ListFearGreedIndexHistory :many SELECT id, created_at, updated_at, deleted_at, value, value_classification, timestamp, time_until_update FROM fear_greed_index WHERE deleted_at IS NULL @@ -3592,156 +2145,6 @@ func (q *Queries) ListGlobalMarketHistory(ctx context.Context, arg ListGlobalMar return items, nil } -const listHealthByChain = `-- name: ListHealthByChain :many -SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health -WHERE chain_id = ? AND deleted_at IS NULL -ORDER BY last_checked DESC -LIMIT ? OFFSET ? -` - -type ListHealthByChainParams struct { - ChainID sql.NullString `json:"chain_id"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListHealthByChain(ctx context.Context, arg ListHealthByChainParams) ([]Health, error) { - rows, err := q.db.QueryContext(ctx, listHealthByChain, arg.ChainID, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Health - for rows.Next() { - var i Health - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listHealthByStatus = `-- name: ListHealthByStatus :many -SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health -WHERE status = ? AND deleted_at IS NULL -ORDER BY last_checked DESC -LIMIT ? OFFSET ? -` - -type ListHealthByStatusParams struct { - Status string `json:"status"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListHealthByStatus(ctx context.Context, arg ListHealthByStatusParams) ([]Health, error) { - rows, err := q.db.QueryContext(ctx, listHealthByStatus, arg.Status, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Health - for rows.Next() { - var i Health - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listHealthChecksNeedingUpdate = `-- name: ListHealthChecksNeedingUpdate :many -SELECT id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message FROM health -WHERE next_check <= CURRENT_TIMESTAMP AND deleted_at IS NULL -ORDER BY next_check ASC -LIMIT ? -` - -func (q *Queries) ListHealthChecksNeedingUpdate(ctx context.Context, limit int64) ([]Health, error) { - rows, err := q.db.QueryContext(ctx, listHealthChecksNeedingUpdate, limit) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Health - for rows.Next() { - var i Health - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const listPriceHistoryByAssetID = `-- name: ListPriceHistoryByAssetID :many SELECT id, created_at, updated_at, deleted_at, asset_id, price_usd, price_btc, volume_24h_usd, market_cap_usd, available_supply, total_supply, max_supply, percent_change_1h, percent_change_24h, percent_change_7d, rank, last_updated FROM prices WHERE asset_id = ? AND deleted_at IS NULL @@ -3796,196 +2199,6 @@ func (q *Queries) ListPriceHistoryByAssetID(ctx context.Context, arg ListPriceHi return items, nil } -const listProfiles = `-- name: ListProfiles :many -SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles -WHERE deleted_at IS NULL -ORDER BY created_at DESC -LIMIT ? OFFSET ? -` - -type ListProfilesParams struct { - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListProfiles(ctx context.Context, arg ListProfilesParams) ([]Profile, error) { - rows, err := q.db.QueryContext(ctx, listProfiles, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Profile - for rows.Next() { - var i Profile - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Address, - &i.Handle, - &i.Origin, - &i.Name, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listServicesByChain = `-- name: ListServicesByChain :many -SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services -WHERE chain_id = ? AND deleted_at IS NULL -ORDER BY name ASC -LIMIT ? OFFSET ? -` - -type ListServicesByChainParams struct { - ChainID string `json:"chain_id"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListServicesByChain(ctx context.Context, arg ListServicesByChainParams) ([]Service, error) { - rows, err := q.db.QueryContext(ctx, listServicesByChain, arg.ChainID, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Service - for rows.Next() { - var i Service - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listServicesByOwner = `-- name: ListServicesByOwner :many -SELECT id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height FROM services -WHERE owner_address = ? AND deleted_at IS NULL -ORDER BY created_at DESC -LIMIT ? OFFSET ? -` - -type ListServicesByOwnerParams struct { - OwnerAddress string `json:"owner_address"` - Limit int64 `json:"limit"` - Offset int64 `json:"offset"` -} - -func (q *Queries) ListServicesByOwner(ctx context.Context, arg ListServicesByOwnerParams) ([]Service, error) { - rows, err := q.db.QueryContext(ctx, listServicesByOwner, arg.OwnerAddress, arg.Limit, arg.Offset) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Service - for rows.Next() { - var i Service - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - -const listValidatorAccounts = `-- name: ListValidatorAccounts :many -SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts -WHERE is_validator = 1 -AND deleted_at IS NULL -ORDER BY created_at DESC -` - -func (q *Queries) ListValidatorAccounts(ctx context.Context) ([]Account, error) { - rows, err := q.db.QueryContext(ctx, listValidatorAccounts) - if err != nil { - return nil, err - } - defer rows.Close() - var items []Account - for rows.Next() { - var i Account - if err := rows.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ); err != nil { - return nil, err - } - items = append(items, i) - } - if err := rows.Close(); err != nil { - return nil, err - } - if err := rows.Err(); err != nil { - return nil, err - } - return items, nil -} - const searchBlockchains = `-- name: SearchBlockchains :many SELECT id, created_at, updated_at, deleted_at, chain_name, chain_id_cosmos, chain_id_evm, api_name, bech_account_prefix, bech_validator_prefix, main_asset_symbol, main_asset_denom, staking_asset_symbol, staking_asset_denom, is_stake_enabled, chain_image, main_asset_image, staking_asset_image, chain_type, is_support_mobile_wallet, is_support_extension_wallet, is_support_erc20, description_en, description_ko, description_ja, origin_genesis_time, account_type, btc_staking, cosmos_fee_info, evm_fee_info, lcd_endpoint, grpc_endpoint, evm_rpc_endpoint, explorer, about, forum FROM blockchains WHERE ( @@ -4074,28 +2287,6 @@ func (q *Queries) SearchBlockchains(ctx context.Context, arg SearchBlockchainsPa return items, nil } -const softDeleteAccount = `-- name: SoftDeleteAccount :exec -UPDATE accounts -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ? -` - -func (q *Queries) SoftDeleteAccount(ctx context.Context, id string) error { - _, err := q.db.ExecContext(ctx, softDeleteAccount, id) - return err -} - -const softDeleteActivity = `-- name: SoftDeleteActivity :exec -UPDATE activities -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ? -` - -func (q *Queries) SoftDeleteActivity(ctx context.Context, id string) error { - _, err := q.db.ExecContext(ctx, softDeleteActivity, id) - return err -} - const softDeleteAsset = `-- name: SoftDeleteAsset :exec UPDATE assets SET deleted_at = CURRENT_TIMESTAMP @@ -4118,17 +2309,6 @@ func (q *Queries) SoftDeleteBlockchain(ctx context.Context, id string) error { return err } -const softDeleteCredential = `-- name: SoftDeleteCredential :exec -UPDATE credentials -SET deleted_at = CURRENT_TIMESTAMP -WHERE credential_id = ? -` - -func (q *Queries) SoftDeleteCredential(ctx context.Context, credentialID string) error { - _, err := q.db.ExecContext(ctx, softDeleteCredential, credentialID) - return err -} - const softDeleteCryptoListing = `-- name: SoftDeleteCryptoListing :exec UPDATE crypto_listings SET deleted_at = CURRENT_TIMESTAMP @@ -4162,17 +2342,6 @@ func (q *Queries) SoftDeleteGlobalMarket(ctx context.Context, id string) error { return err } -const softDeleteHealth = `-- name: SoftDeleteHealth :exec -UPDATE health -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ? -` - -func (q *Queries) SoftDeleteHealth(ctx context.Context, id string) error { - _, err := q.db.ExecContext(ctx, softDeleteHealth, id) - return err -} - const softDeletePriceConversion = `-- name: SoftDeletePriceConversion :exec UPDATE price_conversions SET deleted_at = CURRENT_TIMESTAMP @@ -4184,177 +2353,6 @@ func (q *Queries) SoftDeletePriceConversion(ctx context.Context, id string) erro return err } -const softDeleteProfile = `-- name: SoftDeleteProfile :exec -UPDATE profiles -SET deleted_at = CURRENT_TIMESTAMP -WHERE address = ? -` - -func (q *Queries) SoftDeleteProfile(ctx context.Context, address string) error { - _, err := q.db.ExecContext(ctx, softDeleteProfile, address) - return err -} - -const softDeleteService = `-- name: SoftDeleteService :exec -UPDATE services -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ? -` - -func (q *Queries) SoftDeleteService(ctx context.Context, id string) error { - _, err := q.db.ExecContext(ctx, softDeleteService, id) - return err -} - -const softDeleteVault = `-- name: SoftDeleteVault :exec -UPDATE vaults -SET deleted_at = CURRENT_TIMESTAMP -WHERE id = ? -` - -func (q *Queries) SoftDeleteVault(ctx context.Context, id string) error { - _, err := q.db.ExecContext(ctx, softDeleteVault, id) - return err -} - -const updateAccountLabel = `-- name: UpdateAccountLabel :one -UPDATE accounts -SET - label = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable -` - -type UpdateAccountLabelParams struct { - Label string `json:"label"` - ID string `json:"id"` -} - -func (q *Queries) UpdateAccountLabel(ctx context.Context, arg UpdateAccountLabelParams) (Account, error) { - row := q.db.QueryRowContext(ctx, updateAccountLabel, arg.Label, arg.ID) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const updateAccountSequence = `-- name: UpdateAccountSequence :one -UPDATE accounts -SET - sequence = ?, - updated_at = CURRENT_TIMESTAMP -WHERE address = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable -` - -type UpdateAccountSequenceParams struct { - Sequence int64 `json:"sequence"` - Address string `json:"address"` -} - -func (q *Queries) UpdateAccountSequence(ctx context.Context, arg UpdateAccountSequenceParams) (Account, error) { - row := q.db.QueryRowContext(ctx, updateAccountSequence, arg.Sequence, arg.Address) - var i Account - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Number, - &i.Sequence, - &i.Address, - &i.PublicKey, - &i.ChainID, - &i.BlockCreated, - &i.Controller, - &i.Label, - &i.Handle, - &i.IsSubsidiary, - &i.IsValidator, - &i.IsDelegator, - &i.IsAccountable, - ) - return i, err -} - -const updateActivityStatus = `-- name: UpdateActivityStatus :one -UPDATE activities -SET - status = ?, - tx_hash = ?, - block_height = ?, - gas_used = ?, - raw_log = ?, - error = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, account_id, tx_hash, tx_type, status, amount, fee, gas_used, gas_wanted, memo, block_height, timestamp, raw_log, error -` - -type UpdateActivityStatusParams struct { - Status string `json:"status"` - TxHash sql.NullString `json:"tx_hash"` - BlockHeight sql.NullInt64 `json:"block_height"` - GasUsed sql.NullInt64 `json:"gas_used"` - RawLog sql.NullString `json:"raw_log"` - Error sql.NullString `json:"error"` - ID string `json:"id"` -} - -func (q *Queries) UpdateActivityStatus(ctx context.Context, arg UpdateActivityStatusParams) (Activity, error) { - row := q.db.QueryRowContext(ctx, updateActivityStatus, - arg.Status, - arg.TxHash, - arg.BlockHeight, - arg.GasUsed, - arg.RawLog, - arg.Error, - arg.ID, - ) - var i Activity - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.AccountID, - &i.TxHash, - &i.TxType, - &i.Status, - &i.Amount, - &i.Fee, - &i.GasUsed, - &i.GasWanted, - &i.Memo, - &i.BlockHeight, - &i.Timestamp, - &i.RawLog, - &i.Error, - ) - return i, err -} - const updateAsset = `-- name: UpdateAsset :one UPDATE assets SET @@ -5082,62 +3080,6 @@ func (q *Queries) UpdateGlobalMarket(ctx context.Context, arg UpdateGlobalMarket return i, err } -const updateHealthCheck = `-- name: UpdateHealthCheck :one -UPDATE health -SET - status = ?, - response_time_ms = ?, - last_checked = CURRENT_TIMESTAMP, - next_check = ?, - failure_count = CASE WHEN status = 'failed' THEN failure_count + 1 ELSE failure_count END, - success_count = CASE WHEN status = 'success' THEN success_count + 1 ELSE success_count END, - response_data = ?, - error_message = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, endpoint_url, endpoint_type, chain_id, status, response_time_ms, last_checked, next_check, failure_count, success_count, response_data, error_message -` - -type UpdateHealthCheckParams struct { - Status string `json:"status"` - ResponseTimeMs sql.NullInt64 `json:"response_time_ms"` - NextCheck sql.NullTime `json:"next_check"` - ResponseData sql.NullString `json:"response_data"` - ErrorMessage sql.NullString `json:"error_message"` - ID string `json:"id"` -} - -func (q *Queries) UpdateHealthCheck(ctx context.Context, arg UpdateHealthCheckParams) (Health, error) { - row := q.db.QueryRowContext(ctx, updateHealthCheck, - arg.Status, - arg.ResponseTimeMs, - arg.NextCheck, - arg.ResponseData, - arg.ErrorMessage, - arg.ID, - ) - var i Health - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.EndpointUrl, - &i.EndpointType, - &i.ChainID, - &i.Status, - &i.ResponseTimeMs, - &i.LastChecked, - &i.NextCheck, - &i.FailureCount, - &i.SuccessCount, - &i.ResponseData, - &i.ErrorMessage, - ) - return i, err -} - const updatePrice = `-- name: UpdatePrice :one UPDATE prices SET @@ -5258,123 +3200,3 @@ func (q *Queries) UpdatePriceConversion(ctx context.Context, arg UpdatePriceConv ) return i, err } - -const updateProfile = `-- name: UpdateProfile :one -UPDATE profiles -SET - name = ?, - handle = ?, - updated_at = CURRENT_TIMESTAMP -WHERE address = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, address, handle, origin, name -` - -type UpdateProfileParams struct { - Name string `json:"name"` - Handle string `json:"handle"` - Address string `json:"address"` -} - -func (q *Queries) UpdateProfile(ctx context.Context, arg UpdateProfileParams) (Profile, error) { - row := q.db.QueryRowContext(ctx, updateProfile, arg.Name, arg.Handle, arg.Address) - var i Profile - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Address, - &i.Handle, - &i.Origin, - &i.Name, - ) - return i, err -} - -const updateService = `-- name: UpdateService :one -UPDATE services -SET - name = ?, - description = ?, - owner_address = ?, - metadata = ?, - status = ?, - block_height = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, name, description, chain_id, address, owner_address, metadata, status, block_height -` - -type UpdateServiceParams struct { - Name string `json:"name"` - Description sql.NullString `json:"description"` - OwnerAddress string `json:"owner_address"` - Metadata sql.NullString `json:"metadata"` - Status string `json:"status"` - BlockHeight int64 `json:"block_height"` - ID string `json:"id"` -} - -func (q *Queries) UpdateService(ctx context.Context, arg UpdateServiceParams) (Service, error) { - row := q.db.QueryRowContext(ctx, updateService, - arg.Name, - arg.Description, - arg.OwnerAddress, - arg.Metadata, - arg.Status, - arg.BlockHeight, - arg.ID, - ) - var i Service - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Name, - &i.Description, - &i.ChainID, - &i.Address, - &i.OwnerAddress, - &i.Metadata, - &i.Status, - &i.BlockHeight, - ) - return i, err -} - -const updateVault = `-- name: UpdateVault :one -UPDATE vaults -SET - config = ?, - updated_at = CURRENT_TIMESTAMP -WHERE id = ? -AND deleted_at IS NULL -RETURNING id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri -` - -type UpdateVaultParams struct { - Config string `json:"config"` - ID string `json:"id"` -} - -func (q *Queries) UpdateVault(ctx context.Context, arg UpdateVaultParams) (Vault, error) { - row := q.db.QueryRowContext(ctx, updateVault, arg.Config, arg.ID) - var i Vault - err := row.Scan( - &i.ID, - &i.CreatedAt, - &i.UpdatedAt, - &i.DeletedAt, - &i.Handle, - &i.Origin, - &i.Address, - &i.Cid, - &i.Config, - &i.SessionID, - &i.RedirectUri, - ) - return i, err -} diff --git a/sink/migrations/schema.sql b/internal/sink/network/schema.sql similarity index 52% rename from sink/migrations/schema.sql rename to internal/sink/network/schema.sql index faf2333..e2293cf 100644 --- a/sink/migrations/schema.sql +++ b/internal/sink/network/schema.sql @@ -14,69 +14,6 @@ CREATE TABLE assets ( UNIQUE(chain_id, symbol) ); --- Credentials store WebAuthn credentials -CREATE TABLE credentials ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - handle TEXT NOT NULL, - credential_id TEXT NOT NULL UNIQUE, - authenticator_attachment TEXT NOT NULL, - origin TEXT NOT NULL, - type TEXT NOT NULL, - transports TEXT NOT NULL -); - --- Accounts represent blockchain accounts -CREATE TABLE accounts ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - number INTEGER NOT NULL, - sequence INTEGER NOT NULL DEFAULT 0, - address TEXT NOT NULL UNIQUE, - public_key TEXT NOT NULL CHECK(json_valid(public_key)), - chain_id TEXT NOT NULL, - block_created INTEGER NOT NULL, - controller TEXT NOT NULL, - label TEXT NOT NULL, - handle TEXT NOT NULL, - is_subsidiary BOOLEAN NOT NULL DEFAULT FALSE CHECK(is_subsidiary IN (0,1)), - is_validator BOOLEAN NOT NULL DEFAULT FALSE CHECK(is_validator IN (0,1)), - is_delegator BOOLEAN NOT NULL DEFAULT FALSE CHECK(is_delegator IN (0,1)), - is_accountable BOOLEAN NOT NULL DEFAULT TRUE CHECK(is_accountable IN (0,1)) -); - --- Profiles represent user identities -CREATE TABLE profiles ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - address TEXT NOT NULL, - handle TEXT NOT NULL UNIQUE, - origin TEXT NOT NULL, - name TEXT NOT NULL, - UNIQUE(address, origin) -); - --- Vaults store encrypted data -CREATE TABLE vaults ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - handle TEXT NOT NULL, - origin TEXT NOT NULL, - address TEXT NOT NULL, - cid TEXT NOT NULL UNIQUE, - config TEXT NOT NULL CHECK(json_valid(config)), - session_id TEXT NOT NULL, - redirect_uri TEXT NOT NULL -); - -- Prices entity based on the Alternative.me API for crypto prices CREATE TABLE prices ( id TEXT PRIMARY KEY, @@ -155,66 +92,6 @@ CREATE TABLE crypto_listings ( UNIQUE(api_id) ); --- Service for Service Records sourced on chain -CREATE TABLE services ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - name TEXT NOT NULL, - description TEXT, - chain_id TEXT NOT NULL, - address TEXT NOT NULL, - owner_address TEXT NOT NULL, - metadata TEXT CHECK(json_valid(metadata)), - status TEXT NOT NULL, - block_height INTEGER NOT NULL, - FOREIGN KEY (chain_id) REFERENCES assets(chain_id), - UNIQUE(chain_id, address) -); - --- Activity table for basic transaction broadcast activity -CREATE TABLE activities ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - account_id TEXT NOT NULL, - tx_hash TEXT, - tx_type TEXT NOT NULL, - status TEXT NOT NULL, - amount TEXT, - fee TEXT, - gas_used INTEGER, - gas_wanted INTEGER, - memo TEXT, - block_height INTEGER, - timestamp TIMESTAMP NOT NULL, - raw_log TEXT, - error TEXT, - FOREIGN KEY (account_id) REFERENCES accounts(id) -); - --- Health table for scheduled checks for API endpoints -CREATE TABLE health ( - id TEXT PRIMARY KEY, - created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, - deleted_at TIMESTAMP, - endpoint_url TEXT NOT NULL, - endpoint_type TEXT NOT NULL, - chain_id TEXT, - status TEXT NOT NULL, - response_time_ms INTEGER, - last_checked TIMESTAMP NOT NULL, - next_check TIMESTAMP, - failure_count INTEGER NOT NULL DEFAULT 0, - success_count INTEGER NOT NULL DEFAULT 0, - response_data TEXT, - error_message TEXT, - FOREIGN KEY (chain_id) REFERENCES assets(chain_id) -); - -- Blockchains table to store chain configuration parameters CREATE TABLE blockchains ( id TEXT PRIMARY KEY, @@ -286,25 +163,6 @@ CREATE INDEX idx_assets_symbol ON assets(symbol); CREATE INDEX idx_assets_chain_id ON assets(chain_id); CREATE INDEX idx_assets_deleted_at ON assets(deleted_at); -CREATE INDEX idx_credentials_handle ON credentials(handle); -CREATE INDEX idx_credentials_origin ON credentials(origin); -CREATE INDEX idx_credentials_deleted_at ON credentials(deleted_at); - -CREATE INDEX idx_accounts_address ON accounts(address); -CREATE INDEX idx_accounts_chain_id ON accounts(chain_id); -CREATE INDEX idx_accounts_block_created ON accounts(block_created); -CREATE INDEX idx_accounts_label ON accounts(label); -CREATE INDEX idx_accounts_controller ON accounts(controller); -CREATE INDEX idx_accounts_deleted_at ON accounts(deleted_at); - -CREATE INDEX idx_profiles_handle ON profiles(handle); -CREATE INDEX idx_profiles_address ON profiles(address); -CREATE INDEX idx_profiles_deleted_at ON profiles(deleted_at); - -CREATE INDEX idx_vaults_handle ON vaults(handle); -CREATE INDEX idx_vaults_session_id ON vaults(session_id); -CREATE INDEX idx_vaults_deleted_at ON vaults(deleted_at); - CREATE INDEX idx_prices_asset_id ON prices(asset_id); CREATE INDEX idx_prices_rank ON prices(rank); CREATE INDEX idx_prices_last_updated ON prices(last_updated); @@ -326,29 +184,6 @@ CREATE INDEX idx_crypto_listings_symbol ON crypto_listings(symbol); CREATE INDEX idx_crypto_listings_website_slug ON crypto_listings(website_slug); CREATE INDEX idx_crypto_listings_deleted_at ON crypto_listings(deleted_at); -CREATE INDEX idx_services_name ON services(name); -CREATE INDEX idx_services_chain_id ON services(chain_id); -CREATE INDEX idx_services_address ON services(address); -CREATE INDEX idx_services_owner_address ON services(owner_address); -CREATE INDEX idx_services_status ON services(status); -CREATE INDEX idx_services_deleted_at ON services(deleted_at); - -CREATE INDEX idx_activities_account_id ON activities(account_id); -CREATE INDEX idx_activities_tx_hash ON activities(tx_hash); -CREATE INDEX idx_activities_tx_type ON activities(tx_type); -CREATE INDEX idx_activities_status ON activities(status); -CREATE INDEX idx_activities_timestamp ON activities(timestamp); -CREATE INDEX idx_activities_block_height ON activities(block_height); -CREATE INDEX idx_activities_deleted_at ON activities(deleted_at); - -CREATE INDEX idx_health_endpoint_url ON health(endpoint_url); -CREATE INDEX idx_health_endpoint_type ON health(endpoint_type); -CREATE INDEX idx_health_chain_id ON health(chain_id); -CREATE INDEX idx_health_status ON health(status); -CREATE INDEX idx_health_last_checked ON health(last_checked); -CREATE INDEX idx_health_next_check ON health(next_check); -CREATE INDEX idx_health_deleted_at ON health(deleted_at); - CREATE INDEX idx_blockchains_chain_name ON blockchains(chain_name); CREATE INDEX idx_blockchains_chain_id_cosmos ON blockchains(chain_id_cosmos); CREATE INDEX idx_blockchains_chain_id_evm ON blockchains(chain_id_evm); diff --git a/internal/sink/sqlc.yaml b/internal/sink/sqlc.yaml new file mode 100644 index 0000000..4adec8d --- /dev/null +++ b/internal/sink/sqlc.yaml @@ -0,0 +1,34 @@ +version: "2" +sql: + # Activity DB - User to User Interactions + - engine: "sqlite" + queries: "./activity/query.sql" + schema: "./activity/schema.sql" + gen: + go: + emit_interface: true + emit_json_tags: true + package: "activity" + out: "./activity" + + # Network DB - Blockchain Parameters and Asset Metadata + - engine: "sqlite" + queries: "./network/query.sql" + schema: "./network/schema.sql" + gen: + go: + emit_interface: true + emit_json_tags: true + package: "network" + out: "./network" + + # Users DB - Accounts, Profiles, and Vault Metadata + - engine: "sqlite" + queries: "./users/query.sql" + schema: "./users/schema.sql" + gen: + go: + emit_interface: true + emit_json_tags: true + package: "users" + out: "./users" diff --git a/sink/models/db.go b/internal/sink/users/db.go similarity index 94% rename from sink/models/db.go rename to internal/sink/users/db.go index d4f3d12..ff8490c 100644 --- a/sink/models/db.go +++ b/internal/sink/users/db.go @@ -1,8 +1,8 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.28.0 +// sqlc v1.29.0 -package models +package users import ( "context" diff --git a/internal/sink/users/models.go b/internal/sink/users/models.go new file mode 100644 index 0000000..236a9a9 --- /dev/null +++ b/internal/sink/users/models.go @@ -0,0 +1,68 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package users + +import ( + "database/sql" + "time" +) + +type Account struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + Number int64 `json:"number"` + Sequence int64 `json:"sequence"` + Address string `json:"address"` + PublicKey string `json:"public_key"` + ChainID string `json:"chain_id"` + BlockCreated int64 `json:"block_created"` + Controller string `json:"controller"` + Label string `json:"label"` + Handle string `json:"handle"` + IsSubsidiary bool `json:"is_subsidiary"` + IsValidator bool `json:"is_validator"` + IsDelegator bool `json:"is_delegator"` + IsAccountable bool `json:"is_accountable"` +} + +type Credential struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + Handle string `json:"handle"` + CredentialID string `json:"credential_id"` + AuthenticatorAttachment string `json:"authenticator_attachment"` + Origin string `json:"origin"` + Type string `json:"type"` + Transports string `json:"transports"` +} + +type Profile struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + Address string `json:"address"` + Handle string `json:"handle"` + Origin string `json:"origin"` + Name string `json:"name"` +} + +type Vault struct { + ID string `json:"id"` + CreatedAt time.Time `json:"created_at"` + UpdatedAt time.Time `json:"updated_at"` + DeletedAt sql.NullTime `json:"deleted_at"` + Handle string `json:"handle"` + Origin string `json:"origin"` + Address string `json:"address"` + Cid string `json:"cid"` + Config string `json:"config"` + SessionID string `json:"session_id"` + RedirectUri string `json:"redirect_uri"` +} diff --git a/internal/sink/users/querier.go b/internal/sink/users/querier.go new file mode 100644 index 0000000..9127741 --- /dev/null +++ b/internal/sink/users/querier.go @@ -0,0 +1,53 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 + +package users + +import ( + "context" +) + +type Querier interface { + CheckHandleExists(ctx context.Context, handle string) (bool, error) + GetAccountByAddress(ctx context.Context, address string) (Account, error) + GetAccountByController(ctx context.Context, controller string) (Account, error) + GetAccountByID(ctx context.Context, id string) (Account, error) + GetAccountByNumber(ctx context.Context, number int64) (Account, error) + GetAccountByPublicKey(ctx context.Context, publicKey string) (Account, error) + GetAccountBySequence(ctx context.Context, sequence int64) (Account, error) + GetAccountsByChainID(ctx context.Context, chainID string) ([]Account, error) + GetAccountsByController(ctx context.Context, controller string) ([]Account, error) + GetAccountsByHandle(ctx context.Context, handle string) ([]Account, error) + GetAccountsByLabel(ctx context.Context, label string) ([]Account, error) + GetCredentialByID(ctx context.Context, credentialID string) (Credential, error) + GetCredentialsByHandle(ctx context.Context, handle string) ([]Credential, error) + GetProfileByAddress(ctx context.Context, address string) (Profile, error) + GetProfileByHandle(ctx context.Context, handle string) (Profile, error) + GetProfileByID(ctx context.Context, id string) (Profile, error) + GetVaultByID(ctx context.Context, id string) (Vault, error) + GetVaultConfigByCID(ctx context.Context, cid string) (Vault, error) + GetVaultRedirectURIBySessionID(ctx context.Context, sessionID string) (string, error) + GetVaultsByHandle(ctx context.Context, handle string) ([]Vault, error) + // ACCOUNT QUERIES + InsertAccount(ctx context.Context, arg InsertAccountParams) (Account, error) + // CREDENTIAL QUERIES + InsertCredential(ctx context.Context, arg InsertCredentialParams) (Credential, error) + // PROFILE QUERIES + InsertProfile(ctx context.Context, arg InsertProfileParams) (Profile, error) + // VAULT QUERIES + InsertVault(ctx context.Context, arg InsertVaultParams) (Vault, error) + ListDelegatorAccounts(ctx context.Context) ([]Account, error) + ListProfiles(ctx context.Context, arg ListProfilesParams) ([]Profile, error) + ListValidatorAccounts(ctx context.Context) ([]Account, error) + SoftDeleteAccount(ctx context.Context, id string) error + SoftDeleteCredential(ctx context.Context, credentialID string) error + SoftDeleteProfile(ctx context.Context, address string) error + SoftDeleteVault(ctx context.Context, id string) error + UpdateAccountLabel(ctx context.Context, arg UpdateAccountLabelParams) (Account, error) + UpdateAccountSequence(ctx context.Context, arg UpdateAccountSequenceParams) (Account, error) + UpdateProfile(ctx context.Context, arg UpdateProfileParams) (Profile, error) + UpdateVault(ctx context.Context, arg UpdateVaultParams) (Vault, error) +} + +var _ Querier = (*Queries)(nil) diff --git a/internal/sink/users/query.sql b/internal/sink/users/query.sql new file mode 100644 index 0000000..73b50d1 --- /dev/null +++ b/internal/sink/users/query.sql @@ -0,0 +1,234 @@ +-- PROFILE QUERIES +-- name: InsertProfile :one +INSERT INTO profiles ( + address, + handle, + origin, + name +) VALUES (?, ?, ?, ?) +RETURNING *; + +-- name: GetProfileByID :one +SELECT * FROM profiles +WHERE id = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetProfileByAddress :one +SELECT * FROM profiles +WHERE address = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetProfileByHandle :one +SELECT * FROM profiles +WHERE handle = ? +AND deleted_at IS NULL +LIMIT 1; + +-- name: CheckHandleExists :one +SELECT COUNT(*) > 0 as handle_exists FROM profiles +WHERE handle = ? +AND deleted_at IS NULL; + +-- name: UpdateProfile :one +UPDATE profiles +SET + name = ?, + handle = ?, + updated_at = CURRENT_TIMESTAMP +WHERE address = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: SoftDeleteProfile :exec +UPDATE profiles +SET deleted_at = CURRENT_TIMESTAMP +WHERE address = ?; + +-- name: ListProfiles :many +SELECT * FROM profiles +WHERE deleted_at IS NULL +ORDER BY created_at DESC +LIMIT ? OFFSET ?; + +-- VAULT QUERIES +-- name: InsertVault :one +INSERT INTO vaults ( + handle, + origin, + address, + cid, + config, + session_id, + redirect_uri +) VALUES (?, ?, ?, ?, ?, ?, ?) +RETURNING *; + +-- name: GetVaultByID :one +SELECT * FROM vaults +WHERE id = ? +AND deleted_at IS NULL +LIMIT 1; + +-- name: GetVaultsByHandle :many +SELECT * FROM vaults +WHERE handle = ? +AND deleted_at IS NULL +ORDER BY created_at DESC; + +-- name: GetVaultConfigByCID :one +SELECT * FROM vaults +WHERE cid = ? +AND deleted_at IS NULL +LIMIT 1; + +-- name: GetVaultRedirectURIBySessionID :one +SELECT redirect_uri FROM vaults +WHERE session_id = ? +AND deleted_at IS NULL +LIMIT 1; + +-- name: UpdateVault :one +UPDATE vaults +SET + config = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: SoftDeleteVault :exec +UPDATE vaults +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ?; + +-- ACCOUNT QUERIES +-- name: InsertAccount :one +INSERT INTO accounts ( + number, + sequence, + address, + public_key, + chain_id, + block_created, + controller, + label, + is_subsidiary, + is_validator, + is_delegator, + is_accountable +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +RETURNING *; + +-- name: GetAccountByID :one +SELECT * FROM accounts +WHERE id = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetAccountByAddress :one +SELECT * FROM accounts +WHERE address = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetAccountsByHandle :many +SELECT * FROM accounts +WHERE handle = ? AND deleted_at IS NULL +ORDER BY created_at DESC; + +-- name: GetAccountByController :one +SELECT * FROM accounts +WHERE controller = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetAccountByPublicKey :one +SELECT * FROM accounts +WHERE public_key = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetAccountByNumber :one +SELECT * FROM accounts +WHERE number = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetAccountBySequence :one +SELECT * FROM accounts +WHERE sequence = ? AND deleted_at IS NULL +LIMIT 1; + +-- name: GetAccountsByChainID :many +SELECT * FROM accounts +WHERE chain_id = ? AND deleted_at IS NULL +ORDER BY sequence DESC; + +-- name: GetAccountsByController :many +SELECT * FROM accounts +WHERE controller = ? AND deleted_at IS NULL +ORDER BY created_at DESC; + +-- name: GetAccountsByLabel :many +SELECT * FROM accounts +WHERE label = ? AND deleted_at IS NULL +ORDER BY created_at DESC; + +-- name: UpdateAccountSequence :one +UPDATE accounts +SET + sequence = ?, + updated_at = CURRENT_TIMESTAMP +WHERE address = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: UpdateAccountLabel :one +UPDATE accounts +SET + label = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING *; + +-- name: SoftDeleteAccount :exec +UPDATE accounts +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ?; + +-- name: ListValidatorAccounts :many +SELECT * FROM accounts +WHERE is_validator = 1 +AND deleted_at IS NULL +ORDER BY created_at DESC; + +-- name: ListDelegatorAccounts :many +SELECT * FROM accounts +WHERE is_delegator = 1 +AND deleted_at IS NULL +ORDER BY created_at DESC; + +-- CREDENTIAL QUERIES +-- name: InsertCredential :one +INSERT INTO credentials ( + handle, + credential_id, + authenticator_attachment, + origin, + type, + transports +) VALUES (?, ?, ?, ?, ?, ?) +RETURNING *; + +-- name: GetCredentialsByHandle :many +SELECT * FROM credentials +WHERE handle = ? +AND deleted_at IS NULL; + +-- name: GetCredentialByID :one +SELECT * FROM credentials +WHERE credential_id = ? +AND deleted_at IS NULL +LIMIT 1; + +-- name: SoftDeleteCredential :exec +UPDATE credentials +SET deleted_at = CURRENT_TIMESTAMP +WHERE credential_id = ?; + diff --git a/internal/sink/users/query.sql.go b/internal/sink/users/query.sql.go new file mode 100644 index 0000000..28c043c --- /dev/null +++ b/internal/sink/users/query.sql.go @@ -0,0 +1,1177 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.29.0 +// source: query.sql + +package users + +import ( + "context" +) + +const checkHandleExists = `-- name: CheckHandleExists :one +SELECT COUNT(*) > 0 as handle_exists FROM profiles +WHERE handle = ? +AND deleted_at IS NULL +` + +func (q *Queries) CheckHandleExists(ctx context.Context, handle string) (bool, error) { + row := q.db.QueryRowContext(ctx, checkHandleExists, handle) + var handle_exists bool + err := row.Scan(&handle_exists) + return handle_exists, err +} + +const getAccountByAddress = `-- name: GetAccountByAddress :one +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE address = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetAccountByAddress(ctx context.Context, address string) (Account, error) { + row := q.db.QueryRowContext(ctx, getAccountByAddress, address) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const getAccountByController = `-- name: GetAccountByController :one +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE controller = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetAccountByController(ctx context.Context, controller string) (Account, error) { + row := q.db.QueryRowContext(ctx, getAccountByController, controller) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const getAccountByID = `-- name: GetAccountByID :one +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE id = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetAccountByID(ctx context.Context, id string) (Account, error) { + row := q.db.QueryRowContext(ctx, getAccountByID, id) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const getAccountByNumber = `-- name: GetAccountByNumber :one +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE number = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetAccountByNumber(ctx context.Context, number int64) (Account, error) { + row := q.db.QueryRowContext(ctx, getAccountByNumber, number) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const getAccountByPublicKey = `-- name: GetAccountByPublicKey :one +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE public_key = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetAccountByPublicKey(ctx context.Context, publicKey string) (Account, error) { + row := q.db.QueryRowContext(ctx, getAccountByPublicKey, publicKey) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const getAccountBySequence = `-- name: GetAccountBySequence :one +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE sequence = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetAccountBySequence(ctx context.Context, sequence int64) (Account, error) { + row := q.db.QueryRowContext(ctx, getAccountBySequence, sequence) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const getAccountsByChainID = `-- name: GetAccountsByChainID :many +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE chain_id = ? AND deleted_at IS NULL +ORDER BY sequence DESC +` + +func (q *Queries) GetAccountsByChainID(ctx context.Context, chainID string) ([]Account, error) { + rows, err := q.db.QueryContext(ctx, getAccountsByChainID, chainID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Account + for rows.Next() { + var i Account + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getAccountsByController = `-- name: GetAccountsByController :many +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE controller = ? AND deleted_at IS NULL +ORDER BY created_at DESC +` + +func (q *Queries) GetAccountsByController(ctx context.Context, controller string) ([]Account, error) { + rows, err := q.db.QueryContext(ctx, getAccountsByController, controller) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Account + for rows.Next() { + var i Account + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getAccountsByHandle = `-- name: GetAccountsByHandle :many +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE handle = ? AND deleted_at IS NULL +ORDER BY created_at DESC +` + +func (q *Queries) GetAccountsByHandle(ctx context.Context, handle string) ([]Account, error) { + rows, err := q.db.QueryContext(ctx, getAccountsByHandle, handle) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Account + for rows.Next() { + var i Account + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getAccountsByLabel = `-- name: GetAccountsByLabel :many +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE label = ? AND deleted_at IS NULL +ORDER BY created_at DESC +` + +func (q *Queries) GetAccountsByLabel(ctx context.Context, label string) ([]Account, error) { + rows, err := q.db.QueryContext(ctx, getAccountsByLabel, label) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Account + for rows.Next() { + var i Account + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getCredentialByID = `-- name: GetCredentialByID :one +SELECT id, created_at, updated_at, deleted_at, handle, credential_id, authenticator_attachment, origin, type, transports FROM credentials +WHERE credential_id = ? +AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetCredentialByID(ctx context.Context, credentialID string) (Credential, error) { + row := q.db.QueryRowContext(ctx, getCredentialByID, credentialID) + var i Credential + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.CredentialID, + &i.AuthenticatorAttachment, + &i.Origin, + &i.Type, + &i.Transports, + ) + return i, err +} + +const getCredentialsByHandle = `-- name: GetCredentialsByHandle :many +SELECT id, created_at, updated_at, deleted_at, handle, credential_id, authenticator_attachment, origin, type, transports FROM credentials +WHERE handle = ? +AND deleted_at IS NULL +` + +func (q *Queries) GetCredentialsByHandle(ctx context.Context, handle string) ([]Credential, error) { + rows, err := q.db.QueryContext(ctx, getCredentialsByHandle, handle) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Credential + for rows.Next() { + var i Credential + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.CredentialID, + &i.AuthenticatorAttachment, + &i.Origin, + &i.Type, + &i.Transports, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const getProfileByAddress = `-- name: GetProfileByAddress :one +SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles +WHERE address = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetProfileByAddress(ctx context.Context, address string) (Profile, error) { + row := q.db.QueryRowContext(ctx, getProfileByAddress, address) + var i Profile + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Address, + &i.Handle, + &i.Origin, + &i.Name, + ) + return i, err +} + +const getProfileByHandle = `-- name: GetProfileByHandle :one +SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles +WHERE handle = ? +AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetProfileByHandle(ctx context.Context, handle string) (Profile, error) { + row := q.db.QueryRowContext(ctx, getProfileByHandle, handle) + var i Profile + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Address, + &i.Handle, + &i.Origin, + &i.Name, + ) + return i, err +} + +const getProfileByID = `-- name: GetProfileByID :one +SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles +WHERE id = ? AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetProfileByID(ctx context.Context, id string) (Profile, error) { + row := q.db.QueryRowContext(ctx, getProfileByID, id) + var i Profile + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Address, + &i.Handle, + &i.Origin, + &i.Name, + ) + return i, err +} + +const getVaultByID = `-- name: GetVaultByID :one +SELECT id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri FROM vaults +WHERE id = ? +AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetVaultByID(ctx context.Context, id string) (Vault, error) { + row := q.db.QueryRowContext(ctx, getVaultByID, id) + var i Vault + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.Origin, + &i.Address, + &i.Cid, + &i.Config, + &i.SessionID, + &i.RedirectUri, + ) + return i, err +} + +const getVaultConfigByCID = `-- name: GetVaultConfigByCID :one +SELECT id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri FROM vaults +WHERE cid = ? +AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetVaultConfigByCID(ctx context.Context, cid string) (Vault, error) { + row := q.db.QueryRowContext(ctx, getVaultConfigByCID, cid) + var i Vault + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.Origin, + &i.Address, + &i.Cid, + &i.Config, + &i.SessionID, + &i.RedirectUri, + ) + return i, err +} + +const getVaultRedirectURIBySessionID = `-- name: GetVaultRedirectURIBySessionID :one +SELECT redirect_uri FROM vaults +WHERE session_id = ? +AND deleted_at IS NULL +LIMIT 1 +` + +func (q *Queries) GetVaultRedirectURIBySessionID(ctx context.Context, sessionID string) (string, error) { + row := q.db.QueryRowContext(ctx, getVaultRedirectURIBySessionID, sessionID) + var redirect_uri string + err := row.Scan(&redirect_uri) + return redirect_uri, err +} + +const getVaultsByHandle = `-- name: GetVaultsByHandle :many +SELECT id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri FROM vaults +WHERE handle = ? +AND deleted_at IS NULL +ORDER BY created_at DESC +` + +func (q *Queries) GetVaultsByHandle(ctx context.Context, handle string) ([]Vault, error) { + rows, err := q.db.QueryContext(ctx, getVaultsByHandle, handle) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Vault + for rows.Next() { + var i Vault + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.Origin, + &i.Address, + &i.Cid, + &i.Config, + &i.SessionID, + &i.RedirectUri, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const insertAccount = `-- name: InsertAccount :one +INSERT INTO accounts ( + number, + sequence, + address, + public_key, + chain_id, + block_created, + controller, + label, + is_subsidiary, + is_validator, + is_delegator, + is_accountable +) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable +` + +type InsertAccountParams struct { + Number int64 `json:"number"` + Sequence int64 `json:"sequence"` + Address string `json:"address"` + PublicKey string `json:"public_key"` + ChainID string `json:"chain_id"` + BlockCreated int64 `json:"block_created"` + Controller string `json:"controller"` + Label string `json:"label"` + IsSubsidiary bool `json:"is_subsidiary"` + IsValidator bool `json:"is_validator"` + IsDelegator bool `json:"is_delegator"` + IsAccountable bool `json:"is_accountable"` +} + +// ACCOUNT QUERIES +func (q *Queries) InsertAccount(ctx context.Context, arg InsertAccountParams) (Account, error) { + row := q.db.QueryRowContext(ctx, insertAccount, + arg.Number, + arg.Sequence, + arg.Address, + arg.PublicKey, + arg.ChainID, + arg.BlockCreated, + arg.Controller, + arg.Label, + arg.IsSubsidiary, + arg.IsValidator, + arg.IsDelegator, + arg.IsAccountable, + ) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const insertCredential = `-- name: InsertCredential :one +INSERT INTO credentials ( + handle, + credential_id, + authenticator_attachment, + origin, + type, + transports +) VALUES (?, ?, ?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, handle, credential_id, authenticator_attachment, origin, type, transports +` + +type InsertCredentialParams struct { + Handle string `json:"handle"` + CredentialID string `json:"credential_id"` + AuthenticatorAttachment string `json:"authenticator_attachment"` + Origin string `json:"origin"` + Type string `json:"type"` + Transports string `json:"transports"` +} + +// CREDENTIAL QUERIES +func (q *Queries) InsertCredential(ctx context.Context, arg InsertCredentialParams) (Credential, error) { + row := q.db.QueryRowContext(ctx, insertCredential, + arg.Handle, + arg.CredentialID, + arg.AuthenticatorAttachment, + arg.Origin, + arg.Type, + arg.Transports, + ) + var i Credential + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.CredentialID, + &i.AuthenticatorAttachment, + &i.Origin, + &i.Type, + &i.Transports, + ) + return i, err +} + +const insertProfile = `-- name: InsertProfile :one +INSERT INTO profiles ( + address, + handle, + origin, + name +) VALUES (?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, address, handle, origin, name +` + +type InsertProfileParams struct { + Address string `json:"address"` + Handle string `json:"handle"` + Origin string `json:"origin"` + Name string `json:"name"` +} + +// PROFILE QUERIES +func (q *Queries) InsertProfile(ctx context.Context, arg InsertProfileParams) (Profile, error) { + row := q.db.QueryRowContext(ctx, insertProfile, + arg.Address, + arg.Handle, + arg.Origin, + arg.Name, + ) + var i Profile + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Address, + &i.Handle, + &i.Origin, + &i.Name, + ) + return i, err +} + +const insertVault = `-- name: InsertVault :one +INSERT INTO vaults ( + handle, + origin, + address, + cid, + config, + session_id, + redirect_uri +) VALUES (?, ?, ?, ?, ?, ?, ?) +RETURNING id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri +` + +type InsertVaultParams struct { + Handle string `json:"handle"` + Origin string `json:"origin"` + Address string `json:"address"` + Cid string `json:"cid"` + Config string `json:"config"` + SessionID string `json:"session_id"` + RedirectUri string `json:"redirect_uri"` +} + +// VAULT QUERIES +func (q *Queries) InsertVault(ctx context.Context, arg InsertVaultParams) (Vault, error) { + row := q.db.QueryRowContext(ctx, insertVault, + arg.Handle, + arg.Origin, + arg.Address, + arg.Cid, + arg.Config, + arg.SessionID, + arg.RedirectUri, + ) + var i Vault + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.Origin, + &i.Address, + &i.Cid, + &i.Config, + &i.SessionID, + &i.RedirectUri, + ) + return i, err +} + +const listDelegatorAccounts = `-- name: ListDelegatorAccounts :many +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE is_delegator = 1 +AND deleted_at IS NULL +ORDER BY created_at DESC +` + +func (q *Queries) ListDelegatorAccounts(ctx context.Context) ([]Account, error) { + rows, err := q.db.QueryContext(ctx, listDelegatorAccounts) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Account + for rows.Next() { + var i Account + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listProfiles = `-- name: ListProfiles :many +SELECT id, created_at, updated_at, deleted_at, address, handle, origin, name FROM profiles +WHERE deleted_at IS NULL +ORDER BY created_at DESC +LIMIT ? OFFSET ? +` + +type ListProfilesParams struct { + Limit int64 `json:"limit"` + Offset int64 `json:"offset"` +} + +func (q *Queries) ListProfiles(ctx context.Context, arg ListProfilesParams) ([]Profile, error) { + rows, err := q.db.QueryContext(ctx, listProfiles, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Profile + for rows.Next() { + var i Profile + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Address, + &i.Handle, + &i.Origin, + &i.Name, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const listValidatorAccounts = `-- name: ListValidatorAccounts :many +SELECT id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable FROM accounts +WHERE is_validator = 1 +AND deleted_at IS NULL +ORDER BY created_at DESC +` + +func (q *Queries) ListValidatorAccounts(ctx context.Context) ([]Account, error) { + rows, err := q.db.QueryContext(ctx, listValidatorAccounts) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Account + for rows.Next() { + var i Account + if err := rows.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + +const softDeleteAccount = `-- name: SoftDeleteAccount :exec +UPDATE accounts +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ? +` + +func (q *Queries) SoftDeleteAccount(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, softDeleteAccount, id) + return err +} + +const softDeleteCredential = `-- name: SoftDeleteCredential :exec +UPDATE credentials +SET deleted_at = CURRENT_TIMESTAMP +WHERE credential_id = ? +` + +func (q *Queries) SoftDeleteCredential(ctx context.Context, credentialID string) error { + _, err := q.db.ExecContext(ctx, softDeleteCredential, credentialID) + return err +} + +const softDeleteProfile = `-- name: SoftDeleteProfile :exec +UPDATE profiles +SET deleted_at = CURRENT_TIMESTAMP +WHERE address = ? +` + +func (q *Queries) SoftDeleteProfile(ctx context.Context, address string) error { + _, err := q.db.ExecContext(ctx, softDeleteProfile, address) + return err +} + +const softDeleteVault = `-- name: SoftDeleteVault :exec +UPDATE vaults +SET deleted_at = CURRENT_TIMESTAMP +WHERE id = ? +` + +func (q *Queries) SoftDeleteVault(ctx context.Context, id string) error { + _, err := q.db.ExecContext(ctx, softDeleteVault, id) + return err +} + +const updateAccountLabel = `-- name: UpdateAccountLabel :one +UPDATE accounts +SET + label = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable +` + +type UpdateAccountLabelParams struct { + Label string `json:"label"` + ID string `json:"id"` +} + +func (q *Queries) UpdateAccountLabel(ctx context.Context, arg UpdateAccountLabelParams) (Account, error) { + row := q.db.QueryRowContext(ctx, updateAccountLabel, arg.Label, arg.ID) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const updateAccountSequence = `-- name: UpdateAccountSequence :one +UPDATE accounts +SET + sequence = ?, + updated_at = CURRENT_TIMESTAMP +WHERE address = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, number, sequence, address, public_key, chain_id, block_created, controller, label, handle, is_subsidiary, is_validator, is_delegator, is_accountable +` + +type UpdateAccountSequenceParams struct { + Sequence int64 `json:"sequence"` + Address string `json:"address"` +} + +func (q *Queries) UpdateAccountSequence(ctx context.Context, arg UpdateAccountSequenceParams) (Account, error) { + row := q.db.QueryRowContext(ctx, updateAccountSequence, arg.Sequence, arg.Address) + var i Account + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Number, + &i.Sequence, + &i.Address, + &i.PublicKey, + &i.ChainID, + &i.BlockCreated, + &i.Controller, + &i.Label, + &i.Handle, + &i.IsSubsidiary, + &i.IsValidator, + &i.IsDelegator, + &i.IsAccountable, + ) + return i, err +} + +const updateProfile = `-- name: UpdateProfile :one +UPDATE profiles +SET + name = ?, + handle = ?, + updated_at = CURRENT_TIMESTAMP +WHERE address = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, address, handle, origin, name +` + +type UpdateProfileParams struct { + Name string `json:"name"` + Handle string `json:"handle"` + Address string `json:"address"` +} + +func (q *Queries) UpdateProfile(ctx context.Context, arg UpdateProfileParams) (Profile, error) { + row := q.db.QueryRowContext(ctx, updateProfile, arg.Name, arg.Handle, arg.Address) + var i Profile + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Address, + &i.Handle, + &i.Origin, + &i.Name, + ) + return i, err +} + +const updateVault = `-- name: UpdateVault :one +UPDATE vaults +SET + config = ?, + updated_at = CURRENT_TIMESTAMP +WHERE id = ? +AND deleted_at IS NULL +RETURNING id, created_at, updated_at, deleted_at, handle, origin, address, cid, config, session_id, redirect_uri +` + +type UpdateVaultParams struct { + Config string `json:"config"` + ID string `json:"id"` +} + +func (q *Queries) UpdateVault(ctx context.Context, arg UpdateVaultParams) (Vault, error) { + row := q.db.QueryRowContext(ctx, updateVault, arg.Config, arg.ID) + var i Vault + err := row.Scan( + &i.ID, + &i.CreatedAt, + &i.UpdatedAt, + &i.DeletedAt, + &i.Handle, + &i.Origin, + &i.Address, + &i.Cid, + &i.Config, + &i.SessionID, + &i.RedirectUri, + ) + return i, err +} diff --git a/internal/sink/users/schema.sql b/internal/sink/users/schema.sql new file mode 100644 index 0000000..b5ba399 --- /dev/null +++ b/internal/sink/users/schema.sql @@ -0,0 +1,81 @@ +-- Credentials store WebAuthn credentials +CREATE TABLE credentials ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + handle TEXT NOT NULL, + credential_id TEXT NOT NULL UNIQUE, + authenticator_attachment TEXT NOT NULL, + origin TEXT NOT NULL, + type TEXT NOT NULL, + transports TEXT NOT NULL +); + +-- Accounts represent blockchain accounts +CREATE TABLE accounts ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + number INTEGER NOT NULL, + sequence INTEGER NOT NULL DEFAULT 0, + address TEXT NOT NULL UNIQUE, + public_key TEXT NOT NULL CHECK(json_valid(public_key)), + chain_id TEXT NOT NULL, + block_created INTEGER NOT NULL, + controller TEXT NOT NULL, + label TEXT NOT NULL, + handle TEXT NOT NULL, + is_subsidiary BOOLEAN NOT NULL DEFAULT FALSE CHECK(is_subsidiary IN (0,1)), + is_validator BOOLEAN NOT NULL DEFAULT FALSE CHECK(is_validator IN (0,1)), + is_delegator BOOLEAN NOT NULL DEFAULT FALSE CHECK(is_delegator IN (0,1)), + is_accountable BOOLEAN NOT NULL DEFAULT TRUE CHECK(is_accountable IN (0,1)) +); + +-- Profiles represent user identities +CREATE TABLE profiles ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + address TEXT NOT NULL, + handle TEXT NOT NULL UNIQUE, + origin TEXT NOT NULL, + name TEXT NOT NULL, + UNIQUE(address, origin) +); + +-- Vaults store encrypted data +CREATE TABLE vaults ( + id TEXT PRIMARY KEY, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + deleted_at TIMESTAMP, + handle TEXT NOT NULL, + origin TEXT NOT NULL, + address TEXT NOT NULL, + cid TEXT NOT NULL UNIQUE, + config TEXT NOT NULL CHECK(json_valid(config)), + session_id TEXT NOT NULL, + redirect_uri TEXT NOT NULL +); + +CREATE INDEX idx_credentials_handle ON credentials(handle); +CREATE INDEX idx_credentials_origin ON credentials(origin); +CREATE INDEX idx_credentials_deleted_at ON credentials(deleted_at); + +CREATE INDEX idx_accounts_address ON accounts(address); +CREATE INDEX idx_accounts_chain_id ON accounts(chain_id); +CREATE INDEX idx_accounts_block_created ON accounts(block_created); +CREATE INDEX idx_accounts_label ON accounts(label); +CREATE INDEX idx_accounts_controller ON accounts(controller); +CREATE INDEX idx_accounts_deleted_at ON accounts(deleted_at); + +CREATE INDEX idx_profiles_handle ON profiles(handle); +CREATE INDEX idx_profiles_address ON profiles(address); +CREATE INDEX idx_profiles_deleted_at ON profiles(deleted_at); + +CREATE INDEX idx_vaults_handle ON vaults(handle); +CREATE INDEX idx_vaults_session_id ON vaults(session_id); +CREATE INDEX idx_vaults_deleted_at ON vaults(deleted_at); diff --git a/ui/charts/area_chart.templ b/internal/ui/charts/area_chart.templ similarity index 100% rename from ui/charts/area_chart.templ rename to internal/ui/charts/area_chart.templ diff --git a/ui/charts/area_chart_templ.go b/internal/ui/charts/area_chart_templ.go similarity index 91% rename from ui/charts/area_chart_templ.go rename to internal/ui/charts/area_chart_templ.go index ee0493e..ed33f3d 100644 --- a/ui/charts/area_chart_templ.go +++ b/internal/ui/charts/area_chart_templ.go @@ -44,7 +44,7 @@ func AreaChart(data []DateValue) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(d.Date) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/area_chart.templ`, Line: 14, Col: 61} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/area_chart.templ`, Line: 14, Col: 61} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -57,7 +57,7 @@ func AreaChart(data []DateValue) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", d.Value)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/area_chart.templ`, Line: 15, Col: 81} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/area_chart.templ`, Line: 15, Col: 81} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { diff --git a/ui/charts/bar_chart.templ b/internal/ui/charts/bar_chart.templ similarity index 100% rename from ui/charts/bar_chart.templ rename to internal/ui/charts/bar_chart.templ diff --git a/ui/charts/bar_chart_templ.go b/internal/ui/charts/bar_chart_templ.go similarity index 92% rename from ui/charts/bar_chart_templ.go rename to internal/ui/charts/bar_chart_templ.go index 0081c6e..c0bad5a 100644 --- a/ui/charts/bar_chart_templ.go +++ b/internal/ui/charts/bar_chart_templ.go @@ -45,7 +45,7 @@ func BarChart(data []KeyValue) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(d.Key) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/bar_chart.templ`, Line: 15, Col: 60} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/bar_chart.templ`, Line: 15, Col: 60} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -58,7 +58,7 @@ func BarChart(data []KeyValue) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", d.Value)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/bar_chart.templ`, Line: 16, Col: 81} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/bar_chart.templ`, Line: 16, Col: 81} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { diff --git a/ui/charts/candle_chart.templ b/internal/ui/charts/candle_chart.templ similarity index 100% rename from ui/charts/candle_chart.templ rename to internal/ui/charts/candle_chart.templ diff --git a/ui/charts/candle_chart_templ.go b/internal/ui/charts/candle_chart_templ.go similarity index 100% rename from ui/charts/candle_chart_templ.go rename to internal/ui/charts/candle_chart_templ.go diff --git a/ui/charts/line_chart.templ b/internal/ui/charts/line_chart.templ similarity index 100% rename from ui/charts/line_chart.templ rename to internal/ui/charts/line_chart.templ diff --git a/ui/charts/line_chart_templ.go b/internal/ui/charts/line_chart_templ.go similarity index 91% rename from ui/charts/line_chart_templ.go rename to internal/ui/charts/line_chart_templ.go index b0ab0b6..40d3650 100644 --- a/ui/charts/line_chart_templ.go +++ b/internal/ui/charts/line_chart_templ.go @@ -39,7 +39,7 @@ func LineChart(data []DateValue) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(d.Date) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/line_chart.templ`, Line: 9, Col: 61} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/line_chart.templ`, Line: 9, Col: 61} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -52,7 +52,7 @@ func LineChart(data []DateValue) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", d.Value)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/line_chart.templ`, Line: 10, Col: 81} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/line_chart.templ`, Line: 10, Col: 81} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { diff --git a/ui/charts/pie_chart.templ b/internal/ui/charts/pie_chart.templ similarity index 100% rename from ui/charts/pie_chart.templ rename to internal/ui/charts/pie_chart.templ diff --git a/ui/charts/pie_chart_templ.go b/internal/ui/charts/pie_chart_templ.go similarity index 92% rename from ui/charts/pie_chart_templ.go rename to internal/ui/charts/pie_chart_templ.go index b4a10d4..0c02e19 100644 --- a/ui/charts/pie_chart_templ.go +++ b/internal/ui/charts/pie_chart_templ.go @@ -46,7 +46,7 @@ func PieChart(data []CategoryValue) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(d.Category) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/pie_chart.templ`, Line: 16, Col: 65} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/pie_chart.templ`, Line: 16, Col: 65} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -59,7 +59,7 @@ func PieChart(data []CategoryValue) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", d.Value)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/charts/pie_chart.templ`, Line: 17, Col: 81} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/charts/pie_chart.templ`, Line: 17, Col: 81} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { diff --git a/ui/app/helia/blocks.templ b/internal/ui/dash/cards.templ similarity index 99% rename from ui/app/helia/blocks.templ rename to internal/ui/dash/cards.templ index eb77c9c..02e6542 100644 --- a/ui/app/helia/blocks.templ +++ b/internal/ui/dash/cards.templ @@ -1,4 +1,4 @@ -package helia +package dash // StatusCard component for displaying Helia node status templ StatusCard() { diff --git a/ui/app/helia/blocks_templ.go b/internal/ui/dash/cards_templ.go similarity index 99% rename from ui/app/helia/blocks_templ.go rename to internal/ui/dash/cards_templ.go index de89f53..bd1f7f4 100644 --- a/ui/app/helia/blocks_templ.go +++ b/internal/ui/dash/cards_templ.go @@ -1,7 +1,7 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package helia +package dash //lint:file-ignore SA4006 This context is only used if a nested component is present. diff --git a/ui/app/helia/script.templ b/internal/ui/dash/scripts.templ similarity index 99% rename from ui/app/helia/script.templ rename to internal/ui/dash/scripts.templ index 2624745..0759b1e 100644 --- a/ui/app/helia/script.templ +++ b/internal/ui/dash/scripts.templ @@ -1,4 +1,4 @@ -package helia +package dash var heliaCardScriptHandle = templ.NewOnceHandle() diff --git a/ui/app/helia/script_templ.go b/internal/ui/dash/scripts_templ.go similarity index 99% rename from ui/app/helia/script_templ.go rename to internal/ui/dash/scripts_templ.go index ff205fb..ea5f342 100644 --- a/ui/app/helia/script_templ.go +++ b/internal/ui/dash/scripts_templ.go @@ -1,7 +1,7 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package helia +package dash //lint:file-ignore SA4006 This context is only used if a nested component is present. diff --git a/ui/views/console.templ b/internal/ui/dash/view.templ similarity index 69% rename from ui/views/console.templ rename to internal/ui/dash/view.templ index 48ff660..d3aef0e 100644 --- a/ui/views/console.templ +++ b/internal/ui/dash/view.templ @@ -1,13 +1,11 @@ -package views +package dash import ( - "github.com/sonr-io/motr/ui" - "github.com/sonr-io/motr/ui/app/helia" + "github.com/sonr-io/motr/internal/ui" + "github.com/sonr-io/motr/pkg/session" "time" ) -var heliaCardScriptHandle = templ.NewOnceHandle() - func ConsoleView(d time.Time) templ.Component { return consoleComponent(d) } @@ -15,6 +13,7 @@ func ConsoleView(d time.Time) templ.Component { templ consoleComponent(d time.Time) { @ui.HTML() { @ui.Head() { + @session.DefaultMetaComponent() } @ui.Nav() { @@ -34,16 +33,16 @@ templ consoleComponent(d time.Time) { @ui.Container() {
- @helia.StatusCard() - @helia.NodeIDCard() - @helia.DiscoveredPeersCard() - @helia.ConnectedPeersCard() + @StatusCard() + @NodeIDCard() + @DiscoveredPeersCard() + @ConnectedPeersCard()
- @helia.ConnectedPeersList() - @helia.RunningLog() + @ConnectedPeersList() + @RunningLog()
- @helia.ScriptTag() + @ScriptTag()
} diff --git a/ui/views/console_templ.go b/internal/ui/dash/view_templ.go similarity index 93% rename from ui/views/console_templ.go rename to internal/ui/dash/view_templ.go index a7f8c72..6272881 100644 --- a/ui/views/console_templ.go +++ b/internal/ui/dash/view_templ.go @@ -1,7 +1,7 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package views +package dash //lint:file-ignore SA4006 This context is only used if a nested component is present. @@ -9,13 +9,10 @@ import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" import ( - "github.com/sonr-io/motr/ui" - "github.com/sonr-io/motr/ui/app/helia" + "github.com/sonr-io/motr/internal/ui" "time" ) -var heliaCardScriptHandle = templ.NewOnceHandle() - func ConsoleView(d time.Time) templ.Component { return consoleComponent(d) } @@ -191,19 +188,19 @@ func consoleComponent(d time.Time) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.StatusCard().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = StatusCard().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.NodeIDCard().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = NodeIDCard().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.DiscoveredPeersCard().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = DiscoveredPeersCard().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.ConnectedPeersCard().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ConnectedPeersCard().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -211,11 +208,11 @@ func consoleComponent(d time.Time) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.ConnectedPeersList().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ConnectedPeersList().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.RunningLog().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = RunningLog().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -223,7 +220,7 @@ func consoleComponent(d time.Time) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = helia.ScriptTag().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ScriptTag().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/ui/views/home.templ b/internal/ui/home/view.templ similarity index 84% rename from ui/views/home.templ rename to internal/ui/home/view.templ index 6c4e053..eb6a5f6 100644 --- a/ui/views/home.templ +++ b/internal/ui/home/view.templ @@ -1,12 +1,7 @@ -package views +package home -import ( - "github.com/sonr-io/motr/sink" - "github.com/sonr-io/motr/ui" - "github.com/sonr-io/motr/ui/inputs" -) - -var meta = sink.DefaultMetadata() +import "github.com/sonr-io/motr/internal/ui" +import "github.com/sonr-io/motr/pkg/session" func HomeView() templ.Component { return homeComponent() @@ -15,7 +10,7 @@ func HomeView() templ.Component { templ homeComponent() { @ui.HTML() { @ui.Head() { - @ui.MetaComponent(meta) + @session.DefaultMetaComponent() } @ui.Nav() { @ui.NavLeft() { @@ -48,11 +43,9 @@ templ homeComponent() {

CREATE A SONR IDENTITY

-
- @inputs.HandleInitial() -
+
- + Claim Handle diff --git a/ui/views/home_templ.go b/internal/ui/home/view_templ.go similarity index 88% rename from ui/views/home_templ.go rename to internal/ui/home/view_templ.go index 1d2e60b..1089ed5 100644 --- a/ui/views/home_templ.go +++ b/internal/ui/home/view_templ.go @@ -1,20 +1,14 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package views +package home //lint:file-ignore SA4006 This context is only used if a nested component is present. import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import ( - "github.com/sonr-io/motr/sink" - "github.com/sonr-io/motr/ui" - "github.com/sonr-io/motr/ui/inputs" -) - -var meta = sink.DefaultMetadata() +import "github.com/sonr-io/motr/internal/ui" func HomeView() templ.Component { return homeComponent() @@ -65,7 +59,7 @@ func homeComponent() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = ui.MetaComponent(meta).Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ui.DefaultMetaComponent().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -173,15 +167,7 @@ func homeComponent() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "

CREATE A SONR IDENTITY

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = inputs.HandleInitial().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
Claim Handle
By signing up you agree to our Terms of Service and Privacy Policy
Already have an account? Login
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "

CREATE A SONR IDENTITY

Claim Handle
By signing up you agree to our Terms of Service and Privacy Policy
Already have an account? Login
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/ui/layout.templ b/internal/ui/layout.templ similarity index 63% rename from ui/layout.templ rename to internal/ui/layout.templ index e2c97b5..b069a88 100644 --- a/ui/layout.templ +++ b/internal/ui/layout.templ @@ -1,5 +1,36 @@ package ui +// Body is a component that renders the body tag +templ Body() { + + { children... } + +} + +// Head is a component that renders the head of the document +templ Head() { + + + + @ApexCharts() + @Helia() + @Dexie() + @Htmx() + @Tailwind() + @Shoelace() + @DefaultStyles() + { children... } + +} + +// HTML is a component that renders the html tag +templ HTML() { + + + { children... } + +} + // Columns is a component that renders a responsive flex container that stacks on mobile templ Columns() {
@@ -7,6 +38,7 @@ templ Columns() {
} +// Container is a component that renders a full screen container templ Container() {
@@ -19,20 +51,31 @@ templ Container() {
} +// Tailwind css dependencies +templ Tailwind() { + @tailwindHandle.Once() { + + } +} + +// Nav is a component that renders the navigation bar templ Nav() { } +// NavCTA is a component that renders a call to action button templ NavCTA(href string, text string) { { text } } +// NavItem is a component that renders a navigation item templ NavItem(href string, text string) { { text } } +// NavLogo is a component that renders a logo templ NavLogo(title string) { { children... } @@ -40,6 +83,7 @@ templ NavLogo(title string) { } +// NavLeft is a component that renders the left side of the navigation bar templ NavLeft() {
{ children... } diff --git a/internal/ui/layout_templ.go b/internal/ui/layout_templ.go new file mode 100644 index 0000000..14d4786 --- /dev/null +++ b/internal/ui/layout_templ.go @@ -0,0 +1,633 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.865 +package ui + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +// Body is a component that renders the body tag +func Body() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// Head is a component that renders the head of the document +func Head() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var2 := templ.GetChildren(ctx) + if templ_7745c5c3_Var2 == nil { + templ_7745c5c3_Var2 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = ApexCharts().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = Helia().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = Dexie().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = Htmx().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = Tailwind().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = Shoelace().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = DefaultStyles().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var2.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// HTML is a component that renders the html tag +func HTML() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var3 := templ.GetChildren(ctx) + if templ_7745c5c3_Var3 == nil { + templ_7745c5c3_Var3 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var3.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// Columns is a component that renders a responsive flex container that stacks on mobile +func Columns() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var4 := templ.GetChildren(ctx) + if templ_7745c5c3_Var4 == nil { + templ_7745c5c3_Var4 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var4.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// Container is a component that renders a full screen container +func Container() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var5 := templ.GetChildren(ctx) + if templ_7745c5c3_Var5 == nil { + templ_7745c5c3_Var5 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var5.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// Tailwind css dependencies +func Tailwind() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var6 := templ.GetChildren(ctx) + if templ_7745c5c3_Var6 == nil { + templ_7745c5c3_Var6 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Var7 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) + templ_7745c5c3_Err = tailwindHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// Nav is a component that renders the navigation bar +func Nav() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var8 := templ.GetChildren(ctx) + if templ_7745c5c3_Var8 == nil { + templ_7745c5c3_Var8 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// NavCTA is a component that renders a call to action button +func NavCTA(href string, text string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var9 := templ.GetChildren(ctx) + if templ_7745c5c3_Var9 == nil { + templ_7745c5c3_Var9 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var11 string + templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(text) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/layout.templ`, Line: 70, Col: 47} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// NavItem is a component that renders a navigation item +func NavItem(href string, text string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var12 := templ.GetChildren(ctx) + if templ_7745c5c3_Var12 == nil { + templ_7745c5c3_Var12 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var14 string + templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(text) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/layout.templ`, Line: 75, Col: 44} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// NavLogo is a component that renders a logo +func NavLogo(title string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var15 := templ.GetChildren(ctx) + if templ_7745c5c3_Var15 == nil { + templ_7745c5c3_Var15 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var15.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var16 string + templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(title) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/layout.templ`, Line: 82, Col: 48} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// NavLeft is a component that renders the left side of the navigation bar +func NavLeft() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var17 := templ.GetChildren(ctx) + if templ_7745c5c3_Var17 == nil { + templ_7745c5c3_Var17 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var17.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func NavRight() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var18 := templ.GetChildren(ctx) + if templ_7745c5c3_Var18 == nil { + templ_7745c5c3_Var18 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var18.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +// Rows is a component that renders a responsive flex container that wraps on mobile +func Rows() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var19 := templ.GetChildren(ctx) + if templ_7745c5c3_Var19 == nil { + templ_7745c5c3_Var19 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templ_7745c5c3_Var19.Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func Separator(text string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var20 := templ.GetChildren(ctx) + if templ_7745c5c3_Var20 == nil { + templ_7745c5c3_Var20 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var21 string + templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(text) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/layout.templ`, Line: 110, Col: 45} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 30, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/ui/inputs/input_handle.templ b/internal/ui/login/inputs.templ similarity index 64% rename from ui/inputs/input_handle.templ rename to internal/ui/login/inputs.templ index 3427c11..1abf52d 100644 --- a/ui/inputs/input_handle.templ +++ b/internal/ui/login/inputs.templ @@ -1,4 +1,25 @@ -package inputs +package login + +templ PasskeyInitial(clickHandler templ.ComponentScript) { + + + Register Passkey + +} + +templ PasskeyError(clickHandler templ.ComponentScript) { + + + Register Passkey + +} + +templ PasskeySuccess(clickHandler templ.ComponentScript) { + + + Register Passkey + +} templ HandleInitial() {
diff --git a/internal/ui/login/inputs_templ.go b/internal/ui/login/inputs_templ.go new file mode 100644 index 0000000..3354013 --- /dev/null +++ b/internal/ui/login/inputs_templ.go @@ -0,0 +1,263 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.865 +package login + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +func PasskeyInitial(clickHandler templ.ComponentScript) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var1 := templ.GetChildren(ctx) + if templ_7745c5c3_Var1 == nil { + templ_7745c5c3_Var1 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " Register Passkey") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func PasskeyError(clickHandler templ.ComponentScript) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var3 := templ.GetChildren(ctx) + if templ_7745c5c3_Var3 == nil { + templ_7745c5c3_Var3 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, " Register Passkey") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func PasskeySuccess(clickHandler templ.ComponentScript) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var5 := templ.GetChildren(ctx) + if templ_7745c5c3_Var5 == nil { + templ_7745c5c3_Var5 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " Register Passkey") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func HandleInitial() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var7 := templ.GetChildren(ctx) + if templ_7745c5c3_Var7 == nil { + templ_7745c5c3_Var7 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func HandleError(value string, helpText string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var8 := templ.GetChildren(ctx) + if templ_7745c5c3_Var8 == nil { + templ_7745c5c3_Var8 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func HandleSuccess(value string) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var11 := templ.GetChildren(ctx) + if templ_7745c5c3_Var11 == nil { + templ_7745c5c3_Var11 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/controllers/credential/inputs.templ b/internal/ui/login/scripts.templ similarity index 75% rename from controllers/credential/inputs.templ rename to internal/ui/login/scripts.templ index bf670ea..c0d7acc 100644 --- a/controllers/credential/inputs.templ +++ b/internal/ui/login/scripts.templ @@ -1,27 +1,6 @@ -package credential +package login -templ PasskeyInitial(clickHandler templ.ComponentScript) { - - - Register Passkey - -} - -templ PasskeyError(clickHandler templ.ComponentScript) { - - - Register Passkey - -} - -templ PasskeySuccess(clickHandler templ.ComponentScript) { - - - Register Passkey - -} - -script NavigatorCredentialsCreate(userId string, userHandle string, challenge string) { +script navigatorCredentialsCreate(userId string, userHandle string, challenge string) { const publicKey = { challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)), rp: { diff --git a/internal/ui/login/scripts_templ.go b/internal/ui/login/scripts_templ.go new file mode 100644 index 0000000..f296cea --- /dev/null +++ b/internal/ui/login/scripts_templ.go @@ -0,0 +1,106 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.865 +package login + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +func navigatorCredentialsCreate(userId string, userHandle string, challenge string) templ.ComponentScript { + return templ.ComponentScript{ + Name: `__templ_navigatorCredentialsCreate_8f96`, + Function: `function __templ_navigatorCredentialsCreate_8f96(userId, userHandle, challenge){const publicKey = { + challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)), + rp: { + name: "Sonr.ID", + }, + user: { + // Assuming that userId is ASCII-only + id: Uint8Array.from(userId, (c) => c.charCodeAt(0)), + name: userId, + displayName: userHandle, + }, + pubKeyCredParams: [ + { + type: "public-key", + alg: -7, // "ES256" + }, + { + type: "public-key", + alg: -257, // "RS256" + }, + ], + authenticatorSelection: { + userVerification: "required", + residentKey: "required", + authenticatorAttachment: "platform", + }, + timeout: 60000, // 1 minute + extensions: { + payment: { + isPayment: true, + }, + largeBlob: { + supported: "preferred", + }, + }, + }; + + // Helper function to convert ArrayBuffer to Base64URL string + function arrayBufferToBase64URL(buffer) { + const bytes = new Uint8Array(buffer); + let str = ''; + bytes.forEach(byte => { str += String.fromCharCode(byte) }); + return btoa(str) + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=/g, ''); + } + +navigator.credentials + .create({ publicKey }) + .then((newCredentialInfo) => { + if (!(newCredentialInfo instanceof PublicKeyCredential)) { + throw new Error('Received credential is not a PublicKeyCredential'); + } + + const response = newCredentialInfo.response; + if (!(response instanceof AuthenticatorAttestationResponse)) { + throw new Error('Response is not an AuthenticatorAttestationResponse'); + } + + // Convert the credential data to a cross-platform compatible format + const credentialJSON = { + id: newCredentialInfo.id, + rawId: arrayBufferToBase64URL(newCredentialInfo.rawId), + type: newCredentialInfo.type, + authenticatorAttachment: newCredentialInfo.authenticatorAttachment || null, + transports: Array.isArray(response.getTransports) ? response.getTransports() : [], + clientExtensionResults: newCredentialInfo.getClientExtensionResults(), + response: { + attestationObject: arrayBufferToBase64URL(response.attestationObject), + clientDataJSON: arrayBufferToBase64URL(response.clientDataJSON) + } + }; + + // Set the form value with the stringified credential data + const credential = document.getElementById('credential-data'); + credential.value = JSON.stringify(credentialJSON); + + // Submit the form + const form = document.getElementById('passkey-form'); + form.submit(); + }) + .catch((err) => { + console.error('Passkey creation failed:', err); + alert(` + "`" + `Failed to create passkey: ${err.message || 'Unknown error'}` + "`" + `); + }); +}`, + Call: templ.SafeScript(`__templ_navigatorCredentialsCreate_8f96`, userId, userHandle, challenge), + CallInline: templ.SafeScriptInline(`__templ_navigatorCredentialsCreate_8f96`, userId, userHandle, challenge), + } +} + +var _ = templruntime.GeneratedTemplate diff --git a/ui/views/login.templ b/internal/ui/login/view.templ similarity index 62% rename from ui/views/login.templ rename to internal/ui/login/view.templ index 5c2c178..6b816d7 100644 --- a/ui/views/login.templ +++ b/internal/ui/login/view.templ @@ -1,11 +1,13 @@ -package views +package login -import "github.com/sonr-io/motr/ui" +import "github.com/sonr-io/motr/internal/ui" +import "github.com/sonr-io/motr/pkg/session" templ LoginView() { @ui.HTML() { @ui.Head() { - @ui.MetaComponent(meta) + @session.DefaultMetaComponent() + @ui.DefaultMetaComponent() } @ui.Nav() { @ui.NavLeft() { diff --git a/ui/views/login_templ.go b/internal/ui/login/view_templ.go similarity index 98% rename from ui/views/login_templ.go rename to internal/ui/login/view_templ.go index 8cae2a4..e2ec07a 100644 --- a/ui/views/login_templ.go +++ b/internal/ui/login/view_templ.go @@ -1,14 +1,14 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package views +package login //lint:file-ignore SA4006 This context is only used if a nested component is present. import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import "github.com/sonr-io/motr/ui" +import "github.com/sonr-io/motr/internal/ui" func LoginView() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { @@ -55,7 +55,7 @@ func LoginView() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = ui.MetaComponent(meta).Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ui.DefaultMetaComponent().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/ui/meta_templ.go b/internal/ui/metadata_templ.go similarity index 55% rename from ui/meta_templ.go rename to internal/ui/metadata_templ.go index 6901ad8..4ce36df 100644 --- a/ui/meta_templ.go +++ b/internal/ui/metadata_templ.go @@ -8,9 +8,55 @@ package ui import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import "github.com/sonr-io/motr/sink" +import "github.com/labstack/echo/v4" -func MetaComponent(m sink.Metadata) templ.Component { +func GetMetadata(c echo.Context) Metadata { + return DefaultMetadata() +} + +func GetMetaComponent(c echo.Context) templ.Component { + return MetaComponent(GetMetadata(c)) +} + +func DefaultMetadata() Metadata { + return Metadata{ + Title: "Motr", + Author: "Sonr", + Favicon: "https://cdn.sonr.id/favicon.png", + Robots: "index, follow", + Googlebot: "index, follow", + Google: "nositelinkssearchbox", + Description: "Sonr is a decentralized social network that allows you to create your own personalized digital identity.", + Keywords: "Sonr, social network, decentralized, identity, decentralized social network, decentralized identity, self-sovereign identity, self-sovereign, self-sovereign social network, self-sovereign identity network, sso, sso network, sso identity, sso social network, digital identity, digital social network", + CanonicalURL: "https://sonr.io", + OGImage: "https://cdn.sonr.id/og.png", + OGURL: "https://sonr.io", + OGSiteName: "Sonr", + TwitterSite: "@sonr_io", + TwitterCreator: "@sonr_io", + TwitterImage: "https://cdn.sonr.id/og.png", + } +} + +type Metadata struct { + Title string + Author string + Favicon string + Robots string + Googlebot string + Google string + Description string + Keywords string + CanonicalURL string + OGImage string + OGURL string + OGSiteName string + TwitterSite string + TwitterCreator string + TwitterImage string +} + +func DefaultMetaComponent() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -31,241 +77,270 @@ func MetaComponent(m sink.Metadata) templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "<title>Motr") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var2 string - templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(m.Title) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/meta.templ`, Line: 6, Col: 17} + return nil + }) +} + +func MetaComponent(m Metadata) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var3 string - templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(m.Favicon) + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(m.Title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/meta.templ`, Line: 7, Col: 51} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/metadata.templ`, Line: 76, Col: 17} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "\">") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 19, "\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/ui/imports.templ b/internal/ui/providers.templ similarity index 96% rename from ui/imports.templ rename to internal/ui/providers.templ index acc7bfd..76dd400 100644 --- a/ui/imports.templ +++ b/internal/ui/providers.templ @@ -8,12 +8,20 @@ var ( dexieHandle = templ.NewOnceHandle() heliaHandle = templ.NewOnceHandle() htmxHandle = templ.NewOnceHandle() + tailwindHandle = templ.NewOnceHandle() ) +// ApexCharts is a component that renders the ApexCharts.js library +templ ApexCharts() { + @apexChartsHandle.Once() { + + } +} + // d3 is a component that renders the D3.js library templ D3() { @d3Handle.Once() { - } @@ -27,12 +35,6 @@ templ Dexie() { } } -templ ApexCharts() { - @apexChartsHandle.Once() { - - } -} - // In package deps templ Helia() { @heliaHandle.Once() { @@ -71,7 +73,6 @@ templ Helia() { // Peer management window.discoveredPeers = new Map() - const updateConnectedPeers = () => { if (!window.helia || !window.helia.libp2p) return @@ -93,14 +94,12 @@ templ Helia() { } } } - const updateDiscoveredPeers = () => { const discoveredPeerCountEl = document.getElementById('discoveredPeerCount') if (discoveredPeerCountEl) { discoveredPeerCountEl.innerHTML = window.discoveredPeers.size } } - // Helia node instantiation let heliaInstance = null window.instantiateHeliaNode = async () => { @@ -111,13 +110,11 @@ templ Helia() { if (heliaInstance != null) { return heliaInstance } - heliaInstance = await Helia.createHelia({ datastore, blockstore }) addToLog('Created Helia instance') - return heliaInstance } @@ -136,6 +133,7 @@ templ Htmx() { } } +// jsDelivrURL returns the URL of a package on jsDelivr func jsDelivrURL(pkg string, version string, path string) string { return fmt.Sprintf("https://cdn.jsdelivr.net/npm/%s/%s/%s", pkg, version, path) } diff --git a/ui/imports_templ.go b/internal/ui/providers_templ.go similarity index 79% rename from ui/imports_templ.go rename to internal/ui/providers_templ.go index 3e4ced3..ef943dc 100644 --- a/ui/imports_templ.go +++ b/internal/ui/providers_templ.go @@ -16,10 +16,11 @@ var ( dexieHandle = templ.NewOnceHandle() heliaHandle = templ.NewOnceHandle() htmxHandle = templ.NewOnceHandle() + tailwindHandle = templ.NewOnceHandle() ) -// d3 is a component that renders the D3.js library -func D3() templ.Component { +// ApexCharts is a component that renders the ApexCharts.js library +func ApexCharts() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -52,13 +53,13 @@ func D3() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = d3Handle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = apexChartsHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -66,8 +67,8 @@ func D3() templ.Component { }) } -// dexie is a component that renders the Dexie.js library -func Dexie() templ.Component { +// d3 is a component that renders the D3.js library +func D3() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -100,39 +101,13 @@ func Dexie() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = dexieHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = d3Handle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -140,7 +115,8 @@ func Dexie() templ.Component { }) } -func ApexCharts() templ.Component { +// dexie is a component that renders the Dexie.js library +func Dexie() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -156,12 +132,12 @@ func ApexCharts() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var7 := templ.GetChildren(ctx) - if templ_7745c5c3_Var7 == nil { - templ_7745c5c3_Var7 = templ.NopComponent + templ_7745c5c3_Var5 := templ.GetChildren(ctx) + if templ_7745c5c3_Var5 == nil { + templ_7745c5c3_Var5 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var8 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_Var6 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) if !templ_7745c5c3_IsBuffer { @@ -173,13 +149,39 @@ func ApexCharts() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return nil }) - templ_7745c5c3_Err = apexChartsHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var8), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = dexieHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var6), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -221,7 +223,7 @@ func Helia() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -276,7 +278,7 @@ func Htmx() templ.Component { var templ_7745c5c3_Var13 string templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx.org", "1.9.12", "dist/htmx.min.js")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/imports.templ`, Line: 130, Col: 69} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/providers.templ`, Line: 127, Col: 69} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { @@ -289,7 +291,7 @@ func Htmx() templ.Component { var templ_7745c5c3_Var14 string templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-include-vals", "2.0.0", "include-vals.min.js")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/imports.templ`, Line: 131, Col: 84} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/providers.templ`, Line: 128, Col: 84} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { @@ -302,7 +304,7 @@ func Htmx() templ.Component { var templ_7745c5c3_Var15 string templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-path-params", "2.0.0", "path-params.min.js")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/imports.templ`, Line: 132, Col: 82} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/providers.templ`, Line: 129, Col: 82} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { @@ -315,7 +317,7 @@ func Htmx() templ.Component { var templ_7745c5c3_Var16 string templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-alpine-morph", "2.0.0", "alpine-morph.min.js")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/imports.templ`, Line: 133, Col: 84} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/providers.templ`, Line: 130, Col: 84} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { @@ -328,7 +330,7 @@ func Htmx() templ.Component { var templ_7745c5c3_Var17 string templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-sse", "2.2.2", "sse.min.js")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/imports.templ`, Line: 134, Col: 66} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/providers.templ`, Line: 131, Col: 66} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) if templ_7745c5c3_Err != nil { @@ -341,7 +343,7 @@ func Htmx() templ.Component { var templ_7745c5c3_Var18 string templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-ws", "2.0.2", "ws.min.js")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/imports.templ`, Line: 135, Col: 64} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/providers.templ`, Line: 132, Col: 64} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { @@ -361,6 +363,7 @@ func Htmx() templ.Component { }) } +// jsDelivrURL returns the URL of a package on jsDelivr func jsDelivrURL(pkg string, version string, path string) string { return fmt.Sprintf("https://cdn.jsdelivr.net/npm/%s/%s/%s", pkg, version, path) } diff --git a/internal/ui/register/inputs.templ b/internal/ui/register/inputs.templ new file mode 100644 index 0000000..9ed953e --- /dev/null +++ b/internal/ui/register/inputs.templ @@ -0,0 +1,67 @@ +package register + +templ InputAvatar(value string, helpText string) { + + + +} + +templ InputAvatarSuccess(value string, url string) { + + + +} + +templ HandleInitial() { +
+ + + + +
+
+} + +templ HandleError(value string, helpText string) { + + +
+ +
+
+ +
+
+
+} + +templ HandleSuccess(value string) { + + +
+ +
+
+
+} + +templ PasskeyInitial(clickHandler templ.ComponentScript) { + + + Register Passkey + +} + +templ PasskeyError(clickHandler templ.ComponentScript) { + + + Register Passkey + +} + +templ PasskeySuccess(clickHandler templ.ComponentScript) { + + + Register Passkey + +} diff --git a/ui/layout_templ.go b/internal/ui/register/inputs_templ.go similarity index 58% rename from ui/layout_templ.go rename to internal/ui/register/inputs_templ.go index 89198e0..ff6dab9 100644 --- a/ui/layout_templ.go +++ b/internal/ui/register/inputs_templ.go @@ -1,15 +1,14 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package ui +package register //lint:file-ignore SA4006 This context is only used if a nested component is present. import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -// Columns is a component that renders a responsive flex container that stacks on mobile -func Columns() templ.Component { +func InputAvatar(value string, helpText string) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -30,15 +29,7 @@ func Columns() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -46,7 +37,7 @@ func Columns() templ.Component { }) } -func Container() templ.Component { +func InputAvatarSuccess(value string, url string) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -67,15 +58,7 @@ func Container() templ.Component { templ_7745c5c3_Var2 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ_7745c5c3_Var2.Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -83,7 +66,7 @@ func Container() templ.Component { }) } -func Nav() templ.Component { +func HandleInitial() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -104,15 +87,7 @@ func Nav() templ.Component { templ_7745c5c3_Var3 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -120,7 +95,7 @@ func Nav() templ.Component { }) } -func NavCTA(href string, text string) templ.Component { +func HandleError(value string, helpText string) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -141,33 +116,33 @@ func NavCTA(href string, text string) templ.Component { templ_7745c5c3_Var4 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, "User Handle ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\" help-text=\"") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(text) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(helpText) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/layout.templ`, Line: 29, Col: 47} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/register/inputs.templ`, Line: 27, Col: 188} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "\">

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -175,7 +150,7 @@ func NavCTA(href string, text string) templ.Component { }) } -func NavItem(href string, text string) templ.Component { +func HandleSuccess(value string) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -196,33 +171,20 @@ func NavItem(href string, text string) templ.Component { templ_7745c5c3_Var7 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "User Handle ") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(text) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/layout.templ`, Line: 33, Col: 44} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "\" disabled>

") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -230,7 +192,7 @@ func NavItem(href string, text string) templ.Component { }) } -func NavLogo(title string) templ.Component { +func PasskeyInitial(clickHandler templ.ComponentScript) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -246,33 +208,25 @@ func NavLogo(title string) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var10 := templ.GetChildren(ctx) - if templ_7745c5c3_Var10 == nil { - templ_7745c5c3_Var10 = templ.NopComponent + templ_7745c5c3_Var9 := templ.GetChildren(ctx) + if templ_7745c5c3_Var9 == nil { + templ_7745c5c3_Var9 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "") + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var10.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "") + var templ_7745c5c3_Var10 templ.ComponentScript = clickHandler + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var10.Call) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var11 string - templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(title) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/layout.templ`, Line: 39, Col: 48} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 15, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "\"> Register Passkey") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -280,7 +234,7 @@ func NavLogo(title string) templ.Component { }) } -func NavLeft() templ.Component { +func PasskeyError(clickHandler templ.ComponentScript) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -296,20 +250,25 @@ func NavLeft() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var12 := templ.GetChildren(ctx) - if templ_7745c5c3_Var12 == nil { - templ_7745c5c3_Var12 = templ.NopComponent + templ_7745c5c3_Var11 := templ.GetChildren(ctx) + if templ_7745c5c3_Var11 == nil { + templ_7745c5c3_Var11 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
") + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var12.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, "") + var templ_7745c5c3_Var12 templ.ComponentScript = clickHandler + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var12.Call) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 12, "\"> Register Passkey") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -317,7 +276,7 @@ func NavLeft() templ.Component { }) } -func NavRight() templ.Component { +func PasskeySuccess(clickHandler templ.ComponentScript) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -338,95 +297,20 @@ func NavRight() templ.Component { templ_7745c5c3_Var13 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "
") + templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templ_7745c5c3_Var13.Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 13, "") + var templ_7745c5c3_Var14 templ.ComponentScript = clickHandler + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var14.Call) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - return nil - }) -} - -// Rows is a component that renders a responsive flex container that wraps on mobile -func Rows() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var14 := templ.GetChildren(ctx) - if templ_7745c5c3_Var14 == nil { - templ_7745c5c3_Var14 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ_7745c5c3_Var14.Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func Separator(text string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var15 := templ.GetChildren(ctx) - if templ_7745c5c3_Var15 == nil { - templ_7745c5c3_Var15 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var16 string - templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(text) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/layout.templ`, Line: 66, Col: 45} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 14, "\"> Register Passkey
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/ui/inputs/input_passkey.templ b/internal/ui/register/scripts.templ similarity index 77% rename from ui/inputs/input_passkey.templ rename to internal/ui/register/scripts.templ index fc9dedd..14f1da8 100644 --- a/ui/inputs/input_passkey.templ +++ b/internal/ui/register/scripts.templ @@ -1,25 +1,5 @@ -package inputs +package register -templ PasskeyInitial(clickHandler templ.ComponentScript) { - - - Register Passkey - -} - -templ PasskeyError(clickHandler templ.ComponentScript) { - - - Register Passkey - -} - -templ PasskeySuccess(clickHandler templ.ComponentScript) { - - - Register Passkey - -} script NavigatorCredentialsCreate(userId string, userHandle string, challenge string) { const publicKey = { diff --git a/internal/ui/register/scripts_templ.go b/internal/ui/register/scripts_templ.go new file mode 100644 index 0000000..60937cf --- /dev/null +++ b/internal/ui/register/scripts_templ.go @@ -0,0 +1,106 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.3.865 +package register + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +func NavigatorCredentialsCreate(userId string, userHandle string, challenge string) templ.ComponentScript { + return templ.ComponentScript{ + Name: `__templ_NavigatorCredentialsCreate_8f96`, + Function: `function __templ_NavigatorCredentialsCreate_8f96(userId, userHandle, challenge){const publicKey = { + challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)), + rp: { + name: "Sonr.ID", + }, + user: { + // Assuming that userId is ASCII-only + id: Uint8Array.from(userId, (c) => c.charCodeAt(0)), + name: userId, + displayName: userHandle, + }, + pubKeyCredParams: [ + { + type: "public-key", + alg: -7, // "ES256" + }, + { + type: "public-key", + alg: -257, // "RS256" + }, + ], + authenticatorSelection: { + userVerification: "required", + residentKey: "required", + authenticatorAttachment: "platform", + }, + timeout: 60000, // 1 minute + extensions: { + payment: { + isPayment: true, + }, + largeBlob: { + supported: "preferred", + }, + }, + }; + + // Helper function to convert ArrayBuffer to Base64URL string + function arrayBufferToBase64URL(buffer) { + const bytes = new Uint8Array(buffer); + let str = ''; + bytes.forEach(byte => { str += String.fromCharCode(byte) }); + return btoa(str) + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=/g, ''); + } + +navigator.credentials + .create({ publicKey }) + .then((newCredentialInfo) => { + if (!(newCredentialInfo instanceof PublicKeyCredential)) { + throw new Error('Received credential is not a PublicKeyCredential'); + } + + const response = newCredentialInfo.response; + if (!(response instanceof AuthenticatorAttestationResponse)) { + throw new Error('Response is not an AuthenticatorAttestationResponse'); + } + + // Convert the credential data to a cross-platform compatible format + const credentialJSON = { + id: newCredentialInfo.id, + rawId: arrayBufferToBase64URL(newCredentialInfo.rawId), + type: newCredentialInfo.type, + authenticatorAttachment: newCredentialInfo.authenticatorAttachment || null, + transports: Array.isArray(response.getTransports) ? response.getTransports() : [], + clientExtensionResults: newCredentialInfo.getClientExtensionResults(), + response: { + attestationObject: arrayBufferToBase64URL(response.attestationObject), + clientDataJSON: arrayBufferToBase64URL(response.clientDataJSON) + } + }; + + // Set the form value with the stringified credential data + const credential = document.getElementById('credential-data'); + credential.value = JSON.stringify(credentialJSON); + + // Submit the form + const form = document.getElementById('passkey-form'); + form.submit(); + }) + .catch((err) => { + console.error('Passkey creation failed:', err); + alert(` + "`" + `Failed to create passkey: ${err.message || 'Unknown error'}` + "`" + `); + }); +}`, + Call: templ.SafeScript(`__templ_NavigatorCredentialsCreate_8f96`, userId, userHandle, challenge), + CallInline: templ.SafeScriptInline(`__templ_NavigatorCredentialsCreate_8f96`, userId, userHandle, challenge), + } +} + +var _ = templruntime.GeneratedTemplate diff --git a/internal/ui/register/view.templ b/internal/ui/register/view.templ new file mode 100644 index 0000000..c8b7b7e --- /dev/null +++ b/internal/ui/register/view.templ @@ -0,0 +1,57 @@ +package register + +import "github.com/sonr-io/motr/internal/ui" +import "github.com/sonr-io/motr/pkg/session" + +templ RegisterView() { + @ui.HTML() { + @ui.Head() { + @session.DefaultMetaComponent() + @ui.DefaultMetaComponent() + } + @ui.Nav() { + @ui.NavLeft() { + @ui.NavLogo("Sonr") { +
+ +
+ } + } + @ui.NavRight() { + } + } + // Body + @ui.Body() { + @ui.Container() { + + + + + } + } + } +} diff --git a/ui/views/register_templ.go b/internal/ui/register/view_templ.go similarity index 87% rename from ui/views/register_templ.go rename to internal/ui/register/view_templ.go index bad85be..3895864 100644 --- a/ui/views/register_templ.go +++ b/internal/ui/register/view_templ.go @@ -1,17 +1,14 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package views +package register //lint:file-ignore SA4006 This context is only used if a nested component is present. import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import ( - "github.com/sonr-io/motr/ui" - "github.com/sonr-io/motr/ui/inputs" -) +import "github.com/sonr-io/motr/internal/ui" func RegisterView() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { @@ -58,7 +55,7 @@ func RegisterView() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = ui.MetaComponent(meta).Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = ui.DefaultMetaComponent().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -152,7 +149,7 @@ func RegisterView() templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -180,7 +177,7 @@ func RegisterView() templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = inputs.HandleInitial().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/ui/style.templ b/internal/ui/styles.templ similarity index 86% rename from ui/style.templ rename to internal/ui/styles.templ index b3e1a63..4a27eb0 100644 --- a/ui/style.templ +++ b/internal/ui/styles.templ @@ -1,32 +1,5 @@ package ui -var ( - tailwindHandle = templ.NewOnceHandle() -) - -// Shoelace dependencies -templ Shoelace() { - - - -} - -// Tailwind css dependencies -templ Tailwind() { - @tailwindHandle.Once() { - - } -} - templ DefaultStyles() { } + +// Shoelace dependencies +templ Shoelace() { + + + +} diff --git a/ui/style_templ.go b/internal/ui/styles_templ.go similarity index 62% rename from ui/style_templ.go rename to internal/ui/styles_templ.go index 793e1ec..5010dca 100644 --- a/ui/style_templ.go +++ b/internal/ui/styles_templ.go @@ -8,12 +8,7 @@ package ui import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -var ( - tailwindHandle = templ.NewOnceHandle() -) - -// Shoelace dependencies -func Shoelace() templ.Component { +func DefaultStyles() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -34,7 +29,7 @@ func Shoelace() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -42,8 +37,8 @@ func Shoelace() templ.Component { }) } -// Tailwind css dependencies -func Tailwind() templ.Component { +// Shoelace dependencies +func Shoelace() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -64,54 +59,7 @@ func Tailwind() templ.Component { templ_7745c5c3_Var2 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) - templ_7745c5c3_Err = tailwindHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func DefaultStyles() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var4 := templ.GetChildren(ctx) - if templ_7745c5c3_Var4 == nil { - templ_7745c5c3_Var4 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/internal/ui/transfer/data.go b/internal/ui/transfer/data.go new file mode 100644 index 0000000..df8987b --- /dev/null +++ b/internal/ui/transfer/data.go @@ -0,0 +1,24 @@ +package transfer + +type CoinInfo struct { + Ticker string + Name string + IsDefault bool +} + +var defaultCoins = []CoinInfo{ + {Ticker: "SNR", Name: "Sonr", IsDefault: true}, + {Ticker: "BTC", Name: "Bitcoin", IsDefault: true}, + {Ticker: "ETH", Name: "Ethereum", IsDefault: true}, + {Ticker: "SOL", Name: "Solana", IsDefault: false}, + {Ticker: "LTC", Name: "Litecoin", IsDefault: false}, + {Ticker: "DOGE", Name: "Dogecoin", IsDefault: false}, + {Ticker: "XRP", Name: "Ripple", IsDefault: false}, + {Ticker: "OSMO", Name: "Osmosis", IsDefault: false}, + {Ticker: "ATOM", Name: "Cosmos", IsDefault: false}, + {Ticker: "STARZ", Name: "Stargaze", IsDefault: false}, + {Ticker: "AKT", Name: "Akash", IsDefault: false}, + {Ticker: "EVMOS", Name: "Evmos", IsDefault: false}, + {Ticker: "FIL", Name: "Filecoin", IsDefault: false}, + {Ticker: "AXL", Name: "Axelar", IsDefault: false}, +} diff --git a/ui/menus/coins_dropdown.templ b/internal/ui/transfer/inputs.templ similarity index 53% rename from ui/menus/coins_dropdown.templ rename to internal/ui/transfer/inputs.templ index 6b522d5..4d75a41 100644 --- a/ui/menus/coins_dropdown.templ +++ b/internal/ui/transfer/inputs.templ @@ -1,26 +1,39 @@ -package wallet +package transfer -type CoinInfo struct { - Ticker string - Name string - IsDefault bool -} - -var defaultCoins = []CoinInfo{ - {Ticker: "SNR", Name: "Sonr", IsDefault: true}, - {Ticker: "BTC", Name: "Bitcoin", IsDefault: true}, - {Ticker: "ETH", Name: "Ethereum", IsDefault: true}, - {Ticker: "SOL", Name: "Solana", IsDefault: false}, - {Ticker: "LTC", Name: "Litecoin", IsDefault: false}, - {Ticker: "DOGE", Name: "Dogecoin", IsDefault: false}, - {Ticker: "XRP", Name: "Ripple", IsDefault: false}, - {Ticker: "OSMO", Name: "Osmosis", IsDefault: false}, - {Ticker: "ATOM", Name: "Cosmos", IsDefault: false}, - {Ticker: "STARZ", Name: "Stargaze", IsDefault: false}, - {Ticker: "AKT", Name: "Akash", IsDefault: false}, - {Ticker: "EVMOS", Name: "Evmos", IsDefault: false}, - {Ticker: "FIL", Name: "Filecoin", IsDefault: false}, - {Ticker: "AXL", Name: "Axelar", IsDefault: false}, +templ AssetsDropdown() { + + + + Sonr + + + + Bitcoin + + + + Ethereum + + + + Solana + + + + Litecoin + + + + Dogecoin + + } templ CoinsDropdown() { diff --git a/ui/menus/coins_dropdown_templ.go b/internal/ui/transfer/inputs_templ.go similarity index 64% rename from ui/menus/coins_dropdown_templ.go rename to internal/ui/transfer/inputs_templ.go index e76b2e7..e3d8bed 100644 --- a/ui/menus/coins_dropdown_templ.go +++ b/internal/ui/transfer/inputs_templ.go @@ -1,37 +1,14 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.3.865 -package wallet +package transfer //lint:file-ignore SA4006 This context is only used if a nested component is present. import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -type CoinInfo struct { - Ticker string - Name string - IsDefault bool -} - -var defaultCoins = []CoinInfo{ - {Ticker: "SNR", Name: "Sonr", IsDefault: true}, - {Ticker: "BTC", Name: "Bitcoin", IsDefault: true}, - {Ticker: "ETH", Name: "Ethereum", IsDefault: true}, - {Ticker: "SOL", Name: "Solana", IsDefault: false}, - {Ticker: "LTC", Name: "Litecoin", IsDefault: false}, - {Ticker: "DOGE", Name: "Dogecoin", IsDefault: false}, - {Ticker: "XRP", Name: "Ripple", IsDefault: false}, - {Ticker: "OSMO", Name: "Osmosis", IsDefault: false}, - {Ticker: "ATOM", Name: "Cosmos", IsDefault: false}, - {Ticker: "STARZ", Name: "Stargaze", IsDefault: false}, - {Ticker: "AKT", Name: "Akash", IsDefault: false}, - {Ticker: "EVMOS", Name: "Evmos", IsDefault: false}, - {Ticker: "FIL", Name: "Filecoin", IsDefault: false}, - {Ticker: "AXL", Name: "Axelar", IsDefault: false}, -} - -func CoinsDropdown() templ.Component { +func AssetsDropdown() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -52,7 +29,36 @@ func CoinsDropdown() templ.Component { templ_7745c5c3_Var1 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " Sonr Bitcoin Ethereum Solana Litecoin Dogecoin") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return nil + }) +} + +func CoinsDropdown() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var2 := templ.GetChildren(ctx) + if templ_7745c5c3_Var2 == nil { + templ_7745c5c3_Var2 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -62,7 +68,7 @@ func CoinsDropdown() templ.Component { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -86,96 +92,96 @@ func CoinOption(a CoinInfo) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var2 := templ.GetChildren(ctx) - if templ_7745c5c3_Var2 == nil { - templ_7745c5c3_Var2 = templ.NopComponent + templ_7745c5c3_Var3 := templ.GetChildren(ctx) + if templ_7745c5c3_Var3 == nil { + templ_7745c5c3_Var3 = templ.NopComponent } ctx = templ.ClearChildren(ctx) if a.IsDefault { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "\" selected disabled> ") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - } else { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 7, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var6 string - templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(a.Ticker) + templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `ui/menus/coins_dropdown.templ`, Line: 61, Col: 29} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/transfer/inputs.templ`, Line: 70, Col: 11} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, "\"> ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 8, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 9, "\"> ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "\" library=\"crypto\"> ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var9 string + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `internal/ui/transfer/inputs.templ`, Line: 76, Col: 11} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 11, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/middleware/cache.go b/middleware/cache.go deleted file mode 100644 index 6f85d37..0000000 --- a/middleware/cache.go +++ /dev/null @@ -1,203 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package middleware - -import ( - "bytes" - "io" - "net/http" - "strconv" - - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/sink/config" - "github.com/syumai/workers/cloudflare" - "github.com/syumai/workers/cloudflare/cache" -) - -// CloudflareCache represents the middleware for Cloudflare cache -type CloudflareCache struct { - // Config holds the cache configuration - Config config.CacheConfig - // CacheableStatusCodes are HTTP status codes that should be cached (map for faster lookups) - CacheableStatusCodes map[int]bool - // CacheableContentTypes are content types that should be cached (map for faster lookups) - CacheableContentTypes map[string]bool -} - -// UseCloudflareCache creates a new CloudflareCache middleware -func UseCloudflareCache(cfg config.Config) echo.MiddlewareFunc { - // If cache is disabled, return a pass-through middleware - if !cfg.Cache.Enabled { - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - return next(c) - } - } - } - - // Convert slice to map for faster lookups - cacheableStatusCodes := make(map[int]bool) - for _, code := range cfg.Cache.CacheableStatusCodes { - cacheableStatusCodes[code] = true - } - - cacheableContentTypes := make(map[string]bool) - for _, contentType := range cfg.Cache.CacheableContentTypes { - cacheableContentTypes[contentType] = true - } - - cacheMiddleware := &CloudflareCache{ - Config: cfg.Cache, - CacheableStatusCodes: cacheableStatusCodes, - CacheableContentTypes: cacheableContentTypes, - } - - return cacheMiddleware.Process -} - -// responseWriter is a custom response writer that captures the response -type responseWriter struct { - echo.Response - body *bytes.Buffer - statusCode int - headers http.Header -} - -// newResponseWriter creates a new responseWriter -func newResponseWriter(c echo.Context) *responseWriter { - return &responseWriter{ - Response: *c.Response(), - body: bytes.NewBuffer(nil), - statusCode: http.StatusOK, - headers: make(http.Header), - } -} - -// Write captures the response body -func (rw *responseWriter) Write(b []byte) (int, error) { - rw.body.Write(b) - return rw.Response.Write(b) -} - -// WriteHeader captures the status code -func (rw *responseWriter) WriteHeader(code int) { - rw.statusCode = code - rw.Response.WriteHeader(code) -} - -// Header returns the response headers -func (rw *responseWriter) Header() http.Header { - return rw.Response.Header() -} - -// ToHTTPResponse converts the response writer to an HTTP response -func (rw *responseWriter) ToHTTPResponse() *http.Response { - return &http.Response{ - StatusCode: rw.statusCode, - Header: rw.Header(), - Body: io.NopCloser(bytes.NewReader(rw.body.Bytes())), - } -} - -// shouldBypassCache determines if the cache should be bypassed -func (cc *CloudflareCache) shouldBypassCache(c echo.Context) bool { - // Check if bypass header is present - if c.Request().Header.Get(cc.Config.BypassHeader) == cc.Config.BypassValue { - return true - } - - // Only cache GET and HEAD requests - if c.Request().Method != http.MethodGet && c.Request().Method != http.MethodHead { - return true - } - - return false -} - -// isCacheable determines if the response is cacheable -func (cc *CloudflareCache) isCacheable(rw *responseWriter) bool { - // Check if status code is cacheable - if !cc.CacheableStatusCodes[rw.statusCode] { - return false - } - - // Check if content type is cacheable - contentType := rw.Header().Get(echo.HeaderContentType) - for cacheableType := range cc.CacheableContentTypes { - if contentType == cacheableType || (len(contentType) >= len(cacheableType) && contentType[:len(cacheableType)] == cacheableType) { - return true - } - } - - return false -} - -// Process is the middleware function -func (cc *CloudflareCache) Process(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - // Skip cache if needed - if cc.shouldBypassCache(c) { - return next(c) - } - - // Create a new cache instance - cacheInstance := cache.New() - - // Try to get from cache - cachedResponse, err := cacheInstance.Match(c.Request(), nil) - if err == nil && cachedResponse != nil { - // Set the response status code - c.Response().WriteHeader(cachedResponse.StatusCode) - - // Set the response headers - for key, values := range cachedResponse.Header { - for _, value := range values { - c.Response().Header().Add(key, value) - } - } - - // Add a header to indicate cache hit - c.Response().Header().Add("X-Cache", "HIT") - - // Copy the response body - io.Copy(c.Response().Writer, cachedResponse.Body) - - return nil - } - - // Create a custom response writer to capture the response - rw := newResponseWriter(c) - c.Response().Writer = rw - - // Process the request - err = next(c) - if err != nil { - return err - } - - // Check if response should be cached - if !cc.isCacheable(rw) { - return nil - } - - // Ensure Cache-Control header is set if not already - if rw.Header().Get(echo.HeaderCacheControl) == "" { - rw.Header().Set(echo.HeaderCacheControl, "max-age="+strconv.Itoa(cc.Config.DefaultMaxAge)) - } - - // Add a header to indicate cache miss - rw.Header().Add("X-Cache", "MISS") - - // Store in cache asynchronously using WaitUntil for Cloudflare Workers - cloudflare.WaitUntil(func() { - err := cacheInstance.Put(c.Request(), rw.ToHTTPResponse()) - if err != nil { - // Log error if needed - c.Logger().Errorf("Failed to store response in cache: %v", err) - } - }) - - return nil - } -} diff --git a/middleware/context.go b/middleware/context.go deleted file mode 100644 index 3cd7d73..0000000 --- a/middleware/context.go +++ /dev/null @@ -1,69 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package middleware - -import ( - "time" - - "github.com/labstack/echo/v4" - "github.com/segmentio/ksuid" - "github.com/sonr-io/motr/sink" - "github.com/sonr-io/motr/sink/config" - "github.com/sonr-io/motr/sink/models" - "github.com/syumai/workers/cloudflare/kv" -) - -type SessionContext struct { - echo.Context - ID string - DB models.Querier - Config config.Config - Handles *kv.Namespace - Sessions *kv.Namespace - Status *sink.Status -} - -func NewSession(c echo.Context, cfg config.Config, q models.Querier, hkv *kv.Namespace, skv *kv.Namespace) *SessionContext { - id := getOrCreateSessionID(c) - return &SessionContext{ - Context: c, - ID: id, - Config: cfg, - DB: q, - Handles: hkv, - Sessions: skv, - Status: &sink.Status{ - SessionID: id, - Expires: cfg.KV.GetSessionExpiry(time.Now()), - Status: "default", - Handle: "", - }, - } -} - -func GetSession(c echo.Context) *SessionContext { - cc := c.(*SessionContext) - if cc == nil { - panic("Session Context not found") - } - return cc -} - -// getOrCreateSessionID returns the session ID from the cookie or creates a new one if it doesn't exist -func getOrCreateSessionID(c echo.Context) string { - if ok := CookieExists(c, SessionID); !ok { - sessionID := ksuid.New().String() - WriteCookie(c, SessionID, sessionID) - c.Echo().Logger.Debug("Wrote session ID to cookie") - return sessionID - } - c.Echo().Logger.Debug("Has session ID in cookie") - sessionID, err := ReadCookie(c, SessionID) - if err != nil { - sessionID = ksuid.New().String() - WriteCookie(c, SessionID, sessionID) - c.Echo().Logger.Debug("Failed to read session ID from cookie, wrote new one") - } - return sessionID -} diff --git a/middleware/middleware.go b/middleware/middleware.go deleted file mode 100644 index 5d16d5b..0000000 --- a/middleware/middleware.go +++ /dev/null @@ -1,31 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package middleware - -import ( - "github.com/labstack/echo/v4" - "github.com/sonr-io/motr/sink/config" -) - -// UseSession is a middleware that adds a new key to the context -func UseSession(cnfg config.Config) echo.MiddlewareFunc { - q, err := cnfg.DB.GetQuerier() - if err != nil { - return nil - } - hkv, err := cnfg.KV.GetHandles() - if err != nil { - return nil - } - skv, err := cnfg.KV.GetSessions() - if err != nil { - return nil - } - return func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - ctx := NewSession(c, cnfg, q, hkv, skv) - return next(ctx) - } - } -} diff --git a/middleware/state.go b/middleware/state.go deleted file mode 100644 index 95ea5f6..0000000 --- a/middleware/state.go +++ /dev/null @@ -1,36 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package middleware - -import ( - "github.com/sonr-io/motr/sink" - "github.com/syumai/workers/cloudflare/kv" -) - -// SaveStatus saves the state of the current session into the KV store -func (sc *SessionContext) SaveStatus(kv *kv.Namespace) error { - stbz, err := sc.Status.Marshal() - if err != nil { - return err - } - if err := kv.PutString(sc.ID, string(stbz), nil); err != nil { - return err - } - return nil -} - -// LoadStatus loads the state of the current session from the KV store -func (sc *SessionContext) LoadStatus(kv *kv.Namespace) (*sink.Status, error) { - ststr, err := kv.GetString(sc.ID, nil) - if err != nil { - return nil, err - } - st := &sink.Status{} - err = st.Unmarshal([]byte(ststr)) - if err != nil { - return nil, err - } - sc.Status = st - return st, nil -} diff --git a/middleware/cookies.go b/pkg/cookies/cookies.go similarity index 66% rename from middleware/cookies.go rename to pkg/cookies/cookies.go index e5a55cc..a131837 100644 --- a/middleware/cookies.go +++ b/pkg/cookies/cookies.go @@ -1,7 +1,4 @@ -//go:build js && wasm -// +build js,wasm - -package middleware +package cookies import ( "encoding/base64" @@ -24,21 +21,9 @@ const ( // SessionRole is the key for the session role cookie. SessionRole CookieKey = "session.role" - // SonrAddress is the key for the Sonr address cookie. - SonrAddress CookieKey = "sonr.address" - - // SonrDID is the key for the Sonr DID cookie. - SonrDID CookieKey = "sonr.did" - - // UserAvatar is the key for the User Avatar cookie. - UserAvatar CookieKey = "user.avatar" - // UserHandle is the key for the User Handle cookie. UserHandle CookieKey = "user.handle" - // UserName is the key for the User Name cookie. - UserName CookieKey = "user.full_name" - // VaultAddress is the key for the Vault address cookie. VaultAddress CookieKey = "vault.address" @@ -58,16 +43,24 @@ func (c CookieKey) String() string { // │ Utility Methods │ // ╰───────────────────────────────────────────────────────────╯ -func CookieExists(c echo.Context, key CookieKey) bool { - ck, err := c.Cookie(key.String()) +// Exists returns true if the request has the cookie Key. +func (k CookieKey) Exists(c echo.Context) bool { + ck, err := c.Cookie(k.String()) + return err == nil && ck != nil +} + +// MustEqual returns true if the request has the cookie Key. +func (k CookieKey) MustEqual(c echo.Context, value string) bool { + v, err := k.Read(c) if err != nil { return false } - return ck != nil + return v == value } -func ReadCookie(c echo.Context, key CookieKey) (string, error) { - cookie, err := c.Cookie(key.String()) +// Read returns the cookie value for the Key. +func (k CookieKey) Read(c echo.Context) (string, error) { + cookie, err := c.Cookie(k.String()) if err != nil { // Cookie not found or other error return "", err @@ -79,8 +72,9 @@ func ReadCookie(c echo.Context, key CookieKey) (string, error) { return cookie.Value, nil } -func ReadCookieBytes(c echo.Context, key CookieKey) ([]byte, error) { - cookie, err := c.Cookie(key.String()) +// ReadBytes returns the cookie value for the Key. +func (k CookieKey) ReadBytes(c echo.Context) ([]byte, error) { + cookie, err := c.Cookie(k.String()) if err != nil { // Cookie not found or other error return nil, err @@ -92,36 +86,35 @@ func ReadCookieBytes(c echo.Context, key CookieKey) ([]byte, error) { return base64.RawURLEncoding.DecodeString(cookie.Value) } -func ReadCookieUnsafe(c echo.Context, key CookieKey) string { - ck, err := c.Cookie(key.String()) +// ReadUnsafe returns the cookie value for the Key. +func (k CookieKey) ReadUnsafe(c echo.Context) string { + ck, err := c.Cookie(k.String()) if err != nil { return "" } return ck.Value } -func WriteCookie(c echo.Context, key CookieKey, value string) error { +// Write sets the cookie value for the Key. +func (k CookieKey) Write(c echo.Context, value string) { cookie := &http.Cookie{ - Name: key.String(), + Name: k.String(), Value: value, Expires: time.Now().Add(24 * time.Hour), HttpOnly: true, Path: "/", - // Add Secure and SameSite attributes as needed } c.SetCookie(cookie) - return nil } -func WriteCookieBytes(c echo.Context, key CookieKey, value []byte) error { +// WriteBytes sets the cookie value for the Key. +func (k CookieKey) WriteBytes(c echo.Context, value []byte) { cookie := &http.Cookie{ - Name: key.String(), + Name: k.String(), Value: base64.RawURLEncoding.EncodeToString(value), Expires: time.Now().Add(24 * time.Hour), HttpOnly: true, Path: "/", - // Add Secure and SameSite attributes as needed } c.SetCookie(cookie) - return nil } diff --git a/pkg/database/bindings.go b/pkg/database/bindings.go new file mode 100644 index 0000000..eac1fe0 --- /dev/null +++ b/pkg/database/bindings.go @@ -0,0 +1,35 @@ +//go:build js && wasm +// +build js,wasm + +package database + +import ( + "database/sql" + + "github.com/sonr-io/motr/internal/sink/activity" + "github.com/sonr-io/motr/internal/sink/network" + "github.com/sonr-io/motr/internal/sink/users" + + _ "github.com/syumai/workers/cloudflare/d1" +) + +var ( + kActivityBinding = "ACTIVITY_DB" + kNetworkBinding = "NETWORK_DB" + kUsersBinding = "USERS_DB" +) + +func (c *connection) initialize() { + c.activity = activity.New(openD1(kActivityBinding)) + c.network = network.New(openD1(kNetworkBinding)) + c.users = users.New(openD1(kUsersBinding)) + c.ready = true +} + +func openD1(name string) *sql.DB { + db, err := sql.Open("d1", name) + if err != nil { + panic(err) + } + return db +} diff --git a/pkg/database/connection.go b/pkg/database/connection.go new file mode 100644 index 0000000..ca46f81 --- /dev/null +++ b/pkg/database/connection.go @@ -0,0 +1,50 @@ +//go:build js && wasm +// +build js,wasm + +package database + +import ( + "github.com/sonr-io/motr/internal/sink/activity" + "github.com/sonr-io/motr/internal/sink/network" + "github.com/sonr-io/motr/internal/sink/users" +) + +// connection is a database context +type Connection interface { + IsReady() bool + Activity() activity.Querier + Network() network.Querier + Users() users.Querier +} + +type connection struct { + activity activity.Querier + network network.Querier + users users.Querier + ready bool +} + +func (q *connection) IsReady() bool { + return q.ready +} + +func (q *connection) Activity() activity.Querier { + return q.activity +} + +func (q *connection) Network() network.Querier { + return q.network +} + +func (q *connection) Users() users.Querier { + return q.users +} + +// Open creates a new database connection +func Open() Connection { + conn := &connection{ + ready: false, + } + conn.initialize() + return conn +} diff --git a/pkg/database/middleware.go b/pkg/database/middleware.go new file mode 100644 index 0000000..ef6aa6f --- /dev/null +++ b/pkg/database/middleware.go @@ -0,0 +1,44 @@ +//go:build js && wasm +// +build js,wasm + +package database + +import ( + "errors" + + "github.com/labstack/echo/v4" +) + +type Context interface { + echo.Context + Connection +} + +// context is a database context +type context struct { + echo.Context + Connection +} + +// Middleware is a middleware that adds a new key to the context +func Middleware() echo.MiddlewareFunc { + conn := Open() + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + ctx := &context{ + Context: c, + Connection: conn, + } + return next(ctx) + } + } +} + +// Unwrap unwraps the session context +func Unwrap(c echo.Context) (Context, error) { + cc := c.(*context) + if cc == nil { + return nil, errors.New("failed to unwrap session context") + } + return cc, nil +} diff --git a/middleware/headers.go b/pkg/headers/headers.go similarity index 68% rename from middleware/headers.go rename to pkg/headers/headers.go index 471fe29..f4cb90a 100644 --- a/middleware/headers.go +++ b/pkg/headers/headers.go @@ -1,7 +1,7 @@ //go:build js && wasm // +build js,wasm -package middleware +package headers import "github.com/labstack/echo/v4" @@ -35,21 +35,22 @@ func (h HeaderKey) String() string { // │ Utility Methods │ // ╰───────────────────────────────────────────────────────────╯ -func HeaderEquals(c echo.Context, key HeaderKey, value string) bool { - return c.Response().Header().Get(key.String()) == value +// MustEqual returns true if the request has the header Key. +func (k HeaderKey) MustEqual(c echo.Context, value string) bool { + return c.Response().Header().Get(k.String()) == value } -// HeaderExists returns true if the request has the header Key. -func HeaderExists(c echo.Context, key HeaderKey) bool { - return c.Response().Header().Get(key.String()) != "" +// Exists returns true if the request has the header Key. +func (k HeaderKey) Exists(c echo.Context) bool { + return c.Response().Header().Get(k.String()) != "" } -// HeaderRead returns the header value for the Key. -func HeaderRead(c echo.Context, key HeaderKey) string { - return c.Response().Header().Get(key.String()) +// Read returns the header value for the Key. +func (k HeaderKey) Read(c echo.Context) string { + return c.Response().Header().Get(k.String()) } -// HeaderWrite sets the header value for the Key. -func HeaderWrite(c echo.Context, key HeaderKey, value string) { - c.Response().Header().Set(key.String(), value) +// Write sets the header value for the Key. +func (k HeaderKey) Write(c echo.Context, value string) { + c.Response().Header().Set(k.String(), value) } diff --git a/middleware/render.go b/pkg/render/render.go similarity index 68% rename from middleware/render.go rename to pkg/render/render.go index 5ce09cd..f8710d1 100644 --- a/middleware/render.go +++ b/pkg/render/render.go @@ -1,4 +1,4 @@ -package middleware +package render import ( "bytes" @@ -7,7 +7,13 @@ import ( "github.com/labstack/echo/v4" ) -func Render(c echo.Context, cmp templ.Component) error { +type ( + EchoView func(c echo.Context) error + EchoViewFunc func(c echo.Context, b templ.Component) error + EchoPartialView func(c echo.Context) templ.Component +) + +func View(c echo.Context, cmp templ.Component) error { // Create a buffer to store the rendered HTML buf := &bytes.Buffer{} // Render the component to the buffer diff --git a/pkg/session/metadata.templ b/pkg/session/metadata.templ new file mode 100644 index 0000000..6de4f80 --- /dev/null +++ b/pkg/session/metadata.templ @@ -0,0 +1,97 @@ +package session + +import "github.com/labstack/echo/v4" + +func GetMetadata(c echo.Context) Metadata { + return DefaultMetadata() +} + +func GetMetaComponent(c echo.Context) templ.Component { + return MetaComponent(GetMetadata(c)) +} + +func DefaultMetadata() Metadata { + return Metadata{ + Title: "Motr", + Author: "Sonr", + Favicon: "https://cdn.sonr.id/favicon.png", + Robots: "index, follow", + Googlebot: "index, follow", + Google: "nositelinkssearchbox", + Description: "Sonr is a decentralized social network that allows you to create your own personalized digital identity.", + Keywords: "Sonr, social network, decentralized, identity, decentralized social network, decentralized identity, self-sovereign identity, self-sovereign, self-sovereign social network, self-sovereign identity network, sso, sso network, sso identity, sso social network, digital identity, digital social network", + CanonicalURL: "https://sonr.io", + OGImage: "https://cdn.sonr.id/og.png", + OGURL: "https://sonr.io", + OGSiteName: "Sonr", + TwitterSite: "@sonr_io", + TwitterCreator: "@sonr_io", + TwitterImage: "https://cdn.sonr.id/og.png", + } +} + +type Metadata struct { + Title string + Author string + Favicon string + Robots string + Googlebot string + Google string + Description string + Keywords string + CanonicalURL string + OGImage string + OGURL string + OGSiteName string + TwitterSite string + TwitterCreator string + TwitterImage string +} + +templ DefaultMetaComponent() { + Motr + + + + + + + + + + + + + + + + + + + + +} + +templ MetaComponent(m Metadata) { + { m.Title } + + + + + + + + + + + + + + + + + + + + +} diff --git a/pkg/session/middleware.go b/pkg/session/middleware.go new file mode 100644 index 0000000..4cdbcde --- /dev/null +++ b/pkg/session/middleware.go @@ -0,0 +1,59 @@ +//go:build js && wasm +// +build js,wasm + +package session + +import ( + "github.com/labstack/echo/v4" + "github.com/segmentio/ksuid" + "github.com/sonr-io/motr/pkg/cookies" +) + +// Context is a session context +type SessionContext struct { + echo.Context + ID string `json:"id"` +} + +// Middleware is a middleware that adds a new key to the context +func Middleware() echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + ctx := &SessionContext{ + Context: c, + ID: DetermineID(c), + } + return next(ctx) + } + } +} + +// Unwrap unwraps the session context +func Unwrap(c echo.Context) *SessionContext { + cc := c.(*SessionContext) + if cc == nil { + panic("failed to unwrap session context") + } + return cc +} + +func DetermineID(c echo.Context) string { + if ok := cookies.SessionID.Exists(c); ok { + c.Echo().Logger.Debug("Has session ID in cookie") + sessionID, err := cookies.SessionID.Read(c) + if err != nil { + sessionID = ksuid.New().String() + cookies.SessionID.Write(c, sessionID) + c.Echo().Logger.Debug("Failed to read session ID from cookie, wrote new one") + } + return sessionID + } + c.Echo().Logger.Debug("Has session ID in cookie") + sessionID, err := cookies.SessionID.Read(c) + if err != nil { + sessionID = ksuid.New().String() + cookies.SessionID.Write(c, sessionID) + c.Echo().Logger.Debug("Failed to read session ID from cookie, wrote new one") + } + return sessionID +} diff --git a/controllers/credential/descriptor.go b/pkg/webauth/credential_descriptor.go similarity index 95% rename from controllers/credential/descriptor.go rename to pkg/webauth/credential_descriptor.go index 0cd5360..339f5d3 100644 --- a/controllers/credential/descriptor.go +++ b/pkg/webauth/credential_descriptor.go @@ -1,6 +1,6 @@ -package credential +package webauth -import "github.com/sonr-io/motr/sink/models" +import models "github.com/sonr-io/motr/internal/sink/users" // Define the credential structure matching our frontend data type CredentialDescriptor struct { diff --git a/routes/routes.go b/routes/routes.go index 9ed7cd2..04963c7 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -4,28 +4,21 @@ package routes import ( + "github.com/labstack/echo/v4" "github.com/sonr-io/motr/handlers" - "github.com/sonr-io/motr/sink/config" ) -func SetupRoutes(c *config.Server) { - // Home - c.GET("/", handlers.HandleDefaultIndex) - c.GET("/expired", handlers.HandleDefaultError) - c.GET("/valid", handlers.HandleDefaultValid) - - // Login - c.GET("/login", handlers.HandleLoginInitial) - c.GET("/login/:handle", handlers.HandleLoginStart) - c.POST("/login/:handle/check", handlers.HandleLoginCheck) - c.POST("/login/:handle/finish", handlers.HandleLoginFinish) - - // Register - c.GET("/register", handlers.HandleRegisterInitial) - c.GET("/register/:handle", handlers.HandleRegisterStart) - c.POST("/register/:handle/check", handlers.HandleRegisterCheck) - c.POST("/register/:handle/finish", handlers.HandleRegisterFinish) - - // Status - c.GET("/status", handlers.HandleStatusCheck) +func SetupViews(e *echo.Echo) { + e.GET("/", handlers.HandleDefaultIndex) + e.GET("/login", handlers.HandleLoginInitial) + e.GET("/register", handlers.HandleRegisterInitial) +} + +func SetupPartials(e *echo.Echo) { + e.POST("/login/:handle/check", handlers.HandleLoginCheck) + e.POST("/login/:handle/finish", handlers.HandleLoginFinish) + e.POST("/register/:handle", handlers.HandleRegisterStart) + e.POST("/register/:handle/check", handlers.HandleRegisterCheck) + e.POST("/register/:handle/finish", handlers.HandleRegisterFinish) + e.POST("/status", handlers.HandleStatusCheck) } diff --git a/sink/base/errors.go b/sink/base/errors.go deleted file mode 100644 index 2c09652..0000000 --- a/sink/base/errors.go +++ /dev/null @@ -1,10 +0,0 @@ -package base - -import ( - "errors" -) - -var ( - ErrInvalidRequest = errors.New("invalid request") - ErrNotFound = errors.New("not found") -) diff --git a/sink/config/config.go b/sink/config/config.go deleted file mode 100644 index c946170..0000000 --- a/sink/config/config.go +++ /dev/null @@ -1,183 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package config - -import ( - "database/sql" - "strconv" - "time" - - "github.com/sonr-io/motr/sink/models" - "github.com/syumai/workers/cloudflare" - _ "github.com/syumai/workers/cloudflare/d1" - "github.com/syumai/workers/cloudflare/kv" -) - -type MotrMode string - -const ( - ControllerMode MotrMode = "controller" - ResolverMode MotrMode = "resolver" -) - -func (m MotrMode) String() string { - return string(m) -} - -type Config struct { - Sonr SonrConfig `json:"sonr"` - IPFS IPFSConfig `json:"ipfs"` - Mode MotrMode `json:"mode"` - DB DBConfig `json:"db"` - Cache CacheConfig `json:"cache"` // Added Cache configuration - KV KVConfig `json:"kv"` // Added KV configuration -} - -func Get() Config { - c := Config{ - Sonr: getSonrConfig(), - IPFS: getIPFSConfig(), - Mode: getMotrMode(), - DB: getDBConfig(), - Cache: getCacheConfig(), // Added Cache configuration - KV: getKVConfig(), // Added KV configuration - } - return c -} - -type SonrConfig struct { - ChainID string `json:"chain_id"` - APIURL string `json:"api_url"` - RPCURL string `json:"rpc_url"` -} - -func getSonrConfig() SonrConfig { - return SonrConfig{ - ChainID: cloudflare.Getenv("SONR_CHAIN_ID"), - APIURL: cloudflare.Getenv("SONR_API_URL"), - RPCURL: cloudflare.Getenv("SONR_RPC_URL"), - } -} - -type IPFSConfig struct { - GatewayURL string `json:"gateway_url"` -} - -func getIPFSConfig() IPFSConfig { - return IPFSConfig{ - GatewayURL: cloudflare.Getenv("IPFS_GATEWAY"), - } -} - -func getMotrMode() MotrMode { - mode := cloudflare.Getenv("MOTR_MODE") - if mode == "" { - return ControllerMode - } - return MotrMode(mode) -} - -type DBConfig struct { - DBName string `json:"common_db_name"` -} - -func getDBConfig() DBConfig { - return DBConfig{ - DBName: "DB", - } -} - -func (c DBConfig) GetCommon() (*sql.DB, error) { - return sql.Open("d1", c.DBName) -} - -func (c DBConfig) GetQuerier() (models.Querier, error) { - db, err := c.GetCommon() - if err != nil { - return nil, err - } - return models.New(db), nil -} - -// CacheConfig defines the configuration for Cloudflare cache -type CacheConfig struct { - Enabled bool `json:"enabled"` - DefaultMaxAge int `json:"default_max_age"` - BypassHeader string `json:"bypass_header"` - BypassValue string `json:"bypass_value"` - CacheableStatusCodes []int `json:"cacheable_status_codes"` - CacheableContentTypes []string `json:"cacheable_content_types"` -} - -func getCacheConfig() CacheConfig { - // Default values - config := CacheConfig{ - Enabled: true, - DefaultMaxAge: 60, // 1 minute by default - BypassHeader: "X-Cache-Bypass", - BypassValue: "true", - CacheableStatusCodes: []int{ - 200, 301, 302, - }, - CacheableContentTypes: []string{ - "text/html", - "text/css", - "text/javascript", - "application/javascript", - "application/json", - "image/jpeg", - "image/png", - "image/gif", - "image/webp", - }, - } - - // Override with environment variables if provided - if enabled := cloudflare.Getenv("CACHE_ENABLED"); enabled != "" { - config.Enabled = enabled == "true" - } - - if maxAge := cloudflare.Getenv("CACHE_DEFAULT_MAX_AGE"); maxAge != "" { - // Parse the string to int, defaulting to 60 if parsing fails - if parsed, err := strconv.Atoi(maxAge); err == nil { - config.DefaultMaxAge = parsed - } - } - - if bypassHeader := cloudflare.Getenv("CACHE_BYPASS_HEADER"); bypassHeader != "" { - config.BypassHeader = bypassHeader - } - - if bypassValue := cloudflare.Getenv("CACHE_BYPASS_VALUE"); bypassValue != "" { - config.BypassValue = bypassValue - } - - return config -} - -type KVConfig struct { - Sessions string `json:"sessions"` - Handles string `json:"handles"` - DefaultExpiry time.Duration `json:"expiry"` -} - -func getKVConfig() KVConfig { - return KVConfig{ - Sessions: "SESSIONS", - Handles: "HANDLES", - DefaultExpiry: time.Hour * 1, // 1 hour by default - } -} - -func (c KVConfig) GetSessionExpiry(t time.Time) int64 { - return c.DefaultExpiry.Nanoseconds() + t.UnixNano() -} - -func (c KVConfig) GetSessions() (*kv.Namespace, error) { - return kv.NewNamespace(c.Sessions) -} - -func (c KVConfig) GetHandles() (*kv.Namespace, error) { - return kv.NewNamespace(c.Handles) -} diff --git a/sink/config/errors.go b/sink/config/errors.go deleted file mode 100644 index 56de277..0000000 --- a/sink/config/errors.go +++ /dev/null @@ -1,12 +0,0 @@ -package config - -import "errors" - -func newError(msg string) error { - return errors.New(msg) -} - -var ( - ErrInvalidMode = newError("invalid mode") - ErrDBNotFound = newError("db not found") -) diff --git a/sink/config/server.go b/sink/config/server.go deleted file mode 100644 index 2d6160c..0000000 --- a/sink/config/server.go +++ /dev/null @@ -1,85 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package config - -import ( - "github.com/labstack/echo/v4" - "github.com/syumai/workers" -) - -// Server is a wrapper around the Echo server -type Server struct { - echo *echo.Echo - Config Config -} - -// New creates a new server -func New() (*Server, Config) { - c := Get() - s := &Server{ - echo: echo.New(), - Config: c, - } - return s, c -} - -// Use registers a middleware -func (s *Server) Use(middleware ...echo.MiddlewareFunc) { - s.echo.Use(middleware...) -} - -// GET registers a route that matches GET requests -func (s *Server) GET(path string, handler echo.HandlerFunc) { - s.echo.GET(path, handler) -} - -// POST registers a route that matches POST requests -func (s *Server) POST(path string, handler echo.HandlerFunc) { - s.echo.POST(path, handler) -} - -// PUT registers a route that matches PUT requests -func (s *Server) PUT(path string, handler echo.HandlerFunc) { - s.echo.PUT(path, handler) -} - -// DELETE registers a route that matches DELETE requests -func (s *Server) DELETE(path string, handler echo.HandlerFunc) { - s.echo.DELETE(path, handler) -} - -// PATCH registers a route that matches PATCH requests -func (s *Server) PATCH(path string, handler echo.HandlerFunc) { - s.echo.PATCH(path, handler) -} - -// HEAD registers a route that matches HEAD requests -func (s *Server) HEAD(path string, handler echo.HandlerFunc) { - s.echo.HEAD(path, handler) -} - -// OPTIONS registers a route that matches OPTIONS requests -func (s *Server) OPTIONS(path string, handler echo.HandlerFunc) { - s.echo.OPTIONS(path, handler) -} - -// Any registers a route that matches all the HTTP methods -func (s *Server) Any(path string, handler echo.HandlerFunc) { - s.echo.Any(path, handler) -} - -// File serves files from the given file system root -func (s *Server) File(path string, file string) { - s.echo.File(path, file) -} - -// Static serves static files from the given root directory -func (s *Server) Static(path string, root string) { - s.echo.Static(path, root) -} - -// Serve starts the server -func (s *Server) Serve() { - workers.Serve(s.echo) -} diff --git a/sink/metadata.go b/sink/metadata.go deleted file mode 100644 index b9ec10e..0000000 --- a/sink/metadata.go +++ /dev/null @@ -1,44 +0,0 @@ -package sink - -type Icon struct { - Name string - Library string -} - -type Metadata struct { - Title string - Author string - Favicon string - Robots string - Googlebot string - Google string - Description string - Keywords string - CanonicalURL string - OGImage string - OGURL string - OGSiteName string - TwitterSite string - TwitterCreator string - TwitterImage string -} - -func DefaultMetadata() Metadata { - return Metadata{ - Title: "Motr", - Author: "Sonr", - Favicon: "https://cdn.sonr.id/favicon.png", - Robots: "index, follow", - Googlebot: "index, follow", - Google: "nositelinkssearchbox", - Description: "Sonr is a decentralized social network that allows you to create your own personalized digital identity.", - Keywords: "Sonr, social network, decentralized, identity, decentralized social network, decentralized identity, self-sovereign identity, self-sovereign, self-sovereign social network, self-sovereign identity network, sso, sso network, sso identity, sso social network, digital identity, digital social network", - CanonicalURL: "https://sonr.io", - OGImage: "https://cdn.sonr.id/og.png", - OGURL: "https://sonr.io", - OGSiteName: "Sonr", - TwitterSite: "@sonr_io", - TwitterCreator: "@sonr_io", - TwitterImage: "https://cdn.sonr.id/og.png", - } -} diff --git a/sink/state.go b/sink/state.go deleted file mode 100644 index d1d4163..0000000 --- a/sink/state.go +++ /dev/null @@ -1,38 +0,0 @@ -package sink - -import ( - "encoding/json" - "time" -) - -type Status struct { - SessionID string `json:"session_id"` - Status string `json:"status"` - Expires int64 `json:"expires"` - Handle string `json:"handle"` - CaptchaValid bool `json:"captcha_valid"` -} - -func (s *Status) Marshal() ([]byte, error) { - return json.Marshal(s) -} - -func (s *Status) Unmarshal(b []byte) error { - return json.Unmarshal(b, s) -} - -func (s *Status) IsExpired() bool { - return s.Expires < time.Now().Unix() -} - -func (s *Status) IsNewUser() bool { - return s.Status == "default" -} - -func (s *Status) IsExpiredUser() bool { - return s.Status == "expired" -} - -func (s *Status) IsValidUser() bool { - return s.Status == "valid" -} diff --git a/sqlc.yaml b/sqlc.yaml deleted file mode 100644 index f5a8701..0000000 --- a/sqlc.yaml +++ /dev/null @@ -1,11 +0,0 @@ -version: "2" -sql: - - engine: "sqlite" - queries: "./sink/migrations/query.sql" - schema: "./sink/migrations/schema.sql" - gen: - go: - emit_interface: true - emit_json_tags: true - package: "models" - out: "./sink/models" diff --git a/ui/base.templ b/ui/base.templ deleted file mode 100644 index b8bed88..0000000 --- a/ui/base.templ +++ /dev/null @@ -1,30 +0,0 @@ -package ui - -templ Body() { - - { children... } - -} - -// Head is a component that renders the head of the document -templ Head() { - - - - @ApexCharts() - @Helia() - @Dexie() - @Htmx() - @Tailwind() - @Shoelace() - @DefaultStyles() - { children... } - -} - -templ HTML() { - - - { children... } - -} diff --git a/ui/base_templ.go b/ui/base_templ.go deleted file mode 100644 index 421ada6..0000000 --- a/ui/base_templ.go +++ /dev/null @@ -1,151 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package ui - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func Body() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -// Head is a component that renders the head of the document -func Head() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var2 := templ.GetChildren(ctx) - if templ_7745c5c3_Var2 == nil { - templ_7745c5c3_Var2 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = ApexCharts().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = Helia().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = Dexie().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = Htmx().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = Tailwind().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = Shoelace().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = DefaultStyles().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ_7745c5c3_Var2.Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 4, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func HTML() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var3 := templ.GetChildren(ctx) - if templ_7745c5c3_Var3 == nil { - templ_7745c5c3_Var3 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templ_7745c5c3_Var3.Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/ui/inputs/input_avatar.templ b/ui/inputs/input_avatar.templ deleted file mode 100644 index 3f5b958..0000000 --- a/ui/inputs/input_avatar.templ +++ /dev/null @@ -1,8 +0,0 @@ -package inputs - -templ InputAvatar(value string, helpText string) { - - - - -} diff --git a/ui/inputs/input_avatar_templ.go b/ui/inputs/input_avatar_templ.go deleted file mode 100644 index c979aa0..0000000 --- a/ui/inputs/input_avatar_templ.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package inputs - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func InputAvatar(value string, helpText string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " ") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/ui/inputs/input_bio.templ b/ui/inputs/input_bio.templ deleted file mode 100644 index 7d9ef62..0000000 --- a/ui/inputs/input_bio.templ +++ /dev/null @@ -1,9 +0,0 @@ -package inputs - -templ InputBio(value string, helpText string) { - -
- -
-
-} diff --git a/ui/inputs/input_bio_templ.go b/ui/inputs/input_bio_templ.go deleted file mode 100644 index 80a51ea..0000000 --- a/ui/inputs/input_bio_templ.go +++ /dev/null @@ -1,66 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package inputs - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func InputBio(value string, helpText string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/ui/inputs/input_handle_templ.go b/ui/inputs/input_handle_templ.go deleted file mode 100644 index 0fea7a6..0000000 --- a/ui/inputs/input_handle_templ.go +++ /dev/null @@ -1,137 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package inputs - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func HandleInitial() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func HandleError(value string, helpText string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var2 := templ.GetChildren(ctx) - if templ_7745c5c3_Var2 == nil { - templ_7745c5c3_Var2 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 2, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func HandleSuccess(value string) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var5 := templ.GetChildren(ctx) - if templ_7745c5c3_Var5 == nil { - templ_7745c5c3_Var5 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, "

") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/ui/inputs/input_passkey_templ.go b/ui/inputs/input_passkey_templ.go deleted file mode 100644 index 513bfda..0000000 --- a/ui/inputs/input_passkey_templ.go +++ /dev/null @@ -1,232 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package inputs - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func PasskeyInitial(clickHandler templ.ComponentScript) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " Register Passkey") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func PasskeyError(clickHandler templ.ComponentScript) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var3 := templ.GetChildren(ctx) - if templ_7745c5c3_Var3 == nil { - templ_7745c5c3_Var3 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 3, " Register Passkey") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func PasskeySuccess(clickHandler templ.ComponentScript) templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var5 := templ.GetChildren(ctx) - if templ_7745c5c3_Var5 == nil { - templ_7745c5c3_Var5 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, clickHandler) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " Register Passkey") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -func NavigatorCredentialsCreate(userId string, userHandle string, challenge string) templ.ComponentScript { - return templ.ComponentScript{ - Name: `__templ_NavigatorCredentialsCreate_8f96`, - Function: `function __templ_NavigatorCredentialsCreate_8f96(userId, userHandle, challenge){const publicKey = { - challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)), - rp: { - name: "Sonr.ID", - }, - user: { - // Assuming that userId is ASCII-only - id: Uint8Array.from(userId, (c) => c.charCodeAt(0)), - name: userId, - displayName: userHandle, - }, - pubKeyCredParams: [ - { - type: "public-key", - alg: -7, // "ES256" - }, - { - type: "public-key", - alg: -257, // "RS256" - }, - ], - authenticatorSelection: { - userVerification: "required", - residentKey: "required", - authenticatorAttachment: "platform", - }, - timeout: 60000, // 1 minute - extensions: { - payment: { - isPayment: true, - }, - largeBlob: { - supported: "preferred", - }, - }, - }; - - // Helper function to convert ArrayBuffer to Base64URL string - function arrayBufferToBase64URL(buffer) { - const bytes = new Uint8Array(buffer); - let str = ''; - bytes.forEach(byte => { str += String.fromCharCode(byte) }); - return btoa(str) - .replace(/\+/g, '-') - .replace(/\//g, '_') - .replace(/=/g, ''); - } - -navigator.credentials - .create({ publicKey }) - .then((newCredentialInfo) => { - if (!(newCredentialInfo instanceof PublicKeyCredential)) { - throw new Error('Received credential is not a PublicKeyCredential'); - } - - const response = newCredentialInfo.response; - if (!(response instanceof AuthenticatorAttestationResponse)) { - throw new Error('Response is not an AuthenticatorAttestationResponse'); - } - - // Convert the credential data to a cross-platform compatible format - const credentialJSON = { - id: newCredentialInfo.id, - rawId: arrayBufferToBase64URL(newCredentialInfo.rawId), - type: newCredentialInfo.type, - authenticatorAttachment: newCredentialInfo.authenticatorAttachment || null, - transports: Array.isArray(response.getTransports) ? response.getTransports() : [], - clientExtensionResults: newCredentialInfo.getClientExtensionResults(), - response: { - attestationObject: arrayBufferToBase64URL(response.attestationObject), - clientDataJSON: arrayBufferToBase64URL(response.clientDataJSON) - } - }; - - // Set the form value with the stringified credential data - const credential = document.getElementById('credential-data'); - credential.value = JSON.stringify(credentialJSON); - - // Submit the form - const form = document.getElementById('passkey-form'); - form.submit(); - }) - .catch((err) => { - console.error('Passkey creation failed:', err); - alert(` + "`" + `Failed to create passkey: ${err.message || 'Unknown error'}` + "`" + `); - }); -}`, - Call: templ.SafeScript(`__templ_NavigatorCredentialsCreate_8f96`, userId, userHandle, challenge), - CallInline: templ.SafeScriptInline(`__templ_NavigatorCredentialsCreate_8f96`, userId, userHandle, challenge), - } -} - -var _ = templruntime.GeneratedTemplate diff --git a/ui/menus/assets_dropdown.templ b/ui/menus/assets_dropdown.templ deleted file mode 100644 index 7337ccf..0000000 --- a/ui/menus/assets_dropdown.templ +++ /dev/null @@ -1,37 +0,0 @@ -package wallet - -templ AssetsDropdown() { - - - - Sonr - - - - Bitcoin - - - - Ethereum - - - - Solana - - - - Litecoin - - - - Dogecoin - - -} diff --git a/ui/menus/assets_dropdown_templ.go b/ui/menus/assets_dropdown_templ.go deleted file mode 100644 index c5befc3..0000000 --- a/ui/menus/assets_dropdown_templ.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.3.865 -package wallet - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func AssetsDropdown() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Var1 := templ.GetChildren(ctx) - if templ_7745c5c3_Var1 == nil { - templ_7745c5c3_Var1 = templ.NopComponent - } - ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 1, " Sonr Bitcoin Ethereum Solana Litecoin Dogecoin") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return nil - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/ui/meta.templ b/ui/meta.templ deleted file mode 100644 index b1d69df..0000000 --- a/ui/meta.templ +++ /dev/null @@ -1,27 +0,0 @@ -package ui - -import "github.com/sonr-io/motr/sink" - -templ MetaComponent(m sink.Metadata) { - { m.Title } - - - - - - - - - - - - - - - - - - - - -} diff --git a/ui/views/register.templ b/ui/views/register.templ deleted file mode 100644 index 0955ee3..0000000 --- a/ui/views/register.templ +++ /dev/null @@ -1,30 +0,0 @@ -package views - -import ( - "github.com/sonr-io/motr/ui" - "github.com/sonr-io/motr/ui/inputs" -) - -templ RegisterView() { - @ui.HTML() { - @ui.Head() { - @ui.MetaComponent(meta) - } - @ui.Nav() { - @ui.NavLeft() { - @ui.NavLogo("Sonr") { -
- -
- } - } - @ui.NavRight() { - } - } - @ui.Body() { - @ui.Container() { - @inputs.HandleInitial() - } - } - } -}