mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-10 13:07:09 +00:00
feat: add automated production release workflow
This commit is contained in:
parent
05bda3d1b2
commit
c31b324bd3
2
.cz.toml
2
.cz.toml
@ -2,6 +2,6 @@
|
|||||||
name = "cz_conventional_commits"
|
name = "cz_conventional_commits"
|
||||||
tag_format = "v$version"
|
tag_format = "v$version"
|
||||||
version_scheme = "semver"
|
version_scheme = "semver"
|
||||||
version = "0.1.1"
|
version = "0.2.0"
|
||||||
update_changelog_on_bump = true
|
update_changelog_on_bump = true
|
||||||
major_version_zero = true
|
major_version_zero = true
|
||||||
|
7
.envrc
Normal file
7
.envrc
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Automatically sets up your devbox environment whenever you cd into this
|
||||||
|
# directory via our direnv integration:
|
||||||
|
|
||||||
|
eval "$(devbox generate direnv --print-envrc)"
|
||||||
|
|
||||||
|
# check out https://www.jetpack.io/devbox/docs/ide_configuration/direnv/
|
||||||
|
# for more details
|
2
.github/workflows/buf-publish.yml
vendored
2
.github/workflows/buf-publish.yml
vendored
@ -32,5 +32,5 @@ jobs:
|
|||||||
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
|
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
|
||||||
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
|
||||||
r2-bucket: pkljar
|
r2-bucket: pkljar
|
||||||
source-dir: pkl
|
source-dir: config/pkl
|
||||||
destination-dir: .
|
destination-dir: .
|
||||||
|
29
.github/workflows/pr-merged.yml
vendored
Normal file
29
.github/workflows/pr-merged.yml
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
name: PR Merged - Bump Version and Tag
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- closed
|
||||||
|
branches:
|
||||||
|
- develop
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bump-version-and-tag:
|
||||||
|
if: github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'feature/')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Bump version and update changelog
|
||||||
|
uses: commitizen-tools/commitizen-action@master
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Push changes and tag
|
||||||
|
run: git push && git push --tags
|
45
.github/workflows/sync-branches.yml
vendored
Normal file
45
.github/workflows/sync-branches.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
name: Sync Branches
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "*"
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync-branches:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Check if tag is on develop or master
|
||||||
|
id: check-branch
|
||||||
|
run: |
|
||||||
|
if git branch -r --contains ${{ github.ref }} | grep -q 'origin/develop\|origin/master'; then
|
||||||
|
echo "SYNC_NEEDED=true" >> $GITHUB_OUTPUT
|
||||||
|
else
|
||||||
|
echo "SYNC_NEEDED=false" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Sync develop to master
|
||||||
|
if: steps.check-branch.outputs.SYNC_NEEDED == 'true'
|
||||||
|
uses: devmasx/merge-branch@master
|
||||||
|
with:
|
||||||
|
type: now
|
||||||
|
from_branch: develop
|
||||||
|
target_branch: master
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Sync master back to develop
|
||||||
|
if: steps.check-branch.outputs.SYNC_NEEDED == 'true'
|
||||||
|
uses: devmasx/merge-branch@master
|
||||||
|
with:
|
||||||
|
type: now
|
||||||
|
from_branch: master
|
||||||
|
target_branch: develop
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -79,3 +79,4 @@ x/.DS_Store
|
|||||||
|
|
||||||
|
|
||||||
!motr/build
|
!motr/build
|
||||||
|
buildenv*
|
||||||
|
78
CHANGELOG.md
78
CHANGELOG.md
@ -1,54 +1,35 @@
|
|||||||
## v0.1.1 (2024-09-05)
|
## v0.2.0 (2024-09-21)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add automated production release workflow
|
||||||
|
- **did**: remove unused proto files
|
||||||
|
- add enums.pulsar.go file for PermissionScope enum (#4)
|
||||||
|
- add initial DID implementation
|
||||||
|
- remove builder interface
|
||||||
|
- add basic UI for block explorer
|
||||||
|
- add Usage: pkl [OPTIONS] COMMAND [ARGS]...
|
||||||
|
- use SQLite embedded driver
|
||||||
|
|
||||||
### Fix
|
### Fix
|
||||||
|
|
||||||
|
- Update proc_list_width in mprocs.yaml
|
||||||
|
- Add service to database when registering
|
||||||
|
- pin added did documents to local ipfs node
|
||||||
|
- remove extra spaces in typeUrl
|
||||||
- **release**: remove unnecessary quotes in tag pattern
|
- **release**: remove unnecessary quotes in tag pattern
|
||||||
|
|
||||||
### Refactor
|
### Refactor
|
||||||
|
|
||||||
|
- simplify verification method structure
|
||||||
|
- use staking keeper in DID keeper
|
||||||
|
- remove unused dependencies
|
||||||
- remove unused image building workflow
|
- remove unused image building workflow
|
||||||
|
|
||||||
## 0.1.0 (2024-09-05)
|
## v0.1.0 (2024-09-05)
|
||||||
|
|
||||||
### Feat
|
### Feat
|
||||||
|
|
||||||
- add SQLite database support
|
|
||||||
- Add targets for templ and vault in Makefile and use only make in devbox.json
|
|
||||||
- Add models.go file with database table structs
|
|
||||||
- Convert constant SQL queries to functions in queries.go and update db.go to use prepared statements
|
|
||||||
- Simplify db.go implementation
|
|
||||||
- Update the db implementation to use the provided go library
|
|
||||||
- Add DBConfig and DBOption types
|
|
||||||
- Add DIDNamespace and PermissionScope enums
|
|
||||||
- Add database enum types
|
|
||||||
- Update `createPermissionsTable` to match Permissions struct
|
|
||||||
- Add createKeysharesTable to internal/db/db.go
|
|
||||||
- Add constant SQL queries to queries.go and use prepared statements in db.go
|
|
||||||
- Update createProfilesTable and add createPropertiesTable
|
|
||||||
- Update the `createCredentialsTable` method to match the proper Credential struct
|
|
||||||
- Add keyshares table
|
|
||||||
- Implement database layer for Vault node
|
|
||||||
- introduce database layer
|
|
||||||
- Add method to initialize SQLite database
|
|
||||||
- add persistent SQLite database support in WASM
|
|
||||||
- **orm**: remove unused ORM models
|
|
||||||
- implement API endpoints for profile management
|
|
||||||
- Merge zkgate.go and zkprop.go logic
|
|
||||||
- Uncomment and modify zkgate code to work with Property struct
|
|
||||||
- Add zkgate.go file
|
|
||||||
- add WASM build step to devbox.json
|
|
||||||
- add KeyCurve and KeyType to KeyInfo in genesis
|
|
||||||
- Update the `CreateWitness` and `CreateAccumulator` and `VerifyWitness` and `UpdateAccumulator` to Use the new `Accumulator` and `Witness` types. Then Clean up the code in the file and refactor the marshalling methods
|
|
||||||
- add basic vault command operations
|
|
||||||
- add initial wasm entrypoint
|
|
||||||
- Implement IPFS file, location, and filesystem abstractions
|
|
||||||
- add IPFS file system abstraction
|
|
||||||
- Add AddFile and AddFolder methods
|
|
||||||
- Update GetCID and GetIPNS functions to read data from IPFS node
|
|
||||||
- Add local filesystem check for IPFS and IPNS
|
|
||||||
- Improve IPFS client initialization and mount checking
|
|
||||||
- Update `EncodePublicKey` to be the inverse of `DecodePublicKey`
|
|
||||||
- add DID model definitions
|
|
||||||
- add DID method for each coin
|
- add DID method for each coin
|
||||||
- Expand KeyType enum and update KeyInfo message in genesis.proto
|
- Expand KeyType enum and update KeyInfo message in genesis.proto
|
||||||
- Add whitelisted key types to genesis params
|
- Add whitelisted key types to genesis params
|
||||||
@ -60,18 +41,6 @@
|
|||||||
|
|
||||||
### Fix
|
### Fix
|
||||||
|
|
||||||
- update Makefile to use sonrd instead of wasmd
|
|
||||||
- Remove unused statement map and prepare statements
|
|
||||||
- Refactor database connection and statement handling
|
|
||||||
- update db implementation to use go-sqlite3 v0.18.2
|
|
||||||
- Reorder the SQL statements in the tables.go file
|
|
||||||
- update go-sqlite3 dependency to version 1.14.23
|
|
||||||
- Update module names in protobuf files
|
|
||||||
- Ensure IPFS client is initialized before pinning CID
|
|
||||||
- Use Unixfs().Get() instead of Cat() for IPFS and IPNS content retrieval
|
|
||||||
- Initialize IPFS client and check for mounted directories
|
|
||||||
- update default assets with correct asset types
|
|
||||||
- Fix EncodePublicKey method in KeyInfo struct
|
|
||||||
- remove unused imports and simplify KeyInfo message
|
- remove unused imports and simplify KeyInfo message
|
||||||
- bind node ports to localhost
|
- bind node ports to localhost
|
||||||
- Update docker-compose network name to dokploy-network
|
- Update docker-compose network name to dokploy-network
|
||||||
@ -84,12 +53,7 @@
|
|||||||
|
|
||||||
### Refactor
|
### Refactor
|
||||||
|
|
||||||
- remove unused template file
|
- add field to
|
||||||
- Replace PrimaryKey with Property struct in zkprop.go
|
|
||||||
- remove unused FileSystem interface
|
|
||||||
- remove unused functions and types
|
|
||||||
- update AssetInfo protobuf definition
|
|
||||||
- add field to
|
|
||||||
- Update KeyKind Enum to have proper naming conventions
|
- Update KeyKind Enum to have proper naming conventions
|
||||||
- Update `DIDNamespace` to have proper naming convention
|
- Update `DIDNamespace` to have proper naming convention
|
||||||
- expose ports directly in docker-compose
|
- expose ports directly in docker-compose
|
||||||
|
@ -9,7 +9,7 @@ RUN mkdir -p /code && chown ${DEVBOX_USER}:${DEVBOX_USER} /code
|
|||||||
USER ${DEVBOX_USER}:${DEVBOX_USER}
|
USER ${DEVBOX_USER}:${DEVBOX_USER}
|
||||||
|
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.json devbox.json
|
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.json devbox.json
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} process-compose.yaml process-compose.yaml
|
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} deploy/process-compose.yaml process-compose.yaml
|
||||||
|
|
||||||
RUN devbox run -- echo "Installed Packages."
|
RUN devbox run -- echo "Installed Packages."
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ RUN mkdir -p /code && chown ${DEVBOX_USER}:${DEVBOX_USER} /code
|
|||||||
USER ${DEVBOX_USER}:${DEVBOX_USER}
|
USER ${DEVBOX_USER}:${DEVBOX_USER}
|
||||||
|
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.json devbox.json
|
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.json devbox.json
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} process-compose.yaml process-compose.yaml
|
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} deploy/process-compose.yaml process-compose.yaml
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} . .
|
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} . .
|
||||||
|
|
||||||
RUN devbox run -- echo "Installed Packages."
|
RUN devbox run -- echo "Installed Packages."
|
||||||
@ -86,8 +86,4 @@ WORKDIR /opt
|
|||||||
# rest server, tendermint p2p, tendermint rpc
|
# rest server, tendermint p2p, tendermint rpc
|
||||||
EXPOSE 1317 26656 26657 6060
|
EXPOSE 1317 26656 26657 6060
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
CMD ["test_node.sh"]
|
|
||||||
=======
|
|
||||||
ENTRYPOINT ["/usr/bin/sonrd"]
|
ENTRYPOINT ["/usr/bin/sonrd"]
|
||||||
>>>>>>> master
|
|
||||||
|
32
Makefile
32
Makefile
@ -293,21 +293,41 @@ sh-testnet: mod-tidy
|
|||||||
|
|
||||||
.PHONY: setup-testnet set-testnet-configs testnet testnet-basic sh-testnet
|
.PHONY: setup-testnet set-testnet-configs testnet testnet-basic sh-testnet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### templ & vault ###
|
### templ & vault ###
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
.PHONY: dwn motr
|
.PHONY: dwn motr xcaddy ipfs-cluster-start
|
||||||
|
|
||||||
dwn:
|
dwn:
|
||||||
@echo "(dwn) Building dwn.wasm -> IPFS Vault"
|
@echo "(dwn) Building dwn.wasm -> IPFS Vault"
|
||||||
GOOS=js GOARCH=wasm go build -o ./internal/vfs/dwn.wasm ./cmd/dwn
|
GOOS=js GOARCH=wasm go build -o ./pkg/vault/app.wasm ./internal/dwn/main.go
|
||||||
|
|
||||||
motr:
|
motr:
|
||||||
@echo "(motr) Building app.wasm -> Deploy to Cloudflare Workers"
|
@echo "(web) Building app.wasm -> Deploy to Cloudflare Workers"
|
||||||
GOOS=js GOARCH=wasm go build -o ./cmd/motr/build/app.wasm ./cmd/motr/main.go
|
GOOS=js GOARCH=wasm go build -o ./web/build/app.wasm ./web/src/main.go
|
||||||
|
|
||||||
|
templ:
|
||||||
|
@echo "(templ) Generating templ files"
|
||||||
|
go install github.com/a-h/templ/cmd/templ@latest
|
||||||
|
templ generate
|
||||||
|
|
||||||
|
pkl:
|
||||||
|
@echo "(pkl) Building PKL"
|
||||||
|
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/dwn.pkl
|
||||||
|
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/orm.pkl
|
||||||
|
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/web.pkl
|
||||||
|
go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/txns.pkl
|
||||||
|
|
||||||
|
air:
|
||||||
|
@echo "(air) Building air"
|
||||||
|
go install github.com/air-verse/air@latest
|
||||||
|
air -c ./deploy/air.toml
|
||||||
|
|
||||||
|
ipfs-cluster-start:
|
||||||
|
@echo "(ipfs) Starting ipfs-cluster"
|
||||||
|
ipfs-cluster-service init --consensus crdt
|
||||||
|
ipfs-cluster-service daemon
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### help ###
|
### help ###
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
// Code generated by protoc-gen-go-pulsar. DO NOT EDIT.
|
|
||||||
package didv1
|
|
||||||
|
|
||||||
import (
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
||||||
reflect "reflect"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// versions:
|
|
||||||
// protoc-gen-go v1.27.0
|
|
||||||
// protoc (unknown)
|
|
||||||
// source: did/v1/accounts.proto
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Verify that this generated code is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
|
||||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
||||||
)
|
|
||||||
|
|
||||||
var File_did_v1_accounts_proto protoreflect.FileDescriptor
|
|
||||||
|
|
||||||
var file_did_v1_accounts_proto_rawDesc = []byte{
|
|
||||||
0x0a, 0x15, 0x64, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
|
|
||||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x42,
|
|
||||||
0x7d, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x41,
|
|
||||||
0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x27,
|
|
||||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x6e, 0x73, 0x6f, 0x6e,
|
|
||||||
0x72, 0x2f, 0x68, 0x77, 0x61, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x69, 0x64, 0x2f, 0x76,
|
|
||||||
0x31, 0x3b, 0x64, 0x69, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x44, 0x58, 0x58, 0xaa, 0x02, 0x06,
|
|
||||||
0x44, 0x69, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x31, 0xe2,
|
|
||||||
0x02, 0x12, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
|
|
||||||
0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x44, 0x69, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06,
|
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
|
||||||
|
|
||||||
var file_did_v1_accounts_proto_goTypes = []interface{}{}
|
|
||||||
var file_did_v1_accounts_proto_depIdxs = []int32{
|
|
||||||
0, // [0:0] is the sub-list for method output_type
|
|
||||||
0, // [0:0] is the sub-list for method input_type
|
|
||||||
0, // [0:0] is the sub-list for extension type_name
|
|
||||||
0, // [0:0] is the sub-list for extension extendee
|
|
||||||
0, // [0:0] is the sub-list for field type_name
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { file_did_v1_accounts_proto_init() }
|
|
||||||
func file_did_v1_accounts_proto_init() {
|
|
||||||
if File_did_v1_accounts_proto != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
type x struct{}
|
|
||||||
out := protoimpl.TypeBuilder{
|
|
||||||
File: protoimpl.DescBuilder{
|
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
||||||
RawDescriptor: file_did_v1_accounts_proto_rawDesc,
|
|
||||||
NumEnums: 0,
|
|
||||||
NumMessages: 0,
|
|
||||||
NumExtensions: 0,
|
|
||||||
NumServices: 0,
|
|
||||||
},
|
|
||||||
GoTypes: file_did_v1_accounts_proto_goTypes,
|
|
||||||
DependencyIndexes: file_did_v1_accounts_proto_depIdxs,
|
|
||||||
}.Build()
|
|
||||||
File_did_v1_accounts_proto = out.File
|
|
||||||
file_did_v1_accounts_proto_rawDesc = nil
|
|
||||||
file_did_v1_accounts_proto_goTypes = nil
|
|
||||||
file_did_v1_accounts_proto_depIdxs = nil
|
|
||||||
}
|
|
@ -1,209 +0,0 @@
|
|||||||
// Code generated by protoc-gen-go-pulsar. DO NOT EDIT.
|
|
||||||
package didv1
|
|
||||||
|
|
||||||
import (
|
|
||||||
_ "cosmossdk.io/api/amino"
|
|
||||||
_ "github.com/cosmos/gogoproto/gogoproto"
|
|
||||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
|
||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
|
||||||
reflect "reflect"
|
|
||||||
sync "sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
|
||||||
// versions:
|
|
||||||
// protoc-gen-go v1.27.0
|
|
||||||
// protoc (unknown)
|
|
||||||
// source: did/v1/enums.proto
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Verify that this generated code is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
|
||||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
|
||||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
|
||||||
)
|
|
||||||
|
|
||||||
// PermissionScope define the Capabilities Controllers can grant for Services
|
|
||||||
type PermissionScope int32
|
|
||||||
|
|
||||||
const (
|
|
||||||
PermissionScope_PERMISSION_SCOPE_UNSPECIFIED PermissionScope = 0
|
|
||||||
PermissionScope_PERMISSION_SCOPE_PROFILE_NAME PermissionScope = 1
|
|
||||||
PermissionScope_PERMISSION_SCOPE_IDENTIFIERS_EMAIL PermissionScope = 2
|
|
||||||
PermissionScope_PERMISSION_SCOPE_IDENTIFIERS_PHONE PermissionScope = 3
|
|
||||||
PermissionScope_PERMISSION_SCOPE_TRANSACTIONS_READ PermissionScope = 4
|
|
||||||
PermissionScope_PERMISSION_SCOPE_TRANSACTIONS_WRITE PermissionScope = 5
|
|
||||||
PermissionScope_PERMISSION_SCOPE_WALLETS_READ PermissionScope = 6
|
|
||||||
PermissionScope_PERMISSION_SCOPE_WALLETS_CREATE PermissionScope = 7
|
|
||||||
PermissionScope_PERMISSION_SCOPE_WALLETS_SUBSCRIBE PermissionScope = 8
|
|
||||||
PermissionScope_PERMISSION_SCOPE_WALLETS_UPDATE PermissionScope = 9
|
|
||||||
PermissionScope_PERMISSION_SCOPE_TRANSACTIONS_VERIFY PermissionScope = 10
|
|
||||||
PermissionScope_PERMISSION_SCOPE_TRANSACTIONS_BROADCAST PermissionScope = 11
|
|
||||||
PermissionScope_PERMISSION_SCOPE_ADMIN_USER PermissionScope = 12
|
|
||||||
PermissionScope_PERMISSION_SCOPE_ADMIN_VALIDATOR PermissionScope = 13
|
|
||||||
)
|
|
||||||
|
|
||||||
// Enum value maps for PermissionScope.
|
|
||||||
var (
|
|
||||||
PermissionScope_name = map[int32]string{
|
|
||||||
0: "PERMISSION_SCOPE_UNSPECIFIED",
|
|
||||||
1: "PERMISSION_SCOPE_PROFILE_NAME",
|
|
||||||
2: "PERMISSION_SCOPE_IDENTIFIERS_EMAIL",
|
|
||||||
3: "PERMISSION_SCOPE_IDENTIFIERS_PHONE",
|
|
||||||
4: "PERMISSION_SCOPE_TRANSACTIONS_READ",
|
|
||||||
5: "PERMISSION_SCOPE_TRANSACTIONS_WRITE",
|
|
||||||
6: "PERMISSION_SCOPE_WALLETS_READ",
|
|
||||||
7: "PERMISSION_SCOPE_WALLETS_CREATE",
|
|
||||||
8: "PERMISSION_SCOPE_WALLETS_SUBSCRIBE",
|
|
||||||
9: "PERMISSION_SCOPE_WALLETS_UPDATE",
|
|
||||||
10: "PERMISSION_SCOPE_TRANSACTIONS_VERIFY",
|
|
||||||
11: "PERMISSION_SCOPE_TRANSACTIONS_BROADCAST",
|
|
||||||
12: "PERMISSION_SCOPE_ADMIN_USER",
|
|
||||||
13: "PERMISSION_SCOPE_ADMIN_VALIDATOR",
|
|
||||||
}
|
|
||||||
PermissionScope_value = map[string]int32{
|
|
||||||
"PERMISSION_SCOPE_UNSPECIFIED": 0,
|
|
||||||
"PERMISSION_SCOPE_PROFILE_NAME": 1,
|
|
||||||
"PERMISSION_SCOPE_IDENTIFIERS_EMAIL": 2,
|
|
||||||
"PERMISSION_SCOPE_IDENTIFIERS_PHONE": 3,
|
|
||||||
"PERMISSION_SCOPE_TRANSACTIONS_READ": 4,
|
|
||||||
"PERMISSION_SCOPE_TRANSACTIONS_WRITE": 5,
|
|
||||||
"PERMISSION_SCOPE_WALLETS_READ": 6,
|
|
||||||
"PERMISSION_SCOPE_WALLETS_CREATE": 7,
|
|
||||||
"PERMISSION_SCOPE_WALLETS_SUBSCRIBE": 8,
|
|
||||||
"PERMISSION_SCOPE_WALLETS_UPDATE": 9,
|
|
||||||
"PERMISSION_SCOPE_TRANSACTIONS_VERIFY": 10,
|
|
||||||
"PERMISSION_SCOPE_TRANSACTIONS_BROADCAST": 11,
|
|
||||||
"PERMISSION_SCOPE_ADMIN_USER": 12,
|
|
||||||
"PERMISSION_SCOPE_ADMIN_VALIDATOR": 13,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func (x PermissionScope) Enum() *PermissionScope {
|
|
||||||
p := new(PermissionScope)
|
|
||||||
*p = x
|
|
||||||
return p
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x PermissionScope) String() string {
|
|
||||||
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (PermissionScope) Descriptor() protoreflect.EnumDescriptor {
|
|
||||||
return file_did_v1_enums_proto_enumTypes[0].Descriptor()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (PermissionScope) Type() protoreflect.EnumType {
|
|
||||||
return &file_did_v1_enums_proto_enumTypes[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x PermissionScope) Number() protoreflect.EnumNumber {
|
|
||||||
return protoreflect.EnumNumber(x)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deprecated: Use PermissionScope.Descriptor instead.
|
|
||||||
func (PermissionScope) EnumDescriptor() ([]byte, []int) {
|
|
||||||
return file_did_v1_enums_proto_rawDescGZIP(), []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
var File_did_v1_enums_proto protoreflect.FileDescriptor
|
|
||||||
|
|
||||||
var file_did_v1_enums_proto_rawDesc = []byte{
|
|
||||||
0x0a, 0x12, 0x64, 0x69, 0x64, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x2e, 0x70,
|
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x31, 0x1a, 0x14, 0x67, 0x6f,
|
|
||||||
0x67, 0x6f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f,
|
|
||||||
0x74, 0x6f, 0x1a, 0x11, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2f, 0x61, 0x6d, 0x69, 0x6e, 0x6f, 0x2e,
|
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, 0xaa, 0x04, 0x0a, 0x0f, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73,
|
|
||||||
0x73, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x50, 0x45, 0x52,
|
|
||||||
0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x55, 0x4e,
|
|
||||||
0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x50,
|
|
||||||
0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f,
|
|
||||||
0x50, 0x52, 0x4f, 0x46, 0x49, 0x4c, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x26,
|
|
||||||
0x0a, 0x22, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f,
|
|
||||||
0x50, 0x45, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x46, 0x49, 0x45, 0x52, 0x53, 0x5f, 0x45,
|
|
||||||
0x4d, 0x41, 0x49, 0x4c, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53,
|
|
||||||
0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54,
|
|
||||||
0x49, 0x46, 0x49, 0x45, 0x52, 0x53, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x12, 0x26,
|
|
||||||
0x0a, 0x22, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f,
|
|
||||||
0x50, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f,
|
|
||||||
0x52, 0x45, 0x41, 0x44, 0x10, 0x04, 0x12, 0x27, 0x0a, 0x23, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53,
|
|
||||||
0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53,
|
|
||||||
0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x05, 0x12,
|
|
||||||
0x21, 0x0a, 0x1d, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43,
|
|
||||||
0x4f, 0x50, 0x45, 0x5f, 0x57, 0x41, 0x4c, 0x4c, 0x45, 0x54, 0x53, 0x5f, 0x52, 0x45, 0x41, 0x44,
|
|
||||||
0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e,
|
|
||||||
0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x57, 0x41, 0x4c, 0x4c, 0x45, 0x54, 0x53, 0x5f, 0x43,
|
|
||||||
0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x50, 0x45, 0x52, 0x4d, 0x49,
|
|
||||||
0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x57, 0x41, 0x4c, 0x4c,
|
|
||||||
0x45, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x08, 0x12,
|
|
||||||
0x23, 0x0a, 0x1f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43,
|
|
||||||
0x4f, 0x50, 0x45, 0x5f, 0x57, 0x41, 0x4c, 0x4c, 0x45, 0x54, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41,
|
|
||||||
0x54, 0x45, 0x10, 0x09, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49,
|
|
||||||
0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43,
|
|
||||||
0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x0a, 0x12, 0x2b,
|
|
||||||
0x0a, 0x27, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f,
|
|
||||||
0x50, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f,
|
|
||||||
0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x0b, 0x12, 0x1f, 0x0a, 0x1b, 0x50,
|
|
||||||
0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45, 0x5f,
|
|
||||||
0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x0c, 0x12, 0x24, 0x0a, 0x20,
|
|
||||||
0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x43, 0x4f, 0x50, 0x45,
|
|
||||||
0x5f, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x4f, 0x52,
|
|
||||||
0x10, 0x0d, 0x42, 0x7a, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x64, 0x69, 0x64, 0x2e, 0x76, 0x31,
|
|
||||||
0x42, 0x0a, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x27,
|
|
||||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x6e, 0x73, 0x6f, 0x6e,
|
|
||||||
0x72, 0x2f, 0x68, 0x77, 0x61, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x64, 0x69, 0x64, 0x2f, 0x76,
|
|
||||||
0x31, 0x3b, 0x64, 0x69, 0x64, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x44, 0x58, 0x58, 0xaa, 0x02, 0x06,
|
|
||||||
0x44, 0x69, 0x64, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x31, 0xe2,
|
|
||||||
0x02, 0x12, 0x44, 0x69, 0x64, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61,
|
|
||||||
0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x44, 0x69, 0x64, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06,
|
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
file_did_v1_enums_proto_rawDescOnce sync.Once
|
|
||||||
file_did_v1_enums_proto_rawDescData = file_did_v1_enums_proto_rawDesc
|
|
||||||
)
|
|
||||||
|
|
||||||
func file_did_v1_enums_proto_rawDescGZIP() []byte {
|
|
||||||
file_did_v1_enums_proto_rawDescOnce.Do(func() {
|
|
||||||
file_did_v1_enums_proto_rawDescData = protoimpl.X.CompressGZIP(file_did_v1_enums_proto_rawDescData)
|
|
||||||
})
|
|
||||||
return file_did_v1_enums_proto_rawDescData
|
|
||||||
}
|
|
||||||
|
|
||||||
var file_did_v1_enums_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
|
|
||||||
var file_did_v1_enums_proto_goTypes = []interface{}{
|
|
||||||
(PermissionScope)(0), // 0: did.v1.PermissionScope
|
|
||||||
}
|
|
||||||
var file_did_v1_enums_proto_depIdxs = []int32{
|
|
||||||
0, // [0:0] is the sub-list for method output_type
|
|
||||||
0, // [0:0] is the sub-list for method input_type
|
|
||||||
0, // [0:0] is the sub-list for extension type_name
|
|
||||||
0, // [0:0] is the sub-list for extension extendee
|
|
||||||
0, // [0:0] is the sub-list for field type_name
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { file_did_v1_enums_proto_init() }
|
|
||||||
func file_did_v1_enums_proto_init() {
|
|
||||||
if File_did_v1_enums_proto != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
type x struct{}
|
|
||||||
out := protoimpl.TypeBuilder{
|
|
||||||
File: protoimpl.DescBuilder{
|
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
|
||||||
RawDescriptor: file_did_v1_enums_proto_rawDesc,
|
|
||||||
NumEnums: 1,
|
|
||||||
NumMessages: 0,
|
|
||||||
NumExtensions: 0,
|
|
||||||
NumServices: 0,
|
|
||||||
},
|
|
||||||
GoTypes: file_did_v1_enums_proto_goTypes,
|
|
||||||
DependencyIndexes: file_did_v1_enums_proto_depIdxs,
|
|
||||||
EnumInfos: file_did_v1_enums_proto_enumTypes,
|
|
||||||
}.Build()
|
|
||||||
File_did_v1_enums_proto = out.File
|
|
||||||
file_did_v1_enums_proto_rawDesc = nil
|
|
||||||
file_did_v1_enums_proto_goTypes = nil
|
|
||||||
file_did_v1_enums_proto_depIdxs = nil
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -19,14 +19,9 @@ import (
|
|||||||
const _ = grpc.SupportPackageIsVersion7
|
const _ = grpc.SupportPackageIsVersion7
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Query_Params_FullMethodName = "/did.v1.Query/Params"
|
Query_Params_FullMethodName = "/did.v1.Query/Params"
|
||||||
Query_ParamsAssets_FullMethodName = "/did.v1.Query/ParamsAssets"
|
Query_Resolve_FullMethodName = "/did.v1.Query/Resolve"
|
||||||
Query_ParamsByAsset_FullMethodName = "/did.v1.Query/ParamsByAsset"
|
Query_Sync_FullMethodName = "/did.v1.Query/Sync"
|
||||||
Query_ParamsKeys_FullMethodName = "/did.v1.Query/ParamsKeys"
|
|
||||||
Query_ParamsByKey_FullMethodName = "/did.v1.Query/ParamsByKey"
|
|
||||||
Query_RegistrationOptionsByKey_FullMethodName = "/did.v1.Query/RegistrationOptionsByKey"
|
|
||||||
Query_Resolve_FullMethodName = "/did.v1.Query/Resolve"
|
|
||||||
Query_Service_FullMethodName = "/did.v1.Query/Service"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// QueryClient is the client API for Query service.
|
// QueryClient is the client API for Query service.
|
||||||
@ -35,22 +30,10 @@ const (
|
|||||||
type QueryClient interface {
|
type QueryClient interface {
|
||||||
// Params queries all parameters of the module.
|
// Params queries all parameters of the module.
|
||||||
Params(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
|
Params(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
|
||||||
// ParamsAssets queries all parameters of the module.
|
|
||||||
ParamsAssets(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
|
||||||
// Params queries all parameters of the module.
|
|
||||||
ParamsByAsset(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
|
||||||
// ParamsKeys queries all parameters of the module.
|
|
||||||
ParamsKeys(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
|
||||||
// Params queries all parameters of the module.
|
|
||||||
ParamsByKey(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
|
||||||
// Params queries all parameters of the module.
|
|
||||||
RegistrationOptionsByKey(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
|
||||||
// Resolve queries the DID document by its id.
|
// Resolve queries the DID document by its id.
|
||||||
Resolve(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
Resolve(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResolveResponse, error)
|
||||||
// Service returns associated ServiceInfo for a given Origin
|
// Sync queries the DID document by its id. And returns the required PKL information
|
||||||
// if the servie is not found, a fingerprint is generated to be used
|
Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error)
|
||||||
// as a TXT record in DNS. v=sonr, o=origin, p=protocol
|
|
||||||
Service(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type queryClient struct {
|
type queryClient struct {
|
||||||
@ -70,53 +53,8 @@ func (c *queryClient) Params(ctx context.Context, in *QueryRequest, opts ...grpc
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *queryClient) ParamsAssets(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
func (c *queryClient) Resolve(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResolveResponse, error) {
|
||||||
out := new(QueryResponse)
|
out := new(QueryResolveResponse)
|
||||||
err := c.cc.Invoke(ctx, Query_ParamsAssets_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *queryClient) ParamsByAsset(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
|
||||||
out := new(QueryResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Query_ParamsByAsset_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *queryClient) ParamsKeys(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
|
||||||
out := new(QueryResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Query_ParamsKeys_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *queryClient) ParamsByKey(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
|
||||||
out := new(QueryResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Query_ParamsByKey_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *queryClient) RegistrationOptionsByKey(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
|
||||||
out := new(QueryResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Query_RegistrationOptionsByKey_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *queryClient) Resolve(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
|
||||||
out := new(QueryResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Query_Resolve_FullMethodName, in, out, opts...)
|
err := c.cc.Invoke(ctx, Query_Resolve_FullMethodName, in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -124,9 +62,9 @@ func (c *queryClient) Resolve(ctx context.Context, in *QueryRequest, opts ...grp
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *queryClient) Service(ctx context.Context, in *QueryRequest, opts ...grpc.CallOption) (*QueryResponse, error) {
|
func (c *queryClient) Sync(ctx context.Context, in *SyncRequest, opts ...grpc.CallOption) (*SyncResponse, error) {
|
||||||
out := new(QueryResponse)
|
out := new(SyncResponse)
|
||||||
err := c.cc.Invoke(ctx, Query_Service_FullMethodName, in, out, opts...)
|
err := c.cc.Invoke(ctx, Query_Sync_FullMethodName, in, out, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -139,22 +77,10 @@ func (c *queryClient) Service(ctx context.Context, in *QueryRequest, opts ...grp
|
|||||||
type QueryServer interface {
|
type QueryServer interface {
|
||||||
// Params queries all parameters of the module.
|
// Params queries all parameters of the module.
|
||||||
Params(context.Context, *QueryRequest) (*QueryParamsResponse, error)
|
Params(context.Context, *QueryRequest) (*QueryParamsResponse, error)
|
||||||
// ParamsAssets queries all parameters of the module.
|
|
||||||
ParamsAssets(context.Context, *QueryRequest) (*QueryResponse, error)
|
|
||||||
// Params queries all parameters of the module.
|
|
||||||
ParamsByAsset(context.Context, *QueryRequest) (*QueryResponse, error)
|
|
||||||
// ParamsKeys queries all parameters of the module.
|
|
||||||
ParamsKeys(context.Context, *QueryRequest) (*QueryResponse, error)
|
|
||||||
// Params queries all parameters of the module.
|
|
||||||
ParamsByKey(context.Context, *QueryRequest) (*QueryResponse, error)
|
|
||||||
// Params queries all parameters of the module.
|
|
||||||
RegistrationOptionsByKey(context.Context, *QueryRequest) (*QueryResponse, error)
|
|
||||||
// Resolve queries the DID document by its id.
|
// Resolve queries the DID document by its id.
|
||||||
Resolve(context.Context, *QueryRequest) (*QueryResponse, error)
|
Resolve(context.Context, *QueryRequest) (*QueryResolveResponse, error)
|
||||||
// Service returns associated ServiceInfo for a given Origin
|
// Sync queries the DID document by its id. And returns the required PKL information
|
||||||
// if the servie is not found, a fingerprint is generated to be used
|
Sync(context.Context, *SyncRequest) (*SyncResponse, error)
|
||||||
// as a TXT record in DNS. v=sonr, o=origin, p=protocol
|
|
||||||
Service(context.Context, *QueryRequest) (*QueryResponse, error)
|
|
||||||
mustEmbedUnimplementedQueryServer()
|
mustEmbedUnimplementedQueryServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,26 +91,11 @@ type UnimplementedQueryServer struct {
|
|||||||
func (UnimplementedQueryServer) Params(context.Context, *QueryRequest) (*QueryParamsResponse, error) {
|
func (UnimplementedQueryServer) Params(context.Context, *QueryRequest) (*QueryParamsResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedQueryServer) ParamsAssets(context.Context, *QueryRequest) (*QueryResponse, error) {
|
func (UnimplementedQueryServer) Resolve(context.Context, *QueryRequest) (*QueryResolveResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ParamsAssets not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedQueryServer) ParamsByAsset(context.Context, *QueryRequest) (*QueryResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ParamsByAsset not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedQueryServer) ParamsKeys(context.Context, *QueryRequest) (*QueryResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ParamsKeys not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedQueryServer) ParamsByKey(context.Context, *QueryRequest) (*QueryResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ParamsByKey not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedQueryServer) RegistrationOptionsByKey(context.Context, *QueryRequest) (*QueryResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method RegistrationOptionsByKey not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedQueryServer) Resolve(context.Context, *QueryRequest) (*QueryResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Resolve not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method Resolve not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedQueryServer) Service(context.Context, *QueryRequest) (*QueryResponse, error) {
|
func (UnimplementedQueryServer) Sync(context.Context, *SyncRequest) (*SyncResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Service not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method Sync not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
|
func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
|
||||||
|
|
||||||
@ -217,96 +128,6 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _Query_ParamsAssets_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(QueryRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(QueryServer).ParamsAssets(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Query_ParamsAssets_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(QueryServer).ParamsAssets(ctx, req.(*QueryRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Query_ParamsByAsset_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(QueryRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(QueryServer).ParamsByAsset(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Query_ParamsByAsset_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(QueryServer).ParamsByAsset(ctx, req.(*QueryRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Query_ParamsKeys_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(QueryRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(QueryServer).ParamsKeys(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Query_ParamsKeys_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(QueryServer).ParamsKeys(ctx, req.(*QueryRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Query_ParamsByKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(QueryRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(QueryServer).ParamsByKey(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Query_ParamsByKey_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(QueryServer).ParamsByKey(ctx, req.(*QueryRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Query_RegistrationOptionsByKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(QueryRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(QueryServer).RegistrationOptionsByKey(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Query_RegistrationOptionsByKey_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(QueryServer).RegistrationOptionsByKey(ctx, req.(*QueryRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Query_Resolve_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _Query_Resolve_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(QueryRequest)
|
in := new(QueryRequest)
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
@ -325,20 +146,20 @@ func _Query_Resolve_Handler(srv interface{}, ctx context.Context, dec func(inter
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _Query_Service_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _Query_Sync_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(QueryRequest)
|
in := new(SyncRequest)
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if interceptor == nil {
|
if interceptor == nil {
|
||||||
return srv.(QueryServer).Service(ctx, in)
|
return srv.(QueryServer).Sync(ctx, in)
|
||||||
}
|
}
|
||||||
info := &grpc.UnaryServerInfo{
|
info := &grpc.UnaryServerInfo{
|
||||||
Server: srv,
|
Server: srv,
|
||||||
FullMethod: Query_Service_FullMethodName,
|
FullMethod: Query_Sync_FullMethodName,
|
||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(QueryServer).Service(ctx, req.(*QueryRequest))
|
return srv.(QueryServer).Sync(ctx, req.(*SyncRequest))
|
||||||
}
|
}
|
||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
@ -354,33 +175,13 @@ var Query_ServiceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "Params",
|
MethodName: "Params",
|
||||||
Handler: _Query_Params_Handler,
|
Handler: _Query_Params_Handler,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MethodName: "ParamsAssets",
|
|
||||||
Handler: _Query_ParamsAssets_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "ParamsByAsset",
|
|
||||||
Handler: _Query_ParamsByAsset_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "ParamsKeys",
|
|
||||||
Handler: _Query_ParamsKeys_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "ParamsByKey",
|
|
||||||
Handler: _Query_ParamsByKey_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "RegistrationOptionsByKey",
|
|
||||||
Handler: _Query_RegistrationOptionsByKey_Handler,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
MethodName: "Resolve",
|
MethodName: "Resolve",
|
||||||
Handler: _Query_Resolve_Handler,
|
Handler: _Query_Resolve_Handler,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
MethodName: "Service",
|
MethodName: "Sync",
|
||||||
Handler: _Query_Service_Handler,
|
Handler: _Query_Sync_Handler,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -22,10 +22,6 @@ const (
|
|||||||
Msg_UpdateParams_FullMethodName = "/did.v1.Msg/UpdateParams"
|
Msg_UpdateParams_FullMethodName = "/did.v1.Msg/UpdateParams"
|
||||||
Msg_AuthorizeService_FullMethodName = "/did.v1.Msg/AuthorizeService"
|
Msg_AuthorizeService_FullMethodName = "/did.v1.Msg/AuthorizeService"
|
||||||
Msg_AllocateVault_FullMethodName = "/did.v1.Msg/AllocateVault"
|
Msg_AllocateVault_FullMethodName = "/did.v1.Msg/AllocateVault"
|
||||||
Msg_SyncController_FullMethodName = "/did.v1.Msg/SyncController"
|
|
||||||
Msg_Authenticate_FullMethodName = "/did.v1.Msg/Authenticate"
|
|
||||||
Msg_ProveWitness_FullMethodName = "/did.v1.Msg/ProveWitness"
|
|
||||||
Msg_SyncVault_FullMethodName = "/did.v1.Msg/SyncVault"
|
|
||||||
Msg_RegisterController_FullMethodName = "/did.v1.Msg/RegisterController"
|
Msg_RegisterController_FullMethodName = "/did.v1.Msg/RegisterController"
|
||||||
Msg_RegisterService_FullMethodName = "/did.v1.Msg/RegisterService"
|
Msg_RegisterService_FullMethodName = "/did.v1.Msg/RegisterService"
|
||||||
)
|
)
|
||||||
@ -43,14 +39,6 @@ type MsgClient interface {
|
|||||||
// AllocateVault assembles a sqlite3 database in a local directory and returns the CID of the database.
|
// AllocateVault assembles a sqlite3 database in a local directory and returns the CID of the database.
|
||||||
// this operation is called by services initiating a controller registration.
|
// this operation is called by services initiating a controller registration.
|
||||||
AllocateVault(ctx context.Context, in *MsgAllocateVault, opts ...grpc.CallOption) (*MsgAllocateVaultResponse, error)
|
AllocateVault(ctx context.Context, in *MsgAllocateVault, opts ...grpc.CallOption) (*MsgAllocateVaultResponse, error)
|
||||||
// SyncController synchronizes the controller with the Vault Motr DWN WASM Wallet.
|
|
||||||
SyncController(ctx context.Context, in *MsgSyncController, opts ...grpc.CallOption) (*MsgSyncControllerResponse, error)
|
|
||||||
// Authenticate asserts the given controller is the owner of the given address.
|
|
||||||
Authenticate(ctx context.Context, in *MsgAuthenticate, opts ...grpc.CallOption) (*MsgAuthenticateResponse, error)
|
|
||||||
// ProveWitness is an operation to prove the controller has a valid property using ZK Accumulators.
|
|
||||||
ProveWitness(ctx context.Context, in *MsgProveWitness, opts ...grpc.CallOption) (*MsgProveWitnessResponse, error)
|
|
||||||
// SyncVault synchronizes the controller with the Vault Motr DWN WASM Wallet.
|
|
||||||
SyncVault(ctx context.Context, in *MsgSyncVault, opts ...grpc.CallOption) (*MsgSyncVaultResponse, error)
|
|
||||||
// RegisterController initializes a controller with the given authentication set, address, cid, publicKey, and user-defined alias.
|
// RegisterController initializes a controller with the given authentication set, address, cid, publicKey, and user-defined alias.
|
||||||
RegisterController(ctx context.Context, in *MsgRegisterController, opts ...grpc.CallOption) (*MsgRegisterControllerResponse, error)
|
RegisterController(ctx context.Context, in *MsgRegisterController, opts ...grpc.CallOption) (*MsgRegisterControllerResponse, error)
|
||||||
// RegisterService initializes a Service with a given permission scope and URI. The domain must have a valid TXT record containing the public key.
|
// RegisterService initializes a Service with a given permission scope and URI. The domain must have a valid TXT record containing the public key.
|
||||||
@ -77,9 +65,6 @@ func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts
|
|||||||
func (c *msgClient) AuthorizeService(ctx context.Context, in *MsgAuthorizeService, opts ...grpc.CallOption) (*MsgAuthorizeServiceResponse, error) {
|
func (c *msgClient) AuthorizeService(ctx context.Context, in *MsgAuthorizeService, opts ...grpc.CallOption) (*MsgAuthorizeServiceResponse, error) {
|
||||||
out := new(MsgAuthorizeServiceResponse)
|
out := new(MsgAuthorizeServiceResponse)
|
||||||
err := c.cc.Invoke(ctx, Msg_AuthorizeService_FullMethodName, in, out, opts...)
|
err := c.cc.Invoke(ctx, Msg_AuthorizeService_FullMethodName, in, out, opts...)
|
||||||
func (c *msgClient) Authenticate(ctx context.Context, in *MsgAuthenticate, opts ...grpc.CallOption) (*MsgAuthenticateResponse, error) {
|
|
||||||
out := new(MsgAuthenticateResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Msg_Authenticate_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -89,21 +74,6 @@ func (c *msgClient) Authenticate(ctx context.Context, in *MsgAuthenticate, opts
|
|||||||
func (c *msgClient) AllocateVault(ctx context.Context, in *MsgAllocateVault, opts ...grpc.CallOption) (*MsgAllocateVaultResponse, error) {
|
func (c *msgClient) AllocateVault(ctx context.Context, in *MsgAllocateVault, opts ...grpc.CallOption) (*MsgAllocateVaultResponse, error) {
|
||||||
out := new(MsgAllocateVaultResponse)
|
out := new(MsgAllocateVaultResponse)
|
||||||
err := c.cc.Invoke(ctx, Msg_AllocateVault_FullMethodName, in, out, opts...)
|
err := c.cc.Invoke(ctx, Msg_AllocateVault_FullMethodName, in, out, opts...)
|
||||||
func (c *msgClient) ProveWitness(ctx context.Context, in *MsgProveWitness, opts ...grpc.CallOption) (*MsgProveWitnessResponse, error) {
|
|
||||||
out := new(MsgProveWitnessResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Msg_ProveWitness_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *msgClient) SyncController(ctx context.Context, in *MsgSyncController, opts ...grpc.CallOption) (*MsgSyncControllerResponse, error) {
|
|
||||||
out := new(MsgSyncControllerResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Msg_SyncController_FullMethodName, in, out, opts...)
|
|
||||||
func (c *msgClient) SyncVault(ctx context.Context, in *MsgSyncVault, opts ...grpc.CallOption) (*MsgSyncVaultResponse, error) {
|
|
||||||
out := new(MsgSyncVaultResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Msg_SyncVault_FullMethodName, in, out, opts...)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -141,14 +111,6 @@ type MsgServer interface {
|
|||||||
// AllocateVault assembles a sqlite3 database in a local directory and returns the CID of the database.
|
// AllocateVault assembles a sqlite3 database in a local directory and returns the CID of the database.
|
||||||
// this operation is called by services initiating a controller registration.
|
// this operation is called by services initiating a controller registration.
|
||||||
AllocateVault(context.Context, *MsgAllocateVault) (*MsgAllocateVaultResponse, error)
|
AllocateVault(context.Context, *MsgAllocateVault) (*MsgAllocateVaultResponse, error)
|
||||||
// SyncController synchronizes the controller with the Vault Motr DWN WASM Wallet.
|
|
||||||
SyncController(context.Context, *MsgSyncController) (*MsgSyncControllerResponse, error)
|
|
||||||
// Authenticate asserts the given controller is the owner of the given address.
|
|
||||||
Authenticate(context.Context, *MsgAuthenticate) (*MsgAuthenticateResponse, error)
|
|
||||||
// ProveWitness is an operation to prove the controller has a valid property using ZK Accumulators.
|
|
||||||
ProveWitness(context.Context, *MsgProveWitness) (*MsgProveWitnessResponse, error)
|
|
||||||
// SyncVault synchronizes the controller with the Vault Motr DWN WASM Wallet.
|
|
||||||
SyncVault(context.Context, *MsgSyncVault) (*MsgSyncVaultResponse, error)
|
|
||||||
// RegisterController initializes a controller with the given authentication set, address, cid, publicKey, and user-defined alias.
|
// RegisterController initializes a controller with the given authentication set, address, cid, publicKey, and user-defined alias.
|
||||||
RegisterController(context.Context, *MsgRegisterController) (*MsgRegisterControllerResponse, error)
|
RegisterController(context.Context, *MsgRegisterController) (*MsgRegisterControllerResponse, error)
|
||||||
// RegisterService initializes a Service with a given permission scope and URI. The domain must have a valid TXT record containing the public key.
|
// RegisterService initializes a Service with a given permission scope and URI. The domain must have a valid TXT record containing the public key.
|
||||||
@ -169,17 +131,6 @@ func (UnimplementedMsgServer) AuthorizeService(context.Context, *MsgAuthorizeSer
|
|||||||
func (UnimplementedMsgServer) AllocateVault(context.Context, *MsgAllocateVault) (*MsgAllocateVaultResponse, error) {
|
func (UnimplementedMsgServer) AllocateVault(context.Context, *MsgAllocateVault) (*MsgAllocateVaultResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method AllocateVault not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method AllocateVault not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedMsgServer) SyncController(context.Context, *MsgSyncController) (*MsgSyncControllerResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method SyncController not implemented")
|
|
||||||
func (UnimplementedMsgServer) Authenticate(context.Context, *MsgAuthenticate) (*MsgAuthenticateResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Authenticate not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedMsgServer) ProveWitness(context.Context, *MsgProveWitness) (*MsgProveWitnessResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ProveWitness not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedMsgServer) SyncVault(context.Context, *MsgSyncVault) (*MsgSyncVaultResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method SyncVault not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedMsgServer) RegisterController(context.Context, *MsgRegisterController) (*MsgRegisterControllerResponse, error) {
|
func (UnimplementedMsgServer) RegisterController(context.Context, *MsgRegisterController) (*MsgRegisterControllerResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method RegisterController not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method RegisterController not implemented")
|
||||||
}
|
}
|
||||||
@ -219,8 +170,6 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in
|
|||||||
|
|
||||||
func _Msg_AuthorizeService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _Msg_AuthorizeService_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(MsgAuthorizeService)
|
in := new(MsgAuthorizeService)
|
||||||
func _Msg_Authenticate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(MsgAuthenticate)
|
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -233,22 +182,12 @@ func _Msg_Authenticate_Handler(srv interface{}, ctx context.Context, dec func(in
|
|||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(MsgServer).AuthorizeService(ctx, req.(*MsgAuthorizeService))
|
return srv.(MsgServer).AuthorizeService(ctx, req.(*MsgAuthorizeService))
|
||||||
return srv.(MsgServer).Authenticate(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Msg_Authenticate_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).Authenticate(ctx, req.(*MsgAuthenticate))
|
|
||||||
}
|
}
|
||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _Msg_AllocateVault_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _Msg_AllocateVault_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(MsgAllocateVault)
|
in := new(MsgAllocateVault)
|
||||||
func _Msg_ProveWitness_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(MsgProveWitness)
|
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -261,42 +200,6 @@ func _Msg_ProveWitness_Handler(srv interface{}, ctx context.Context, dec func(in
|
|||||||
}
|
}
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
return srv.(MsgServer).AllocateVault(ctx, req.(*MsgAllocateVault))
|
return srv.(MsgServer).AllocateVault(ctx, req.(*MsgAllocateVault))
|
||||||
return srv.(MsgServer).ProveWitness(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Msg_ProveWitness_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).ProveWitness(ctx, req.(*MsgProveWitness))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Msg_SyncController_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(MsgSyncController)
|
|
||||||
func _Msg_SyncVault_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(MsgSyncVault)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(MsgServer).SyncController(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Msg_SyncController_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).SyncController(ctx, req.(*MsgSyncController))
|
|
||||||
return srv.(MsgServer).SyncVault(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Msg_SyncVault_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).SyncVault(ctx, req.(*MsgSyncVault))
|
|
||||||
}
|
}
|
||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
@ -356,20 +259,6 @@ var Msg_ServiceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "AllocateVault",
|
MethodName: "AllocateVault",
|
||||||
Handler: _Msg_AllocateVault_Handler,
|
Handler: _Msg_AllocateVault_Handler,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MethodName: "SyncController",
|
|
||||||
Handler: _Msg_SyncController_Handler,
|
|
||||||
MethodName: "Authenticate",
|
|
||||||
Handler: _Msg_Authenticate_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "ProveWitness",
|
|
||||||
Handler: _Msg_ProveWitness_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "SyncVault",
|
|
||||||
Handler: _Msg_SyncVault_Handler,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
MethodName: "RegisterController",
|
MethodName: "RegisterController",
|
||||||
Handler: _Msg_RegisterController_Handler,
|
Handler: _Msg_RegisterController_Handler,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -47,8 +47,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
poaDoGenTxRateValidation := false
|
poaDoGenTxRateValidation := false
|
||||||
poaRateFloor := sdkmath.LegacyMustNewDecFromStr("0.10")
|
poaRateFloor := sdkmath.LegacyMustNewDecFromStr("0.05")
|
||||||
poaRateCeil := sdkmath.LegacyMustNewDecFromStr("0.50")
|
poaRateCeil := sdkmath.LegacyMustNewDecFromStr("0.25")
|
||||||
|
|
||||||
anteDecorators := []sdk.AnteDecorator{
|
anteDecorators := []sdk.AnteDecorator{
|
||||||
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
|
ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first
|
||||||
|
@ -8,12 +8,12 @@ import (
|
|||||||
_ "github.com/joho/godotenv/autoload"
|
_ "github.com/joho/godotenv/autoload"
|
||||||
|
|
||||||
"github.com/onsonr/sonr/app"
|
"github.com/onsonr/sonr/app"
|
||||||
"github.com/onsonr/sonr/internal/tui"
|
"github.com/onsonr/sonr/internal/cli"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rootCmd := NewRootCmd()
|
rootCmd := NewRootCmd()
|
||||||
tui.AddTUICmds(rootCmd)
|
cli.AddTUICmds(rootCmd)
|
||||||
|
|
||||||
if err := svrcmd.Execute(rootCmd, "", app.DefaultNodeHome); err != nil {
|
if err := svrcmd.Execute(rootCmd, "", app.DefaultNodeHome); err != nil {
|
||||||
log.NewLogger(rootCmd.OutOrStderr()).Error("failure when running app", "err", err)
|
log.NewLogger(rootCmd.OutOrStderr()).Error("failure when running app", "err", err)
|
||||||
|
33
config/caddy/Caddyfile
Normal file
33
config/caddy/Caddyfile
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
email team@sonr.id
|
||||||
|
}
|
||||||
|
|
||||||
|
# Vaults at vault.sonr.id
|
||||||
|
vault.sonr.id {
|
||||||
|
tls {
|
||||||
|
dns cloudflare {env.CLOUDFLARE_API_TOKEN}
|
||||||
|
resolvers 1.1.1.1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Match paths that are bech32 addresses
|
||||||
|
@vault path_regexp vaultPath ^/([a-z0-9]{42})(/.*|)$
|
||||||
|
|
||||||
|
handle @vault {
|
||||||
|
# Rewrite to IPFS gateway format
|
||||||
|
uri replace /{re.vaultPath.0} /ipns/{re.vaultPath.1}{re.vaultPath.2}
|
||||||
|
|
||||||
|
# Proxy to IPFS gateway
|
||||||
|
reverse_proxy http://localhost:8080
|
||||||
|
}
|
||||||
|
|
||||||
|
file_server
|
||||||
|
|
||||||
|
header {
|
||||||
|
Content-Type .wasm application/wasm
|
||||||
|
Service-Worker-Allowed "/"
|
||||||
|
# Add any other necessary headers
|
||||||
|
}
|
||||||
|
|
||||||
|
# Optional: Enable compression
|
||||||
|
encode zstd gzip
|
||||||
|
}
|
0
config/caddy/caddy.json
Normal file
0
config/caddy/caddy.json
Normal file
12
config/dwn/Config.pkl.go
Normal file
12
config/dwn/Config.pkl.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
Ipfs *IPFS `pkl:"ipfs" json:"ipfs,omitempty"`
|
||||||
|
|
||||||
|
Sonr *Sonr `pkl:"sonr" json:"sonr,omitempty"`
|
||||||
|
|
||||||
|
Motr *Motr `pkl:"motr" json:"motr,omitempty"`
|
||||||
|
|
||||||
|
Schema *Schema `pkl:"schema" json:"schema,omitempty"`
|
||||||
|
}
|
36
config/dwn/Dwn.pkl.go
Normal file
36
config/dwn/Dwn.pkl.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/apple/pkl-go/pkl"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Dwn struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadFromPath loads the pkl module at the given path and evaluates it into a Dwn
|
||||||
|
func LoadFromPath(ctx context.Context, path string) (ret *Dwn, err error) {
|
||||||
|
evaluator, err := pkl.NewEvaluator(ctx, pkl.PreconfiguredOptions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
cerr := evaluator.Close()
|
||||||
|
if err == nil {
|
||||||
|
err = cerr
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
ret, err = Load(ctx, evaluator, pkl.FileSource(path))
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Dwn
|
||||||
|
func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Dwn, error) {
|
||||||
|
var ret Dwn
|
||||||
|
if err := evaluator.EvaluateModule(ctx, source, &ret); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &ret, nil
|
||||||
|
}
|
8
config/dwn/IPFS.pkl.go
Normal file
8
config/dwn/IPFS.pkl.go
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
type IPFS struct {
|
||||||
|
ApiUrl string `pkl:"apiUrl" json:"apiUrl,omitempty"`
|
||||||
|
|
||||||
|
GatewayUrl string `pkl:"gatewayUrl" json:"gatewayUrl,omitempty"`
|
||||||
|
}
|
10
config/dwn/Motr.pkl.go
Normal file
10
config/dwn/Motr.pkl.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
type Motr struct {
|
||||||
|
Keyshare string `pkl:"keyshare" json:"keyshare,omitempty"`
|
||||||
|
|
||||||
|
Address string `pkl:"address" json:"address,omitempty"`
|
||||||
|
|
||||||
|
Origin string `pkl:"origin" json:"origin,omitempty"`
|
||||||
|
}
|
24
config/dwn/Schema.pkl.go
Normal file
24
config/dwn/Schema.pkl.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
type Schema struct {
|
||||||
|
Version int `pkl:"version"`
|
||||||
|
|
||||||
|
Account string `pkl:"account" json:"account,omitempty"`
|
||||||
|
|
||||||
|
Asset string `pkl:"asset" json:"asset,omitempty"`
|
||||||
|
|
||||||
|
Chain string `pkl:"chain" json:"chain,omitempty"`
|
||||||
|
|
||||||
|
Credential string `pkl:"credential" json:"credential,omitempty"`
|
||||||
|
|
||||||
|
Jwk string `pkl:"jwk" json:"jwk,omitempty"`
|
||||||
|
|
||||||
|
Grant string `pkl:"grant" json:"grant,omitempty"`
|
||||||
|
|
||||||
|
Keyshare string `pkl:"keyshare" json:"keyshare,omitempty"`
|
||||||
|
|
||||||
|
PublicKey string `pkl:"publicKey" json:"publicKey,omitempty"`
|
||||||
|
|
||||||
|
Profile string `pkl:"profile" json:"profile,omitempty"`
|
||||||
|
}
|
14
config/dwn/Sonr.pkl.go
Normal file
14
config/dwn/Sonr.pkl.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
type Sonr struct {
|
||||||
|
ApiUrl string `pkl:"apiUrl" json:"apiUrl,omitempty"`
|
||||||
|
|
||||||
|
GrpcUrl string `pkl:"grpcUrl" json:"grpcUrl,omitempty"`
|
||||||
|
|
||||||
|
RpcUrl string `pkl:"rpcUrl" json:"rpcUrl,omitempty"`
|
||||||
|
|
||||||
|
WebSocketUrl string `pkl:"webSocketUrl" json:"webSocketUrl,omitempty"`
|
||||||
|
|
||||||
|
ChainId string `pkl:"chainId" json:"chainId,omitempty"`
|
||||||
|
}
|
13
config/dwn/init.pkl.go
Normal file
13
config/dwn/init.pkl.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Code generated from Pkl module `dwn`. DO NOT EDIT.
|
||||||
|
package dwn
|
||||||
|
|
||||||
|
import "github.com/apple/pkl-go/pkl"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
pkl.RegisterMapping("dwn", Dwn{})
|
||||||
|
pkl.RegisterMapping("dwn#Config", Config{})
|
||||||
|
pkl.RegisterMapping("dwn#IPFS", IPFS{})
|
||||||
|
pkl.RegisterMapping("dwn#Sonr", Sonr{})
|
||||||
|
pkl.RegisterMapping("dwn#Motr", Motr{})
|
||||||
|
pkl.RegisterMapping("dwn#Schema", Schema{})
|
||||||
|
}
|
97
config/pkl/dwn.pkl
Normal file
97
config/pkl/dwn.pkl
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
@go.Package { name = "github.com/onsonr/sonr/config/dwn" }
|
||||||
|
|
||||||
|
module dwn
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl"
|
||||||
|
|
||||||
|
typealias JSON = String
|
||||||
|
|
||||||
|
class JsonField extends go.Field {
|
||||||
|
structTags {
|
||||||
|
["json"] = "%{name},omitempty"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Config {
|
||||||
|
@JsonField
|
||||||
|
ipfs: IPFS
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
sonr: Sonr
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
motr: Motr
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
schema: Schema
|
||||||
|
}
|
||||||
|
|
||||||
|
class IPFS {
|
||||||
|
@JsonField
|
||||||
|
apiUrl: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
gatewayUrl: String
|
||||||
|
}
|
||||||
|
|
||||||
|
class Motr {
|
||||||
|
@JsonField
|
||||||
|
keyshare: JSON
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
address: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
origin: String
|
||||||
|
}
|
||||||
|
|
||||||
|
class Schema {
|
||||||
|
version: Int
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
account: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
asset: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
chain: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
credential: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
jwk: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
grant: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
keyshare: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
publicKey: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
profile: String
|
||||||
|
}
|
||||||
|
|
||||||
|
class Sonr {
|
||||||
|
@JsonField
|
||||||
|
apiUrl: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
grpcUrl: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
rpcUrl: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
webSocketUrl: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
chainId: String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
276
config/pkl/orm.pkl
Normal file
276
config/pkl/orm.pkl
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
@go.Package { name = "github.com/onsonr/sonr/internal/orm" }
|
||||||
|
|
||||||
|
module orm
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl"
|
||||||
|
|
||||||
|
typealias Base58 = String
|
||||||
|
typealias Base64 = String
|
||||||
|
|
||||||
|
typealias Bech32 = String
|
||||||
|
typealias Keccak = String
|
||||||
|
|
||||||
|
typealias DID = String
|
||||||
|
typealias ChainCode = UInt
|
||||||
|
typealias Scope = String
|
||||||
|
|
||||||
|
typealias Hex = String
|
||||||
|
|
||||||
|
class PrimaryKey extends go.Field {
|
||||||
|
structTags {
|
||||||
|
["json"] = "%{name},omitempty"
|
||||||
|
["query"] = "%{name}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class JsonField extends go.Field {
|
||||||
|
structTags {
|
||||||
|
["json"] = "%{name},omitempty"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enums
|
||||||
|
typealias AssetType = "native"|"wrapped"|"staking"|"pool"|"ibc"|"cw20"
|
||||||
|
|
||||||
|
typealias DIDMethod = "ipfs"|"sonr"|"bitcoin"|"ethereum"|"ibc"|"webauthn"|"dwn"|"service"
|
||||||
|
|
||||||
|
typealias KeyAlgorithm = "es256"|"es384"|"es512"|"eddsa"|"es256k"|"ecdsa"
|
||||||
|
|
||||||
|
typealias KeyCurve = "p256"|"p384"|"p521"|"x25519"|"x448"|"ed25519"|"ed448"|"secp256k1"|"bls12381"|"keccak256"
|
||||||
|
|
||||||
|
typealias KeyEncoding = "raw"|"hex"|"multibase"
|
||||||
|
|
||||||
|
typealias KeyRole = "authentication"|"assertion"|"delegation"|"invocation"
|
||||||
|
|
||||||
|
typealias KeyType = "octet"|"elliptic"|"rsa"|"symmetric"|"hmac"|"mpc"|"zk"|"webauthn"|"bip32"
|
||||||
|
|
||||||
|
typealias KeyShareRole = "user"|"validator"
|
||||||
|
|
||||||
|
typealias PermissionGrant = "none"|"read"|"write"|"verify"|"broadcast"|"admin"
|
||||||
|
|
||||||
|
typealias PermissionScope = "profile"|"metadata"|"permissions"|"wallets"|"transactions"|"user"|"validator"
|
||||||
|
|
||||||
|
|
||||||
|
class Account {
|
||||||
|
@PrimaryKey
|
||||||
|
id: DID
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
name: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
address: Bech32|Keccak|String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
publicKey: Base58
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
chainCode: ChainCode
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
index: Int
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
controller: Bech32
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class Asset {
|
||||||
|
@PrimaryKey
|
||||||
|
id: DID
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
name: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
symbol: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
decimals: Int
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
chainCode: ChainCode
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class Chain {
|
||||||
|
@PrimaryKey
|
||||||
|
id: DID
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
name: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
networkId: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
chainCode: ChainCode
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class Credential {
|
||||||
|
@PrimaryKey
|
||||||
|
id: DID
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
subject: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
controller: Bech32
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
attestationType: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
origin: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
label: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
deviceId: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
credentialId: Base64
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
publicKey: Base64
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
transport: List<String>
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
signCount: UInt
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
userPresent: Boolean
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
userVerified: Boolean
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
backupEligible: Boolean
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
backupState: Boolean
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
cloneWarning: Boolean
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
updatedAt: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class JWK {
|
||||||
|
@JsonField
|
||||||
|
kty: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
crv: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
x: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
y: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
n: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
e: String
|
||||||
|
}
|
||||||
|
|
||||||
|
class Grant {
|
||||||
|
@PrimaryKey
|
||||||
|
id: UInt
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
subject: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
controller: Bech32
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
origin: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
token: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
scopes: List<String>
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
updatedAt: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class Keyshare {
|
||||||
|
@PrimaryKey
|
||||||
|
id: DID
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
data: Base64
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
role: Int
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
lastRefreshed: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class PublicKey {
|
||||||
|
@PrimaryKey
|
||||||
|
role: KeyRole
|
||||||
|
algorithm: KeyAlgorithm
|
||||||
|
encoding: KeyEncoding
|
||||||
|
curve: KeyCurve
|
||||||
|
key_type: KeyType
|
||||||
|
raw: Base58
|
||||||
|
jwk: JWK
|
||||||
|
}
|
||||||
|
|
||||||
|
class Profile {
|
||||||
|
@PrimaryKey
|
||||||
|
id: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
subject: String
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
controller: Bech32
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
originUri: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
publicMetadata: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
privateMetadata: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
createdAt: String?
|
||||||
|
|
||||||
|
@JsonField
|
||||||
|
updatedAt: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
db_name: String = "vault"
|
||||||
|
db_version: Int = 1
|
||||||
|
|
174
config/pkl/txns.pkl
Normal file
174
config/pkl/txns.pkl
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
@go.Package { name = "github.com/onsonr/sonr/internal/orm/transactions" }
|
||||||
|
|
||||||
|
module transactions
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl"
|
||||||
|
|
||||||
|
/// Common Cosmos SDK types
|
||||||
|
typealias Coin = Dynamic
|
||||||
|
typealias AccAddress = String
|
||||||
|
typealias ValAddress = String
|
||||||
|
typealias Timestamp = String
|
||||||
|
|
||||||
|
/// Base class for all messages
|
||||||
|
abstract class Msg {
|
||||||
|
/// The type URL for the message
|
||||||
|
typeUrl: String
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Base class for all proposals
|
||||||
|
class Proposal {
|
||||||
|
/// The title of the proposal
|
||||||
|
title: String
|
||||||
|
|
||||||
|
/// The description of the proposal
|
||||||
|
description: String
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Gov module messages
|
||||||
|
class MsgGovSubmitProposal extends Msg {
|
||||||
|
typeUrl = "/cosmos.gov.v1beta1.MsgSubmitProposal"
|
||||||
|
content: Proposal
|
||||||
|
initialDeposit: List<Coin>
|
||||||
|
proposer: AccAddress
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgGovVote extends Msg {
|
||||||
|
typeUrl = "/cosmos.gov.v1beta1.MsgVote"
|
||||||
|
proposalId: Int
|
||||||
|
voter: AccAddress
|
||||||
|
option: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgGovDeposit extends Msg {
|
||||||
|
typeUrl = "/cosmos.gov.v1beta1.MsgDeposit"
|
||||||
|
proposalId: Int
|
||||||
|
depositor: AccAddress
|
||||||
|
amount: List<Coin>
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Group module messages
|
||||||
|
class MsgGroupCreateGroup extends Msg {
|
||||||
|
typeUrl = "/cosmos.group.v1.MsgCreateGroup"
|
||||||
|
admin: AccAddress
|
||||||
|
members: List<Dynamic>
|
||||||
|
metadata: String
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgGroupSubmitProposal extends Msg {
|
||||||
|
typeUrl = "/cosmos.group.v1.MsgSubmitProposal"
|
||||||
|
groupPolicyAddress: AccAddress
|
||||||
|
proposers: List<AccAddress>
|
||||||
|
metadata: String
|
||||||
|
messages: List<Dynamic>
|
||||||
|
exec: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgGroupVote extends Msg {
|
||||||
|
typeUrl = "/cosmos.group.v1.MsgVote"
|
||||||
|
proposalId: Int
|
||||||
|
voter: AccAddress
|
||||||
|
option: Int
|
||||||
|
metadata: String
|
||||||
|
exec: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Staking module messages
|
||||||
|
class MsgStakingCreateValidator extends Msg {
|
||||||
|
typeUrl = "/cosmos.staking.v1beta1.MsgCreateValidator"
|
||||||
|
description: Dynamic
|
||||||
|
commission: Dynamic
|
||||||
|
minSelfDelegation: String
|
||||||
|
delegatorAddress: AccAddress
|
||||||
|
validatorAddress: ValAddress
|
||||||
|
pubkey: Dynamic
|
||||||
|
value: Coin
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgStakingDelegate extends Msg {
|
||||||
|
typeUrl = "/cosmos.staking.v1beta1.MsgDelegate"
|
||||||
|
delegatorAddress: AccAddress
|
||||||
|
validatorAddress: ValAddress
|
||||||
|
amount: Coin
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgStakingUndelegate extends Msg {
|
||||||
|
typeUrl = "/cosmos.staking.v1beta1.MsgUndelegate"
|
||||||
|
delegatorAddress: AccAddress
|
||||||
|
validatorAddress: ValAddress
|
||||||
|
amount: Coin
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgStakingBeginRedelegate extends Msg {
|
||||||
|
typeUrl = "/cosmos.staking.v1beta1.MsgBeginRedelegate"
|
||||||
|
delegatorAddress: AccAddress
|
||||||
|
validatorSrcAddress: ValAddress
|
||||||
|
validatorDstAddress: ValAddress
|
||||||
|
amount: Coin
|
||||||
|
}
|
||||||
|
class MsgDidUpdateParams extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgUpdateParams"
|
||||||
|
authority: AccAddress
|
||||||
|
params: Dynamic
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgDidAllocateVault extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgAllocateVault"
|
||||||
|
authority: AccAddress
|
||||||
|
subject: String
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgDidProveWitness extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgProveWitness"
|
||||||
|
authority: AccAddress
|
||||||
|
property: String
|
||||||
|
witness: Listing<Int>
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgDidSyncVault extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgSyncVault"
|
||||||
|
controller: AccAddress
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgDidRegisterController extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgRegisterController"
|
||||||
|
authority: AccAddress
|
||||||
|
cid: String
|
||||||
|
origin: String
|
||||||
|
authentication: List<Dynamic>
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgDidAuthorize extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgAuthorize"
|
||||||
|
authority: AccAddress
|
||||||
|
controller: AccAddress
|
||||||
|
address: AccAddress
|
||||||
|
origin: String
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
class MsgDidRegisterService extends Msg {
|
||||||
|
typeUrl = "/sonr.did.v1.MsgRegisterService"
|
||||||
|
controller: AccAddress
|
||||||
|
originUri: String
|
||||||
|
scopes: Dynamic
|
||||||
|
description: String
|
||||||
|
serviceEndpoints: Map<String, String>
|
||||||
|
metadata: Dynamic
|
||||||
|
token: Dynamic
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a transaction body
|
||||||
|
class TxBody {
|
||||||
|
messages: List<Msg>
|
||||||
|
memo: String?
|
||||||
|
timeoutHeight: Int?
|
||||||
|
extensionOptions: List<Dynamic>?
|
||||||
|
nonCriticalExtensionOptions: List<Dynamic>?
|
||||||
|
}
|
||||||
|
|
72
config/pkl/web.pkl
Normal file
72
config/pkl/web.pkl
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
@go.Package { name = "github.com/onsonr/sonr/internal/orm/browser" }
|
||||||
|
|
||||||
|
module browser
|
||||||
|
|
||||||
|
import "package://pkg.pkl-lang.org/pkl-go/pkl.golang@0.5.0#/go.pkl"
|
||||||
|
|
||||||
|
|
||||||
|
class JsonField extends go.Field {
|
||||||
|
structTags {
|
||||||
|
["json"] = "%{name},omitempty"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PublicKeyCredentialRequestOptions {
|
||||||
|
challenge: String
|
||||||
|
timeout: Int
|
||||||
|
rpId: String
|
||||||
|
allowCredentials: List<PublicKeyCredentialDescriptor>
|
||||||
|
userVerification: String
|
||||||
|
extensions: List<PublicKeyCredentialParameters>
|
||||||
|
}
|
||||||
|
|
||||||
|
class PublicKeyCredentialDescriptor {
|
||||||
|
id: String
|
||||||
|
transports: List<String>
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
|
||||||
|
class PublicKeyCredentialParameters {
|
||||||
|
type: String
|
||||||
|
alg: Int?
|
||||||
|
}
|
||||||
|
|
||||||
|
class AuthenticatorSelectionCriteria {
|
||||||
|
authenticatorAttachment: String
|
||||||
|
requireResidentKey: Boolean
|
||||||
|
userVerification: String
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class PublicKeyCredentialCreationOptions {
|
||||||
|
rp: RpEntity
|
||||||
|
user: UserEntity
|
||||||
|
challenge: String
|
||||||
|
pubKeyCredParams: List<PublicKeyCredentialParameters>
|
||||||
|
timeout: Int
|
||||||
|
excludeCredentials: List<PublicKeyCredentialDescriptor>
|
||||||
|
authenticatorSelection: AuthenticatorSelectionCriteria?
|
||||||
|
attestation: String
|
||||||
|
extensions: List<PublicKeyCredentialParameters>
|
||||||
|
}
|
||||||
|
|
||||||
|
class RpEntity {
|
||||||
|
id: String
|
||||||
|
name: String?
|
||||||
|
icon: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class UserEntity {
|
||||||
|
id: String
|
||||||
|
displayName: String?
|
||||||
|
name: String?
|
||||||
|
}
|
||||||
|
|
||||||
|
class SWT {
|
||||||
|
origin: String
|
||||||
|
location: String
|
||||||
|
identifier: String
|
||||||
|
scopes: List<String>
|
||||||
|
properties: Map<String, String>
|
||||||
|
expiryBlock: Int
|
||||||
|
}
|
50
deploy/air.toml
Normal file
50
deploy/air.toml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
root = "."
|
||||||
|
testdata_dir = "testdata"
|
||||||
|
tmp_dir = "tmp"
|
||||||
|
|
||||||
|
[build]
|
||||||
|
delay = 1000
|
||||||
|
cmd = "devbox run build:motr"
|
||||||
|
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
|
||||||
|
exclude_file = []
|
||||||
|
exclude_regex = ["_test.go", ".pk.go", "_templ.go", ".pb.go"]
|
||||||
|
exclude_unchanged = true
|
||||||
|
follow_symlink = false
|
||||||
|
full_bin = "bunx wrangler -c ./web/wrangler.toml dev"
|
||||||
|
include_dir = ["web", "internal/dwn", "pkl"]
|
||||||
|
include_ext = ["go", "templ", "html", "pkl", "js", "mjs"]
|
||||||
|
include_file = [
|
||||||
|
"wrangler.toml",
|
||||||
|
"Dockerfile",
|
||||||
|
".goreleaser.yaml",
|
||||||
|
"go.mod",
|
||||||
|
"devbox.json",
|
||||||
|
".air.toml",
|
||||||
|
]
|
||||||
|
kill_delay = "2s"
|
||||||
|
log = "build-errors.log"
|
||||||
|
poll = false
|
||||||
|
poll_interval = 0
|
||||||
|
post_cmd = []
|
||||||
|
pre_cmd = ["templ generate", "devbox run gen:pkl"]
|
||||||
|
rerun = false
|
||||||
|
rerun_delay = 500
|
||||||
|
send_interrupt = false
|
||||||
|
stop_on_error = false
|
||||||
|
|
||||||
|
[color]
|
||||||
|
build = "yellow"
|
||||||
|
main = "magenta"
|
||||||
|
runner = "green"
|
||||||
|
watcher = "cyan"
|
||||||
|
|
||||||
|
[log]
|
||||||
|
main_only = true
|
||||||
|
time = true
|
||||||
|
|
||||||
|
[misc]
|
||||||
|
clean_on_exit = true
|
||||||
|
|
||||||
|
[screen]
|
||||||
|
clear_on_rebuild = true
|
||||||
|
keep_scroll = true
|
30
deploy/docker-compose.yaml
Normal file
30
deploy/docker-compose.yaml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
sonr-node:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
volumes:
|
||||||
|
- /home/prad/.scnr:/root/.sonr
|
||||||
|
ports:
|
||||||
|
- "26657:26657"
|
||||||
|
- "1317:1317"
|
||||||
|
- "9090:9090"
|
||||||
|
environment:
|
||||||
|
- CHAIN_ID=local-1
|
||||||
|
- MONIKER=localvalidator
|
||||||
|
- KEYRING=test
|
||||||
|
- KEY=user1
|
||||||
|
- KEY2=user2
|
||||||
|
- DENOM=usnr
|
||||||
|
- CLEAN=true
|
||||||
|
- BLOCK_TIME=5s
|
||||||
|
command: "start --pruning=nothing"
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- sonr-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
sonr-network:
|
||||||
|
name: sonr-network
|
25
deploy/process-compose.dev.yaml
Normal file
25
deploy/process-compose.dev.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
version: "0.6"
|
||||||
|
|
||||||
|
processes:
|
||||||
|
sonr:
|
||||||
|
namespace: testnet
|
||||||
|
command: "devbox run serve:sonr"
|
||||||
|
restart: on_failure
|
||||||
|
max_restarts: 3
|
||||||
|
depends:
|
||||||
|
|
||||||
|
caddy:
|
||||||
|
namespace: testnet
|
||||||
|
command: "devbox run serve:xcaddy"
|
||||||
|
restart: on_failure
|
||||||
|
max_restarts: 3
|
||||||
|
depends:
|
||||||
|
- sonr
|
||||||
|
|
||||||
|
air:
|
||||||
|
namespace: testnet
|
||||||
|
command: "devbox run serve:air"
|
||||||
|
restart: on_failure
|
||||||
|
max_restarts: 3
|
||||||
|
depends:
|
||||||
|
- sonr
|
17
deploy/process-compose.yaml
Normal file
17
deploy/process-compose.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
version: "0.6"
|
||||||
|
|
||||||
|
processes:
|
||||||
|
sonr:
|
||||||
|
namespace: testnet
|
||||||
|
command: "devbox run serve:sonr"
|
||||||
|
restart: on_failure
|
||||||
|
max_restarts: 3
|
||||||
|
depends:
|
||||||
|
|
||||||
|
caddy:
|
||||||
|
namespace: testnet
|
||||||
|
command: "devbox run serve:xcaddy"
|
||||||
|
restart: on_failure
|
||||||
|
max_restarts: 3
|
||||||
|
depends:
|
||||||
|
- sonr
|
49
devbox.json
49
devbox.json
@ -2,21 +2,19 @@
|
|||||||
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.12.0/.schema/devbox.schema.json",
|
"$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.12.0/.schema/devbox.schema.json",
|
||||||
"packages": [
|
"packages": [
|
||||||
"go@1.22",
|
"go@1.22",
|
||||||
"templ@latest",
|
|
||||||
"go-task@latest",
|
|
||||||
"templ@latest",
|
|
||||||
"bun@latest",
|
"bun@latest",
|
||||||
"ipfs-cluster@latest",
|
"process-compose@latest"
|
||||||
"air@latest"
|
|
||||||
],
|
],
|
||||||
"packages": ["go@1.21"],
|
|
||||||
"env": {
|
"env": {
|
||||||
|
"CLOUDFLARE_API_TOKEN": "$CLOUDFLARE_API_TOKEN",
|
||||||
"GOPATH": "$HOME/go",
|
"GOPATH": "$HOME/go",
|
||||||
"PATH": "$HOME/go/bin:$PATH",
|
"PATH": "$HOME/go/bin:$PATH",
|
||||||
|
"TEMPL_EXPERIMENT": "rawgo",
|
||||||
"CHAIN_ID": "sonr-testnet-1",
|
"CHAIN_ID": "sonr-testnet-1",
|
||||||
"DENOM": "usnr",
|
"DENOM": "usnr",
|
||||||
"KEYRING": "test",
|
"KEYRING": "test",
|
||||||
"MONIKER": "florence"
|
"MONIKER": "florence",
|
||||||
|
"ENV": "$ENVIRONMENT"
|
||||||
},
|
},
|
||||||
"shell": {
|
"shell": {
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -24,38 +22,41 @@
|
|||||||
"make install"
|
"make install"
|
||||||
],
|
],
|
||||||
"build": [
|
"build": [
|
||||||
"make build",
|
"make build"
|
||||||
"make local-image"
|
|
||||||
],
|
],
|
||||||
"build:dwn": [
|
"build:dwn": [
|
||||||
"templ generate",
|
|
||||||
"make dwn"
|
"make dwn"
|
||||||
],
|
],
|
||||||
|
"build:image": [
|
||||||
|
"make local-image"
|
||||||
|
],
|
||||||
"build:motr": [
|
"build:motr": [
|
||||||
"templ generate",
|
|
||||||
"make motr"
|
"make motr"
|
||||||
],
|
],
|
||||||
"gen:proto": [
|
"gen:proto": [
|
||||||
"make proto-gen"
|
"make proto-gen"
|
||||||
],
|
],
|
||||||
"gen:pkl": [
|
"gen:pkl": [
|
||||||
"go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/oidc.pkl",
|
"make pkl"
|
||||||
"go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/orm.pkl",
|
|
||||||
"go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/txns.pkl"
|
|
||||||
],
|
],
|
||||||
"dev": [
|
"gen:templ": [
|
||||||
"air"
|
"make templ"
|
||||||
|
],
|
||||||
|
"serve:air": [
|
||||||
|
"make air"
|
||||||
|
],
|
||||||
|
"serve:xcaddy": [
|
||||||
|
"make xcaddy"
|
||||||
|
],
|
||||||
|
"serve:sonr": [
|
||||||
|
"make sh-testnet"
|
||||||
|
],
|
||||||
|
"local": [
|
||||||
|
"process-compose -f ./deploy/process-compose.dev.yaml"
|
||||||
],
|
],
|
||||||
"testnet": [
|
"testnet": [
|
||||||
"devbox services up"
|
"process-compose -f ./deploy/process-compose.yaml"
|
||||||
]
|
]
|
||||||
"install": ["make install"],
|
|
||||||
"gen": ["make proto-gen"],
|
|
||||||
"build": [
|
|
||||||
"make local-image",
|
|
||||||
"docker tag sonr:local ghcr.io/onsonr/sonrd:latest"
|
|
||||||
],
|
|
||||||
"push": ["docker push ghcr.io/onsonr/sonrd:latest"]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
13
go.mod
13
go.mod
@ -46,7 +46,7 @@ require (
|
|||||||
cosmossdk.io/x/nft v0.1.0
|
cosmossdk.io/x/nft v0.1.0
|
||||||
cosmossdk.io/x/tx v0.13.3
|
cosmossdk.io/x/tx v0.13.3
|
||||||
cosmossdk.io/x/upgrade v0.1.1
|
cosmossdk.io/x/upgrade v0.1.1
|
||||||
github.com/a-h/templ v0.2.771
|
github.com/a-h/templ v0.2.778
|
||||||
github.com/apple/pkl-go v0.8.0
|
github.com/apple/pkl-go v0.8.0
|
||||||
github.com/btcsuite/btcd/btcec/v2 v2.3.3
|
github.com/btcsuite/btcd/btcec/v2 v2.3.3
|
||||||
github.com/charmbracelet/bubbles v0.19.0
|
github.com/charmbracelet/bubbles v0.19.0
|
||||||
@ -67,16 +67,12 @@ require (
|
|||||||
github.com/go-webauthn/webauthn v0.10.2
|
github.com/go-webauthn/webauthn v0.10.2
|
||||||
github.com/golang/protobuf v1.5.4
|
github.com/golang/protobuf v1.5.4
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.16.0
|
github.com/grpc-ecosystem/grpc-gateway v1.16.0
|
||||||
github.com/hack-pad/go-indexeddb v0.3.2
|
|
||||||
github.com/ipfs/boxo v0.21.0
|
github.com/ipfs/boxo v0.21.0
|
||||||
github.com/ipfs/kubo v0.29.0
|
github.com/ipfs/kubo v0.29.0
|
||||||
github.com/joho/godotenv v1.5.1
|
github.com/joho/godotenv v1.5.1
|
||||||
github.com/labstack/echo/v4 v4.10.2
|
github.com/labstack/echo/v4 v4.10.2
|
||||||
github.com/mr-tron/base58 v1.2.0
|
|
||||||
github.com/ncruces/go-sqlite3 v0.18.2
|
|
||||||
github.com/ncruces/go-sqlite3/gormlite v0.18.0
|
|
||||||
github.com/nlepage/go-js-promise v1.0.0
|
github.com/nlepage/go-js-promise v1.0.0
|
||||||
github.com/onsonr/crypto v1.29.0
|
github.com/onsonr/crypto v1.32.0
|
||||||
github.com/segmentio/ksuid v1.0.4
|
github.com/segmentio/ksuid v1.0.4
|
||||||
github.com/spf13/cast v1.6.0
|
github.com/spf13/cast v1.6.0
|
||||||
github.com/spf13/cobra v1.8.0
|
github.com/spf13/cobra v1.8.0
|
||||||
@ -91,11 +87,7 @@ require (
|
|||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4
|
google.golang.org/genproto/googleapis/api v0.0.0-20240617180043-68d350f18fd4
|
||||||
google.golang.org/grpc v1.64.0
|
google.golang.org/grpc v1.64.0
|
||||||
google.golang.org/protobuf v1.34.2
|
google.golang.org/protobuf v1.34.2
|
||||||
gopkg.in/macaroon-bakery.v2 v2.3.0
|
|
||||||
gopkg.in/macaroon.v2 v2.1.0
|
gopkg.in/macaroon.v2 v2.1.0
|
||||||
gorm.io/gorm v1.25.11
|
|
||||||
lukechampine.com/adiantum v1.1.1
|
|
||||||
lukechampine.com/blake3 v1.3.0
|
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@ -194,7 +186,6 @@ require (
|
|||||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
|
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
|
||||||
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
|
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
|
||||||
github.com/gtank/merlin v0.1.1 // indirect
|
github.com/gtank/merlin v0.1.1 // indirect
|
||||||
github.com/hack-pad/safejs v0.1.0 // indirect
|
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||||
github.com/hashicorp/go-getter v1.7.5 // indirect
|
github.com/hashicorp/go-getter v1.7.5 // indirect
|
||||||
|
22
go.sum
22
go.sum
@ -835,8 +835,8 @@ github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE
|
|||||||
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
|
||||||
github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
|
github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
|
||||||
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
|
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
|
||||||
github.com/a-h/templ v0.2.771 h1:4KH5ykNigYGGpCe0fRJ7/hzwz72k3qFqIiiLLJskbSo=
|
github.com/a-h/templ v0.2.778 h1:VzhOuvWECrwOec4790lcLlZpP4Iptt5Q4K9aFxQmtaM=
|
||||||
github.com/a-h/templ v0.2.771/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w=
|
github.com/a-h/templ v0.2.778/go.mod h1:lq48JXoUvuQrU0VThrK31yFwdRjTCnIE5bcPCM9IP1w=
|
||||||
github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I=
|
github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I=
|
||||||
github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg=
|
github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg=
|
||||||
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
|
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
|
||||||
@ -1150,9 +1150,6 @@ github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHqu
|
|||||||
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
|
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
|
||||||
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
|
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
|
||||||
github.com/frankban/quicktest v1.0.0/go.mod h1:R98jIehRai+d1/3Hv2//jOVCTJhW1VBavT6B6CuGq2k=
|
github.com/frankban/quicktest v1.0.0/go.mod h1:R98jIehRai+d1/3Hv2//jOVCTJhW1VBavT6B6CuGq2k=
|
||||||
github.com/frankban/quicktest v1.1.0/go.mod h1:R98jIehRai+d1/3Hv2//jOVCTJhW1VBavT6B6CuGq2k=
|
|
||||||
github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20=
|
|
||||||
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
|
|
||||||
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||||
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||||
@ -1403,10 +1400,6 @@ github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8
|
|||||||
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
|
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
|
||||||
github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is=
|
github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is=
|
||||||
github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
|
github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s=
|
||||||
github.com/hack-pad/go-indexeddb v0.3.2 h1:DTqeJJYc1usa45Q5r52t01KhvlSN02+Oq+tQbSBI91A=
|
|
||||||
github.com/hack-pad/go-indexeddb v0.3.2/go.mod h1:QvfTevpDVlkfomY498LhstjwbPW6QC4VC/lxYb0Kom0=
|
|
||||||
github.com/hack-pad/safejs v0.1.0 h1:qPS6vjreAqh2amUqj4WNG1zIw7qlRQJ9K10eDKMCnE8=
|
|
||||||
github.com/hack-pad/safejs v0.1.0/go.mod h1:HdS+bKF1NrE72VoXZeWzxFOVQVUSqZJAG0xNCnb+Tio=
|
|
||||||
github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
|
github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
|
||||||
github.com/hashicorp/consul/sdk v0.14.1/go.mod h1:vFt03juSzocLRFo59NkeQHHmQa6+g7oU0pfzdI1mUhg=
|
github.com/hashicorp/consul/sdk v0.14.1/go.mod h1:vFt03juSzocLRFo59NkeQHHmQa6+g7oU0pfzdI1mUhg=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
@ -1861,8 +1854,8 @@ github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7J
|
|||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
|
github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk=
|
||||||
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
|
github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0=
|
||||||
github.com/onsonr/crypto v1.29.0 h1:ontCN/XNNmpWv23N8VB6vsirLXcjxZaA67lLX9RNj0c=
|
github.com/onsonr/crypto v1.32.0 h1:3XxItjoYg4vLuTU7uvpbIl/MTk2tb6L43SSO9RFcEXc=
|
||||||
github.com/onsonr/crypto v1.29.0/go.mod h1:NSfeCO6XoyQeSDEp6Jy42UGG5047GvzG6lW9lRnjrR0=
|
github.com/onsonr/crypto v1.32.0/go.mod h1:NSfeCO6XoyQeSDEp6Jy42UGG5047GvzG6lW9lRnjrR0=
|
||||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||||
github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
|
github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
|
||||||
@ -1979,7 +1972,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qq
|
|||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||||
@ -2314,7 +2306,6 @@ golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
|||||||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
|
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
|
||||||
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
|
||||||
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -2619,7 +2610,6 @@ golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
|
|||||||
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
@ -3052,12 +3042,8 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
|
|||||||
gopkg.in/httprequest.v1 v1.2.0/go.mod h1:T61ZUaJLpMnzvoJDO03ZD8yRXD4nZzBeDoW5e9sffjg=
|
gopkg.in/httprequest.v1 v1.2.0/go.mod h1:T61ZUaJLpMnzvoJDO03ZD8yRXD4nZzBeDoW5e9sffjg=
|
||||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/juju/environschema.v1 v1.0.0/go.mod h1:WTgU3KXKCVoO9bMmG/4KHzoaRvLeoxfjArpgd1MGWFA=
|
|
||||||
gopkg.in/macaroon-bakery.v2 v2.3.0 h1:b40knPgPTke1QLTE8BSYeH7+R/hiIozB1A8CTLYN0Ic=
|
|
||||||
gopkg.in/macaroon-bakery.v2 v2.3.0/go.mod h1:/8YhtPARXeRzbpEPLmRB66+gQE8/pzBBkWwg7Vz/guc=
|
|
||||||
gopkg.in/macaroon.v2 v2.1.0 h1:HZcsjBCzq9t0eBPMKqTN/uSN6JOm78ZJ2INbqcBQOUI=
|
gopkg.in/macaroon.v2 v2.1.0 h1:HZcsjBCzq9t0eBPMKqTN/uSN6JOm78ZJ2INbqcBQOUI=
|
||||||
gopkg.in/macaroon.v2 v2.1.0/go.mod h1:OUb+TQP/OP0WOerC2Jp/3CwhIKyIa9kQjuc7H24e6/o=
|
gopkg.in/macaroon.v2 v2.1.0/go.mod h1:OUb+TQP/OP0WOerC2Jp/3CwhIKyIa9kQjuc7H24e6/o=
|
||||||
gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
|
||||||
gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
|
gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
|
||||||
gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
|
gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
|
165
internal/cli/dexmodel/dexmodel.go
Normal file
165
internal/cli/dexmodel/dexmodel.go
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
package dexmodel
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/charmbracelet/bubbles/table"
|
||||||
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
|
"github.com/charmbracelet/lipgloss"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
subtle = lipgloss.AdaptiveColor{Light: "#D9DCCF", Dark: "#383838"}
|
||||||
|
highlight = lipgloss.AdaptiveColor{Light: "#874BFD", Dark: "#7D56F4"}
|
||||||
|
special = lipgloss.AdaptiveColor{Light: "#43BF6D", Dark: "#73F59F"}
|
||||||
|
|
||||||
|
titleStyle = lipgloss.NewStyle().
|
||||||
|
MarginLeft(1).
|
||||||
|
MarginRight(5).
|
||||||
|
Padding(0, 1).
|
||||||
|
Italic(true).
|
||||||
|
Foreground(lipgloss.Color("#FFF7DB")).
|
||||||
|
SetString("Cosmos Block Explorer")
|
||||||
|
|
||||||
|
infoStyle = lipgloss.NewStyle().
|
||||||
|
BorderStyle(lipgloss.NormalBorder()).
|
||||||
|
BorderTop(true).
|
||||||
|
BorderForeground(subtle)
|
||||||
|
)
|
||||||
|
|
||||||
|
type model struct {
|
||||||
|
blocks []string
|
||||||
|
transactionTable table.Model
|
||||||
|
stats map[string]string
|
||||||
|
width int
|
||||||
|
height int
|
||||||
|
}
|
||||||
|
|
||||||
|
func initialModel() model {
|
||||||
|
columns := []table.Column{
|
||||||
|
{Title: "Hash", Width: 10},
|
||||||
|
{Title: "Type", Width: 15},
|
||||||
|
{Title: "Height", Width: 10},
|
||||||
|
{Title: "Time", Width: 20},
|
||||||
|
}
|
||||||
|
|
||||||
|
rows := []table.Row{
|
||||||
|
{"abc123", "Transfer", "1000", time.Now().Format(time.RFC3339)},
|
||||||
|
{"def456", "Delegate", "999", time.Now().Add(-1 * time.Minute).Format(time.RFC3339)},
|
||||||
|
{"ghi789", "Vote", "998", time.Now().Add(-2 * time.Minute).Format(time.RFC3339)},
|
||||||
|
}
|
||||||
|
|
||||||
|
t := table.New(
|
||||||
|
table.WithColumns(columns),
|
||||||
|
table.WithRows(rows),
|
||||||
|
table.WithFocused(true),
|
||||||
|
table.WithHeight(7),
|
||||||
|
)
|
||||||
|
|
||||||
|
s := table.DefaultStyles()
|
||||||
|
s.Header = s.Header.
|
||||||
|
BorderStyle(lipgloss.NormalBorder()).
|
||||||
|
BorderForeground(lipgloss.Color("240")).
|
||||||
|
BorderBottom(true).
|
||||||
|
Bold(false)
|
||||||
|
s.Selected = s.Selected.
|
||||||
|
Foreground(lipgloss.Color("229")).
|
||||||
|
Background(lipgloss.Color("57")).
|
||||||
|
Bold(false)
|
||||||
|
t.SetStyles(s)
|
||||||
|
|
||||||
|
return model{
|
||||||
|
blocks: []string{"Block 1", "Block 2", "Block 3"},
|
||||||
|
transactionTable: t,
|
||||||
|
stats: map[string]string{
|
||||||
|
"Latest Block": "1000",
|
||||||
|
"Validators": "100",
|
||||||
|
"Bonded Tokens": "1,000,000",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m model) Init() tea.Cmd {
|
||||||
|
return tick
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
|
var cmd tea.Cmd
|
||||||
|
switch msg := msg.(type) {
|
||||||
|
case tea.KeyMsg:
|
||||||
|
switch msg.String() {
|
||||||
|
case "q", "ctrl+c":
|
||||||
|
return m, tea.Quit
|
||||||
|
case "enter":
|
||||||
|
return m, tea.Batch(
|
||||||
|
tea.Printf("Selected transaction: %s", m.transactionTable.SelectedRow()[0]),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
case tea.WindowSizeMsg:
|
||||||
|
m.height = msg.Height
|
||||||
|
m.width = msg.Width
|
||||||
|
case tickMsg:
|
||||||
|
// Update data here
|
||||||
|
m.blocks = append([]string{"New Block"}, m.blocks...)
|
||||||
|
if len(m.blocks) > 5 {
|
||||||
|
m.blocks = m.blocks[:5]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a new transaction to the table
|
||||||
|
newRow := table.Row{
|
||||||
|
fmt.Sprintf("tx%d", time.Now().Unix()),
|
||||||
|
"NewTxType",
|
||||||
|
fmt.Sprintf("%d", 1000+len(m.transactionTable.Rows())),
|
||||||
|
time.Now().Format(time.RFC3339),
|
||||||
|
}
|
||||||
|
m.transactionTable.SetRows(append([]table.Row{newRow}, m.transactionTable.Rows()...))
|
||||||
|
if len(m.transactionTable.Rows()) > 10 {
|
||||||
|
m.transactionTable.SetRows(m.transactionTable.Rows()[:10])
|
||||||
|
}
|
||||||
|
|
||||||
|
return m, tick
|
||||||
|
}
|
||||||
|
m.transactionTable, cmd = m.transactionTable.Update(msg)
|
||||||
|
return m, cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m model) View() string {
|
||||||
|
s := titleStyle.Render("Cosmos Block Explorer")
|
||||||
|
s += "\n\n"
|
||||||
|
|
||||||
|
// Blocks
|
||||||
|
s += lipgloss.NewStyle().Bold(true).Render("Recent Blocks") + "\n"
|
||||||
|
for _, block := range m.blocks {
|
||||||
|
s += "• " + block + "\n"
|
||||||
|
}
|
||||||
|
s += "\n"
|
||||||
|
|
||||||
|
// Transactions
|
||||||
|
s += lipgloss.NewStyle().Bold(true).Render("Recent Transactions") + "\n"
|
||||||
|
s += m.transactionTable.View() + "\n\n"
|
||||||
|
|
||||||
|
// Stats
|
||||||
|
s += lipgloss.NewStyle().Bold(true).Render("Network Statistics") + "\n"
|
||||||
|
for key, value := range m.stats {
|
||||||
|
s += fmt.Sprintf("%s: %s\n", key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
type tickMsg time.Time
|
||||||
|
|
||||||
|
func tick() tea.Msg {
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
return tickMsg{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func RunExplorerTUI(cmd *cobra.Command, args []string) error {
|
||||||
|
p := tea.NewProgram(initialModel(), tea.WithAltScreen())
|
||||||
|
if _, err := p.Run(); err != nil {
|
||||||
|
return fmt.Errorf("error running explorer: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
49
internal/cli/tui.go
Normal file
49
internal/cli/tui.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package cli
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
|
"github.com/onsonr/sonr/internal/cli/dexmodel"
|
||||||
|
"github.com/onsonr/sonr/internal/cli/txmodel"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AddTUICmds(rootCmd *cobra.Command) {
|
||||||
|
rootCmd.AddCommand(newBuildTxnTUICmd())
|
||||||
|
rootCmd.AddCommand(newExplorerTUICmd())
|
||||||
|
}
|
||||||
|
|
||||||
|
func newBuildTxnTUICmd() *cobra.Command {
|
||||||
|
return &cobra.Command{
|
||||||
|
Use: "dash",
|
||||||
|
Short: "TUI for managing the local Sonr validator node",
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
txBody, err := txmodel.RunBuildTxnTUI()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
interfaceRegistry := codectypes.NewInterfaceRegistry()
|
||||||
|
marshaler := codec.NewProtoCodec(interfaceRegistry)
|
||||||
|
jsonBytes, err := marshaler.MarshalJSON(txBody)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to marshal tx body: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Generated Protobuf Message (JSON format):")
|
||||||
|
fmt.Println(string(jsonBytes))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newExplorerTUICmd() *cobra.Command {
|
||||||
|
return &cobra.Command{
|
||||||
|
Use: "cosmos-explorer",
|
||||||
|
Short: "A terminal-based Cosmos blockchain explorer",
|
||||||
|
RunE: dexmodel.RunExplorerTUI,
|
||||||
|
}
|
||||||
|
}
|
322
internal/cli/txmodel/txmodel.go
Normal file
322
internal/cli/txmodel/txmodel.go
Normal file
@ -0,0 +1,322 @@
|
|||||||
|
package txmodel
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
|
"github.com/charmbracelet/huh"
|
||||||
|
"github.com/charmbracelet/lipgloss"
|
||||||
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
"github.com/cosmos/cosmos-sdk/types/tx"
|
||||||
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
const maxWidth = 100
|
||||||
|
|
||||||
|
var (
|
||||||
|
red = lipgloss.AdaptiveColor{Light: "#FE5F86", Dark: "#FE5F86"}
|
||||||
|
indigo = lipgloss.AdaptiveColor{Light: "#5A56E0", Dark: "#7571F9"}
|
||||||
|
green = lipgloss.AdaptiveColor{Light: "#02BA84", Dark: "#02BF87"}
|
||||||
|
)
|
||||||
|
|
||||||
|
type Styles struct {
|
||||||
|
Base,
|
||||||
|
HeaderText,
|
||||||
|
Status,
|
||||||
|
StatusHeader,
|
||||||
|
Highlight,
|
||||||
|
ErrorHeaderText,
|
||||||
|
Help lipgloss.Style
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewStyles(lg *lipgloss.Renderer) *Styles {
|
||||||
|
s := Styles{}
|
||||||
|
s.Base = lg.NewStyle().
|
||||||
|
Padding(1, 2, 0, 1)
|
||||||
|
s.HeaderText = lg.NewStyle().
|
||||||
|
Foreground(indigo).
|
||||||
|
Bold(true).
|
||||||
|
Padding(0, 1, 0, 1)
|
||||||
|
s.Status = lg.NewStyle().
|
||||||
|
Border(lipgloss.RoundedBorder()).
|
||||||
|
BorderForeground(indigo).
|
||||||
|
PaddingLeft(1).
|
||||||
|
MarginTop(1)
|
||||||
|
s.StatusHeader = lg.NewStyle().
|
||||||
|
Foreground(green).
|
||||||
|
Bold(true)
|
||||||
|
s.Highlight = lg.NewStyle().
|
||||||
|
Foreground(lipgloss.Color("212"))
|
||||||
|
s.ErrorHeaderText = s.HeaderText.
|
||||||
|
Foreground(red)
|
||||||
|
s.Help = lg.NewStyle().
|
||||||
|
Foreground(lipgloss.Color("240"))
|
||||||
|
return &s
|
||||||
|
}
|
||||||
|
|
||||||
|
type state int
|
||||||
|
|
||||||
|
const (
|
||||||
|
statusNormal state = iota
|
||||||
|
stateDone
|
||||||
|
)
|
||||||
|
|
||||||
|
type Model struct {
|
||||||
|
state state
|
||||||
|
lg *lipgloss.Renderer
|
||||||
|
styles *Styles
|
||||||
|
form *huh.Form
|
||||||
|
width int
|
||||||
|
message *tx.TxBody
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewModel() Model {
|
||||||
|
m := Model{width: maxWidth}
|
||||||
|
m.lg = lipgloss.DefaultRenderer()
|
||||||
|
m.styles = NewStyles(m.lg)
|
||||||
|
|
||||||
|
m.form = huh.NewForm(
|
||||||
|
huh.NewGroup(
|
||||||
|
huh.NewInput().
|
||||||
|
Key("from").
|
||||||
|
Title("From Address").
|
||||||
|
Placeholder("cosmos1...").
|
||||||
|
Validate(func(s string) error {
|
||||||
|
if !strings.HasPrefix(s, "cosmos1") {
|
||||||
|
return fmt.Errorf("invalid address format")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}),
|
||||||
|
|
||||||
|
huh.NewInput().
|
||||||
|
Key("to").
|
||||||
|
Title("To Address").
|
||||||
|
Placeholder("cosmos1...").
|
||||||
|
Validate(func(s string) error {
|
||||||
|
if !strings.HasPrefix(s, "cosmos1") {
|
||||||
|
return fmt.Errorf("invalid address format")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}),
|
||||||
|
|
||||||
|
huh.NewInput().
|
||||||
|
Key("amount").
|
||||||
|
Title("Amount").
|
||||||
|
Placeholder("100").
|
||||||
|
Validate(func(s string) error {
|
||||||
|
if _, err := sdk.ParseCoinNormalized(s + "atom"); err != nil {
|
||||||
|
return fmt.Errorf("invalid coin amount")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}),
|
||||||
|
|
||||||
|
huh.NewSelect[string]().
|
||||||
|
Key("denom").
|
||||||
|
Title("Denom").
|
||||||
|
Options(huh.NewOptions("atom", "osmo", "usnr", "snr")...),
|
||||||
|
|
||||||
|
huh.NewInput().
|
||||||
|
Key("memo").
|
||||||
|
Title("Memo").
|
||||||
|
Placeholder("Optional"),
|
||||||
|
|
||||||
|
huh.NewConfirm().
|
||||||
|
Key("done").
|
||||||
|
Title("Ready to convert?").
|
||||||
|
Validate(func(v bool) error {
|
||||||
|
if !v {
|
||||||
|
return fmt.Errorf("Please confirm when you're ready to convert")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}).
|
||||||
|
Affirmative("Yes, convert!").
|
||||||
|
Negative("Not yet"),
|
||||||
|
),
|
||||||
|
).
|
||||||
|
WithWidth(60).
|
||||||
|
WithShowHelp(false).
|
||||||
|
WithShowErrors(false)
|
||||||
|
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) Init() tea.Cmd {
|
||||||
|
return m.form.Init()
|
||||||
|
}
|
||||||
|
|
||||||
|
func min(x, y int) int {
|
||||||
|
if x > y {
|
||||||
|
return y
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
||||||
|
switch msg := msg.(type) {
|
||||||
|
case tea.WindowSizeMsg:
|
||||||
|
m.width = min(msg.Width, maxWidth) - m.styles.Base.GetHorizontalFrameSize()
|
||||||
|
case tea.KeyMsg:
|
||||||
|
switch msg.String() {
|
||||||
|
case "esc", "ctrl+c", "q":
|
||||||
|
return m, tea.Quit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmds []tea.Cmd
|
||||||
|
|
||||||
|
form, cmd := m.form.Update(msg)
|
||||||
|
if f, ok := form.(*huh.Form); ok {
|
||||||
|
m.form = f
|
||||||
|
cmds = append(cmds, cmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
if m.form.State == huh.StateCompleted {
|
||||||
|
m.buildMessage()
|
||||||
|
cmds = append(cmds, tea.Quit)
|
||||||
|
}
|
||||||
|
|
||||||
|
return m, tea.Batch(cmds...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) View() string {
|
||||||
|
s := m.styles
|
||||||
|
|
||||||
|
switch m.form.State {
|
||||||
|
case huh.StateCompleted:
|
||||||
|
pklCode := m.generatePkl()
|
||||||
|
messageView := m.getMessageView()
|
||||||
|
var b strings.Builder
|
||||||
|
fmt.Fprintf(&b, "Final Tx:\n\n%s\n\n%s", pklCode, messageView)
|
||||||
|
return s.Status.Margin(0, 1).Padding(1, 2).Width(80).Render(b.String()) + "\n\n"
|
||||||
|
default:
|
||||||
|
var schemaType string
|
||||||
|
if m.form.GetString("schemaType") != "" {
|
||||||
|
schemaType = "Schema Type: " + m.form.GetString("schemaType")
|
||||||
|
}
|
||||||
|
|
||||||
|
v := strings.TrimSuffix(m.form.View(), "\n\n")
|
||||||
|
form := m.lg.NewStyle().Margin(1, 0).Render(v)
|
||||||
|
|
||||||
|
var status string
|
||||||
|
{
|
||||||
|
preview := "(Preview will appear here)"
|
||||||
|
if m.form.GetString("schema") != "" {
|
||||||
|
preview = m.generatePkl()
|
||||||
|
}
|
||||||
|
|
||||||
|
const statusWidth = 40
|
||||||
|
statusMarginLeft := m.width - statusWidth - lipgloss.Width(form) - s.Status.GetMarginRight()
|
||||||
|
status = s.Status.
|
||||||
|
Height(lipgloss.Height(form)).
|
||||||
|
Width(statusWidth).
|
||||||
|
MarginLeft(statusMarginLeft).
|
||||||
|
Render(s.StatusHeader.Render("Pkl Preview") + "\n" +
|
||||||
|
schemaType + "\n\n" +
|
||||||
|
preview)
|
||||||
|
}
|
||||||
|
|
||||||
|
errors := m.form.Errors()
|
||||||
|
header := m.appBoundaryView("Sonr TX Builder")
|
||||||
|
if len(errors) > 0 {
|
||||||
|
header = m.appErrorBoundaryView(m.errorView())
|
||||||
|
}
|
||||||
|
body := lipgloss.JoinHorizontal(lipgloss.Top, form, status)
|
||||||
|
|
||||||
|
footer := m.appBoundaryView(m.form.Help().ShortHelpView(m.form.KeyBinds()))
|
||||||
|
if len(errors) > 0 {
|
||||||
|
footer = m.appErrorBoundaryView("")
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.Base.Render(header + "\n" + body + "\n\n" + footer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) errorView() string {
|
||||||
|
var s string
|
||||||
|
for _, err := range m.form.Errors() {
|
||||||
|
s += err.Error()
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) appBoundaryView(text string) string {
|
||||||
|
return lipgloss.PlaceHorizontal(
|
||||||
|
m.width,
|
||||||
|
lipgloss.Left,
|
||||||
|
m.styles.HeaderText.Render(text),
|
||||||
|
lipgloss.WithWhitespaceChars("="),
|
||||||
|
lipgloss.WithWhitespaceForeground(indigo),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) appErrorBoundaryView(text string) string {
|
||||||
|
return lipgloss.PlaceHorizontal(
|
||||||
|
m.width,
|
||||||
|
lipgloss.Left,
|
||||||
|
m.styles.ErrorHeaderText.Render(text),
|
||||||
|
lipgloss.WithWhitespaceChars("="),
|
||||||
|
lipgloss.WithWhitespaceForeground(red),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) generatePkl() string {
|
||||||
|
schemaType := m.form.GetString("schemaType")
|
||||||
|
schema := m.form.GetString("schema")
|
||||||
|
|
||||||
|
// This is a placeholder for the actual conversion logic
|
||||||
|
// In a real implementation, you would parse the schema and generate Pkl code
|
||||||
|
return fmt.Sprintf("// Converted from %s\n\nclass ConvertedSchema {\n // TODO: Implement conversion from %s\n // Original schema:\n /*\n%s\n */\n}", schemaType, schemaType, schema)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Model) buildMessage() {
|
||||||
|
from := m.form.GetString("from")
|
||||||
|
to := m.form.GetString("to")
|
||||||
|
amount := m.form.GetString("amount")
|
||||||
|
denom := m.form.GetString("denom")
|
||||||
|
memo := m.form.GetString("memo")
|
||||||
|
|
||||||
|
coin, _ := sdk.ParseCoinNormalized(fmt.Sprintf("%s%s", amount, denom))
|
||||||
|
sendMsg := &banktypes.MsgSend{
|
||||||
|
FromAddress: from,
|
||||||
|
ToAddress: to,
|
||||||
|
Amount: sdk.NewCoins(coin),
|
||||||
|
}
|
||||||
|
|
||||||
|
anyMsg, _ := codectypes.NewAnyWithValue(sendMsg)
|
||||||
|
m.message = &tx.TxBody{
|
||||||
|
Messages: []*codectypes.Any{anyMsg},
|
||||||
|
Memo: memo,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Model) getMessageView() string {
|
||||||
|
if m.message == nil {
|
||||||
|
return "Current Message: None"
|
||||||
|
}
|
||||||
|
|
||||||
|
interfaceRegistry := codectypes.NewInterfaceRegistry()
|
||||||
|
marshaler := codec.NewProtoCodec(interfaceRegistry)
|
||||||
|
jsonBytes, _ := marshaler.MarshalJSON(m.message)
|
||||||
|
|
||||||
|
return fmt.Sprintf("Current Message:\n%s", string(jsonBytes))
|
||||||
|
}
|
||||||
|
|
||||||
|
func RunBuildTxnTUI() (*tx.TxBody, error) {
|
||||||
|
m := NewModel()
|
||||||
|
p := tea.NewProgram(m)
|
||||||
|
|
||||||
|
finalModel, err := p.Run()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to run program: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
finalM, ok := finalModel.(Model)
|
||||||
|
if !ok || finalM.message == nil {
|
||||||
|
return nil, fmt.Errorf("form not completed")
|
||||||
|
}
|
||||||
|
|
||||||
|
return finalM.message, nil
|
||||||
|
}
|
43
internal/dwn/handlers/auth.go
Normal file
43
internal/dwn/handlers/auth.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/go-webauthn/webauthn/protocol"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
func checkSubjectIsValid(e echo.Context) error {
|
||||||
|
credentialID := e.FormValue("credentialID")
|
||||||
|
return e.JSON(200, credentialID)
|
||||||
|
}
|
||||||
|
|
||||||
|
func handleCredentialAssertion(e echo.Context) error {
|
||||||
|
return e.JSON(200, "HandleCredentialAssertion")
|
||||||
|
}
|
||||||
|
|
||||||
|
func handleCredentialCreation(e echo.Context) error {
|
||||||
|
// Get the serialized credential data from the form
|
||||||
|
credentialDataJSON := e.FormValue("credentialData")
|
||||||
|
|
||||||
|
// Deserialize the JSON into a temporary struct
|
||||||
|
var ccr protocol.CredentialCreationResponse
|
||||||
|
err := json.Unmarshal([]byte(credentialDataJSON), &ccr)
|
||||||
|
if err != nil {
|
||||||
|
return e.JSON(500, err.Error())
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// // Parse the CredentialCreationResponse
|
||||||
|
// parsedData, err := ccr.Parse()
|
||||||
|
// if err != nil {
|
||||||
|
// return e.JSON(500, err.Error())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // Create the Credential
|
||||||
|
// // credential := orm.NewCredential(parsedData, e.Request().Host, "")
|
||||||
|
//
|
||||||
|
// // Set additional fields
|
||||||
|
// credential.Controller = "" // Set this to the appropriate controller value
|
||||||
|
return e.JSON(200, fmt.Sprintf("REGISTER: %s", string(ccr.ID)))
|
||||||
|
}
|
1
internal/dwn/handlers/manifest.go
Normal file
1
internal/dwn/handlers/manifest.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package handlers
|
23
internal/dwn/handlers/openid.go
Normal file
23
internal/dwn/handlers/openid.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
func grantAuthorization(e echo.Context) error {
|
||||||
|
// Implement authorization endpoint using passkey authentication
|
||||||
|
// Store session data in cache
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getJWKS(e echo.Context) error {
|
||||||
|
// Implement token endpoint
|
||||||
|
// Use cached session data for validation
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getToken(e echo.Context) error {
|
||||||
|
// Implement token endpoint
|
||||||
|
// Use cached session data for validation
|
||||||
|
return nil
|
||||||
|
}
|
22
internal/dwn/handlers/routes.go
Normal file
22
internal/dwn/handlers/routes.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package handlers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
middleware "github.com/onsonr/sonr/internal/dwn/middleware"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RegisterState(e *echo.Echo) {
|
||||||
|
g := e.Group("state")
|
||||||
|
g.POST("/login/:identifier", handleCredentialAssertion)
|
||||||
|
// g.GET("/discovery", state.GetDiscovery)
|
||||||
|
g.GET("/jwks", getJWKS)
|
||||||
|
g.GET("/token", getToken)
|
||||||
|
g.POST("/:origin/grant/:subject", grantAuthorization)
|
||||||
|
g.POST("/register/:subject", handleCredentialCreation)
|
||||||
|
g.POST("/register/:subject/check", checkSubjectIsValid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterSync(e *echo.Echo) {
|
||||||
|
g := e.Group("sync")
|
||||||
|
g.Use(middleware.MacaroonMiddleware("test", "test"))
|
||||||
|
}
|
1
internal/dwn/handlers/views.go
Normal file
1
internal/dwn/handlers/views.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package handlers
|
1
internal/dwn/handlers/wellknown.go
Normal file
1
internal/dwn/handlers/wellknown.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package handlers
|
141
internal/dwn/main.go
Normal file
141
internal/dwn/main.go
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
//go:build js && wasm
|
||||||
|
// +build js,wasm
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httptest"
|
||||||
|
"strings"
|
||||||
|
"syscall/js"
|
||||||
|
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
promise "github.com/nlepage/go-js-promise"
|
||||||
|
"github.com/onsonr/sonr/internal/dwn/handlers"
|
||||||
|
"github.com/onsonr/sonr/internal/dwn/middleware"
|
||||||
|
"github.com/onsonr/sonr/pkg/nebula"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
e := echo.New()
|
||||||
|
e.Use(middleware.UseSession)
|
||||||
|
nebula.RouteViews(e)
|
||||||
|
handlers.RegisterState(e)
|
||||||
|
Serve(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serve serves HTTP requests using handler or http.DefaultServeMux if handler is nil.
|
||||||
|
func Serve(handler http.Handler) func() {
|
||||||
|
h := handler
|
||||||
|
if h == nil {
|
||||||
|
h = http.DefaultServeMux
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix := js.Global().Get("wasmhttp").Get("path").String()
|
||||||
|
for strings.HasSuffix(prefix, "/") {
|
||||||
|
prefix = strings.TrimSuffix(prefix, "/")
|
||||||
|
}
|
||||||
|
|
||||||
|
if prefix != "" {
|
||||||
|
mux := http.NewServeMux()
|
||||||
|
mux.Handle(prefix+"/", http.StripPrefix(prefix, h))
|
||||||
|
h = mux
|
||||||
|
}
|
||||||
|
|
||||||
|
cb := js.FuncOf(func(_ js.Value, args []js.Value) interface{} {
|
||||||
|
resPromise, resolve, reject := promise.New()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
if err, ok := r.(error); ok {
|
||||||
|
reject(fmt.Sprintf("wasmhttp: panic: %+v\n", err))
|
||||||
|
} else {
|
||||||
|
reject(fmt.Sprintf("wasmhttp: panic: %v\n", r))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
res := NewResponseRecorder()
|
||||||
|
|
||||||
|
h.ServeHTTP(res, Request(args[0]))
|
||||||
|
|
||||||
|
resolve(res.JSResponse())
|
||||||
|
}()
|
||||||
|
|
||||||
|
return resPromise
|
||||||
|
})
|
||||||
|
|
||||||
|
js.Global().Get("wasmhttp").Call("setHandler", cb)
|
||||||
|
|
||||||
|
return cb.Release
|
||||||
|
}
|
||||||
|
|
||||||
|
// Request builds and returns the equivalent http.Request
|
||||||
|
func Request(r js.Value) *http.Request {
|
||||||
|
jsBody := js.Global().Get("Uint8Array").New(promise.Await(r.Call("arrayBuffer")))
|
||||||
|
body := make([]byte, jsBody.Get("length").Int())
|
||||||
|
js.CopyBytesToGo(body, jsBody)
|
||||||
|
|
||||||
|
req := httptest.NewRequest(
|
||||||
|
r.Get("method").String(),
|
||||||
|
r.Get("url").String(),
|
||||||
|
bytes.NewBuffer(body),
|
||||||
|
)
|
||||||
|
|
||||||
|
headersIt := r.Get("headers").Call("entries")
|
||||||
|
for {
|
||||||
|
e := headersIt.Call("next")
|
||||||
|
if e.Get("done").Bool() {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
v := e.Get("value")
|
||||||
|
req.Header.Set(v.Index(0).String(), v.Index(1).String())
|
||||||
|
}
|
||||||
|
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResponseRecorder uses httptest.ResponseRecorder to build a JS Response
|
||||||
|
type ResponseRecorder struct {
|
||||||
|
*httptest.ResponseRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewResponseRecorder returns a new ResponseRecorder
|
||||||
|
func NewResponseRecorder() ResponseRecorder {
|
||||||
|
return ResponseRecorder{httptest.NewRecorder()}
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSResponse builds and returns the equivalent JS Response
|
||||||
|
func (rr ResponseRecorder) JSResponse() js.Value {
|
||||||
|
res := rr.Result()
|
||||||
|
|
||||||
|
body := js.Undefined()
|
||||||
|
if res.ContentLength != 0 {
|
||||||
|
b, err := io.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
body = js.Global().Get("Uint8Array").New(len(b))
|
||||||
|
js.CopyBytesToJS(body, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
init := make(map[string]interface{}, 2)
|
||||||
|
|
||||||
|
if res.StatusCode != 0 {
|
||||||
|
init["status"] = res.StatusCode
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(res.Header) != 0 {
|
||||||
|
headers := make(map[string]interface{}, len(res.Header))
|
||||||
|
for k := range res.Header {
|
||||||
|
headers[k] = res.Header.Get(k)
|
||||||
|
}
|
||||||
|
init["headers"] = headers
|
||||||
|
}
|
||||||
|
|
||||||
|
return js.Global().Get("Response").New(body, init)
|
||||||
|
}
|
55
internal/dwn/middleware/headers.go
Normal file
55
internal/dwn/middleware/headers.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
type RequestHeaders struct {
|
||||||
|
Authorization *string `header:"Authorization"`
|
||||||
|
CacheControl *string `header:"Cache-Control"`
|
||||||
|
DeviceMemory *string `header:"Device-Memory"`
|
||||||
|
Forwarded *string `header:"Forwarded"`
|
||||||
|
From *string `header:"From"`
|
||||||
|
Host *string `header:"Host"`
|
||||||
|
Link *string `header:"Link"`
|
||||||
|
PermissionsPolicy *string `header:"Permissions-Policy"`
|
||||||
|
ProxyAuthorization *string `header:"Proxy-Authorization"`
|
||||||
|
Referer *string `header:"Referer"`
|
||||||
|
UserAgent *string `header:"User-Agent"`
|
||||||
|
ViewportWidth *string `header:"Viewport-Width"`
|
||||||
|
Width *string `header:"Width"`
|
||||||
|
WWWAuthenticate *string `header:"WWW-Authenticate"`
|
||||||
|
|
||||||
|
// HTMX Specific
|
||||||
|
HXBoosted *string `header:"HX-Boosted"`
|
||||||
|
HXCurrentURL *string `header:"HX-Current-URL"`
|
||||||
|
HXHistoryRestoreRequest *string `header:"HX-History-Restore-Request"`
|
||||||
|
HXPrompt *string `header:"HX-Prompt"`
|
||||||
|
HXRequest *string `header:"HX-Request"`
|
||||||
|
HXTarget *string `header:"HX-Target"`
|
||||||
|
HXTriggerName *string `header:"HX-Trigger-Name"`
|
||||||
|
HXTrigger *string `header:"HX-Trigger"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseHeaders struct {
|
||||||
|
AcceptCH *string `header:"Accept-CH"`
|
||||||
|
AccessControlAllowCredentials *string `header:"Access-Control-Allow-Credentials"`
|
||||||
|
AccessControlAllowHeaders *string `header:"Access-Control-Allow-Headers"`
|
||||||
|
AccessControlAllowMethods *string `header:"Access-Control-Allow-Methods"`
|
||||||
|
AccessControlExposeHeaders *string `header:"Access-Control-Expose-Headers"`
|
||||||
|
AccessControlRequestHeaders *string `header:"Access-Control-Request-Headers"`
|
||||||
|
ContentSecurityPolicy *string `header:"Content-Security-Policy"`
|
||||||
|
CrossOriginEmbedderPolicy *string `header:"Cross-Origin-Embedder-Policy"`
|
||||||
|
PermissionsPolicy *string `header:"Permissions-Policy"`
|
||||||
|
ProxyAuthorization *string `header:"Proxy-Authorization"`
|
||||||
|
WWWAuthenticate *string `header:"WWW-Authenticate"`
|
||||||
|
|
||||||
|
// HTMX Specific
|
||||||
|
HXLocation *string `header:"HX-Location"`
|
||||||
|
HXPushURL *string `header:"HX-Push-Url"`
|
||||||
|
HXRedirect *string `header:"HX-Redirect"`
|
||||||
|
HXRefresh *string `header:"HX-Refresh"`
|
||||||
|
HXReplaceURL *string `header:"HX-Replace-Url"`
|
||||||
|
HXReswap *string `header:"HX-Reswap"`
|
||||||
|
HXRetarget *string `header:"HX-Retarget"`
|
||||||
|
HXReselect *string `header:"HX-Reselect"`
|
||||||
|
HXTrigger *string `header:"HX-Trigger"`
|
||||||
|
HXTriggerAfterSettle *string `header:"HX-Trigger-After-Settle"`
|
||||||
|
HXTriggerAfterSwap *string `header:"HX-Trigger-After-Swap"`
|
||||||
|
}
|
63
internal/dwn/middleware/middleware.go
Normal file
63
internal/dwn/middleware/middleware.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
"gopkg.in/macaroon.v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetSession returns the current Session
|
||||||
|
func GetSession(c echo.Context) *Session {
|
||||||
|
return c.(*Session)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UseSession establishes a Session Cookie.
|
||||||
|
func UseSession(next echo.HandlerFunc) echo.HandlerFunc {
|
||||||
|
return func(c echo.Context) error {
|
||||||
|
sc := initSession(c)
|
||||||
|
headers := new(RequestHeaders)
|
||||||
|
sc.Bind(headers)
|
||||||
|
return next(sc)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func MacaroonMiddleware(secretKeyStr string, location string) echo.MiddlewareFunc {
|
||||||
|
secretKey := []byte(secretKeyStr)
|
||||||
|
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||||
|
return func(c echo.Context) error {
|
||||||
|
// Extract the macaroon from the Authorization header
|
||||||
|
auth := c.Request().Header.Get("Authorization")
|
||||||
|
if auth == "" {
|
||||||
|
return c.JSON(http.StatusUnauthorized, map[string]string{"error": "Missing Authorization header"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decode the macaroon
|
||||||
|
mac, err := macaroon.Base64Decode([]byte(auth))
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Invalid macaroon encoding"})
|
||||||
|
}
|
||||||
|
|
||||||
|
token, err := macaroon.New(secretKey, mac, location, macaroon.LatestVersion)
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Invalid macaroon"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify the macaroon
|
||||||
|
err = token.Verify(secretKey, func(caveat string) error {
|
||||||
|
for _, c := range MacroonCaveats {
|
||||||
|
if c.String() == caveat {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil // Return nil if the caveat is valid
|
||||||
|
}, nil)
|
||||||
|
if err != nil {
|
||||||
|
return c.JSON(http.StatusUnauthorized, map[string]string{"error": "Invalid macaroon"})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Macaroon is valid, proceed to the next handler
|
||||||
|
return next(c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
51
internal/dwn/middleware/session.go
Normal file
51
internal/dwn/middleware/session.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/donseba/go-htmx"
|
||||||
|
"github.com/labstack/echo/v4"
|
||||||
|
"github.com/segmentio/ksuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Session struct {
|
||||||
|
echo.Context
|
||||||
|
htmx *htmx.HTMX
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Session) Htmx() *htmx.HTMX {
|
||||||
|
return c.htmx
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Session) ID() string {
|
||||||
|
return ReadCookie(c, "session")
|
||||||
|
}
|
||||||
|
|
||||||
|
func initSession(c echo.Context) *Session {
|
||||||
|
s := &Session{Context: c}
|
||||||
|
if val := ReadCookie(c, "session"); val == "" {
|
||||||
|
id := ksuid.New().String()
|
||||||
|
WriteCookie(c, "session", id)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadCookie(c echo.Context, key string) string {
|
||||||
|
cookie, err := c.Cookie(key)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if cookie == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return cookie.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
func WriteCookie(c echo.Context, key string, value string) {
|
||||||
|
cookie := new(http.Cookie)
|
||||||
|
cookie.Name = key
|
||||||
|
cookie.Value = value
|
||||||
|
cookie.Expires = time.Now().Add(24 * time.Hour)
|
||||||
|
c.SetCookie(cookie)
|
||||||
|
}
|
51
internal/dwn/middleware/token.go
Normal file
51
internal/dwn/middleware/token.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
OriginMacroonCaveat MacroonCaveat = "origin"
|
||||||
|
ScopesMacroonCaveat MacroonCaveat = "scopes"
|
||||||
|
SubjectMacroonCaveat MacroonCaveat = "subject"
|
||||||
|
ExpMacroonCaveat MacroonCaveat = "exp"
|
||||||
|
TokenMacroonCaveat MacroonCaveat = "token"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MacroonCaveat string
|
||||||
|
|
||||||
|
func (c MacroonCaveat) Equal(other string) bool {
|
||||||
|
return string(c) == other
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c MacroonCaveat) String() string {
|
||||||
|
return string(c)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c MacroonCaveat) Verify(value string) error {
|
||||||
|
switch c {
|
||||||
|
case OriginMacroonCaveat:
|
||||||
|
return nil
|
||||||
|
case ScopesMacroonCaveat:
|
||||||
|
return nil
|
||||||
|
case SubjectMacroonCaveat:
|
||||||
|
return nil
|
||||||
|
case ExpMacroonCaveat:
|
||||||
|
// Check if the expiration time is still valid
|
||||||
|
exp, err := time.Parse(time.RFC3339, value)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if time.Now().After(exp) {
|
||||||
|
return fmt.Errorf("expired")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
case TokenMacroonCaveat:
|
||||||
|
return nil
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unknown caveat: %s", c)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var MacroonCaveats = []MacroonCaveat{OriginMacroonCaveat, ScopesMacroonCaveat, SubjectMacroonCaveat, ExpMacroonCaveat, TokenMacroonCaveat}
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -15,6 +15,9 @@ func Alert(variant Variant, icon Icon, title, message string) templ.Component {
|
|||||||
func alertElement(attrs templ.Attributes, title, message string, icon templ.Component) templ.Component {
|
func alertElement(attrs templ.Attributes, title, message string, icon templ.Component) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -11,6 +11,9 @@ import templruntime "github.com/a-h/templ/runtime"
|
|||||||
func Animation() templ.Component {
|
func Animation() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -11,6 +11,9 @@ import templruntime "github.com/a-h/templ/runtime"
|
|||||||
func PoweredBySonr() templ.Component {
|
func PoweredBySonr() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -11,6 +11,9 @@ import templruntime "github.com/a-h/templ/runtime"
|
|||||||
func Breadcrumbs() templ.Component {
|
func Breadcrumbs() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -69,6 +72,9 @@ func Breadcrumbs() templ.Component {
|
|||||||
func breadcrumbItem(title string, active bool) templ.Component {
|
func breadcrumbItem(title string, active bool) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -128,6 +134,9 @@ func breadcrumbItem(title string, active bool) templ.Component {
|
|||||||
func breadcrumbIcon() templ.Component {
|
func breadcrumbIcon() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -87,6 +87,9 @@ func Button(opts ...ButtonOpt) templ.Component {
|
|||||||
func renderButton(attrs templ.Attributes) templ.Component {
|
func renderButton(attrs templ.Attributes) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -129,6 +132,9 @@ func renderButton(attrs templ.Attributes) templ.Component {
|
|||||||
func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component {
|
func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -223,6 +229,9 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component {
|
|||||||
func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component {
|
func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -15,6 +15,9 @@ func Card(id string, size Size) templ.Component {
|
|||||||
func renderCard(id string, attrs templ.Attributes) templ.Component {
|
func renderCard(id string, attrs templ.Attributes) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -70,6 +73,9 @@ func renderCard(id string, attrs templ.Attributes) templ.Component {
|
|||||||
func ProfileCard() templ.Component {
|
func ProfileCard() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -27,6 +27,9 @@ func Text(content string) templ.Component {
|
|||||||
func renderText(level int, text string) templ.Component {
|
func renderText(level int, text string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -123,6 +126,9 @@ func renderText(level int, text string) templ.Component {
|
|||||||
func renderLink(attrs templ.Attributes, text string) templ.Component {
|
func renderLink(attrs templ.Attributes, text string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -170,6 +176,9 @@ func renderLink(attrs templ.Attributes, text string) templ.Component {
|
|||||||
func renderStrong(attrs templ.Attributes, text string) templ.Component {
|
func renderStrong(attrs templ.Attributes, text string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -217,6 +226,9 @@ func renderStrong(attrs templ.Attributes, text string) templ.Component {
|
|||||||
func renderEmphasis(attrs templ.Attributes, text string) templ.Component {
|
func renderEmphasis(attrs templ.Attributes, text string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -264,6 +276,9 @@ func renderEmphasis(attrs templ.Attributes, text string) templ.Component {
|
|||||||
func renderCode(attrs templ.Attributes, text string) templ.Component {
|
func renderCode(attrs templ.Attributes, text string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -11,6 +11,9 @@ import templruntime "github.com/a-h/templ/runtime"
|
|||||||
func Layout(title string) templ.Component {
|
func Layout(title string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -66,6 +69,9 @@ func Layout(title string) templ.Component {
|
|||||||
func Spacer() templ.Component {
|
func Spacer() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -92,6 +98,9 @@ func Spacer() templ.Component {
|
|||||||
func ServiceWorker(path string) templ.Component {
|
func ServiceWorker(path string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -118,6 +127,9 @@ func ServiceWorker(path string) templ.Component {
|
|||||||
func defaultStyles() templ.Component {
|
func defaultStyles() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -144,6 +156,9 @@ func defaultStyles() templ.Component {
|
|||||||
func Rows() templ.Component {
|
func Rows() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -178,6 +193,9 @@ func Rows() templ.Component {
|
|||||||
func Columns() templ.Component {
|
func Columns() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -24,6 +24,9 @@ func (v Icons) Render() templ.Component {
|
|||||||
func renderIconVariant(v Icons) templ.Component {
|
func renderIconVariant(v Icons) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -72,6 +75,9 @@ func renderIconVariant(v Icons) templ.Component {
|
|||||||
func SonrIcon() templ.Component {
|
func SonrIcon() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -19,6 +19,9 @@ const (
|
|||||||
func TextInput(state InputState, label string, placeholder string) templ.Component {
|
func TextInput(state InputState, label string, placeholder string) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -11,6 +11,9 @@ import templruntime "github.com/a-h/templ/runtime"
|
|||||||
func RadioGroup() templ.Component {
|
func RadioGroup() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package elements
|
package elements
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -11,6 +11,9 @@ import templruntime "github.com/a-h/templ/runtime"
|
|||||||
func Tabs() templ.Component {
|
func Tabs() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -45,6 +48,9 @@ func Tabs() templ.Component {
|
|||||||
func Table() templ.Component {
|
func Table() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package forms
|
package forms
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -13,6 +13,9 @@ import "github.com/labstack/echo/v4"
|
|||||||
func BasicInfo(c echo.Context, state FormState) templ.Component {
|
func BasicInfo(c echo.Context, state FormState) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -42,6 +45,9 @@ func BasicInfo(c echo.Context, state FormState) templ.Component {
|
|||||||
func CreateCredentials(state FormState) templ.Component {
|
func CreateCredentials(state FormState) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -64,6 +70,9 @@ func CreateCredentials(state FormState) templ.Component {
|
|||||||
func PrivacyTerms(state FormState) templ.Component {
|
func PrivacyTerms(state FormState) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package views
|
package views
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -20,6 +20,9 @@ func HomeView(c echo.Context) error {
|
|||||||
func renderHomeView() templ.Component {
|
func renderHomeView() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package views
|
package views
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -20,6 +20,9 @@ func LoginView(c echo.Context) error {
|
|||||||
func renderLoginView() templ.Component {
|
func renderLoginView() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package views
|
package views
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -20,6 +20,9 @@ func AuthorizeView(c echo.Context) error {
|
|||||||
func renderAuthorizeView() templ.Component {
|
func renderAuthorizeView() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package views
|
package views
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -20,6 +20,9 @@ func ProfileView(c echo.Context) error {
|
|||||||
func renderProfileView() templ.Component {
|
func renderProfileView() templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
// Code generated by templ - DO NOT EDIT.
|
||||||
|
|
||||||
// templ: version: v0.2.771
|
// templ: version: v0.2.778
|
||||||
package views
|
package views
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
||||||
@ -21,6 +21,9 @@ func RegisterView(c echo.Context) error {
|
|||||||
func renderRegisterView(c echo.Context) templ.Component {
|
func renderRegisterView(c echo.Context) templ.Component {
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
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
|
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)
|
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
||||||
if !templ_7745c5c3_IsBuffer {
|
if !templ_7745c5c3_IsBuffer {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
20
internal/orm/Account.pkl.go
Normal file
20
internal/orm/Account.pkl.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Account struct {
|
||||||
|
Id string `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Name string `pkl:"name" json:"name,omitempty"`
|
||||||
|
|
||||||
|
Address any `pkl:"address" json:"address,omitempty"`
|
||||||
|
|
||||||
|
PublicKey string `pkl:"publicKey" json:"publicKey,omitempty"`
|
||||||
|
|
||||||
|
ChainCode uint `pkl:"chainCode" json:"chainCode,omitempty"`
|
||||||
|
|
||||||
|
Index int `pkl:"index" json:"index,omitempty"`
|
||||||
|
|
||||||
|
Controller string `pkl:"controller" json:"controller,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
}
|
16
internal/orm/Asset.pkl.go
Normal file
16
internal/orm/Asset.pkl.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Asset struct {
|
||||||
|
Id string `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Name string `pkl:"name" json:"name,omitempty"`
|
||||||
|
|
||||||
|
Symbol string `pkl:"symbol" json:"symbol,omitempty"`
|
||||||
|
|
||||||
|
Decimals int `pkl:"decimals" json:"decimals,omitempty"`
|
||||||
|
|
||||||
|
ChainCode uint `pkl:"chainCode" json:"chainCode,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
}
|
14
internal/orm/Chain.pkl.go
Normal file
14
internal/orm/Chain.pkl.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Chain struct {
|
||||||
|
Id string `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Name string `pkl:"name" json:"name,omitempty"`
|
||||||
|
|
||||||
|
NetworkId string `pkl:"networkId" json:"networkId,omitempty"`
|
||||||
|
|
||||||
|
ChainCode uint `pkl:"chainCode" json:"chainCode,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
}
|
40
internal/orm/Credential.pkl.go
Normal file
40
internal/orm/Credential.pkl.go
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Credential struct {
|
||||||
|
Id string `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Subject string `pkl:"subject" json:"subject,omitempty"`
|
||||||
|
|
||||||
|
Controller string `pkl:"controller" json:"controller,omitempty"`
|
||||||
|
|
||||||
|
AttestationType string `pkl:"attestationType" json:"attestationType,omitempty"`
|
||||||
|
|
||||||
|
Origin string `pkl:"origin" json:"origin,omitempty"`
|
||||||
|
|
||||||
|
Label *string `pkl:"label" json:"label,omitempty"`
|
||||||
|
|
||||||
|
DeviceId *string `pkl:"deviceId" json:"deviceId,omitempty"`
|
||||||
|
|
||||||
|
CredentialId string `pkl:"credentialId" json:"credentialId,omitempty"`
|
||||||
|
|
||||||
|
PublicKey string `pkl:"publicKey" json:"publicKey,omitempty"`
|
||||||
|
|
||||||
|
Transport []string `pkl:"transport" json:"transport,omitempty"`
|
||||||
|
|
||||||
|
SignCount uint `pkl:"signCount" json:"signCount,omitempty"`
|
||||||
|
|
||||||
|
UserPresent bool `pkl:"userPresent" json:"userPresent,omitempty"`
|
||||||
|
|
||||||
|
UserVerified bool `pkl:"userVerified" json:"userVerified,omitempty"`
|
||||||
|
|
||||||
|
BackupEligible bool `pkl:"backupEligible" json:"backupEligible,omitempty"`
|
||||||
|
|
||||||
|
BackupState bool `pkl:"backupState" json:"backupState,omitempty"`
|
||||||
|
|
||||||
|
CloneWarning bool `pkl:"cloneWarning" json:"cloneWarning,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
|
||||||
|
UpdatedAt *string `pkl:"updatedAt" json:"updatedAt,omitempty"`
|
||||||
|
}
|
20
internal/orm/Grant.pkl.go
Normal file
20
internal/orm/Grant.pkl.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Grant struct {
|
||||||
|
Id uint `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Subject string `pkl:"subject" json:"subject,omitempty"`
|
||||||
|
|
||||||
|
Controller string `pkl:"controller" json:"controller,omitempty"`
|
||||||
|
|
||||||
|
Origin string `pkl:"origin" json:"origin,omitempty"`
|
||||||
|
|
||||||
|
Token string `pkl:"token" json:"token,omitempty"`
|
||||||
|
|
||||||
|
Scopes []string `pkl:"scopes" json:"scopes,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
|
||||||
|
UpdatedAt *string `pkl:"updatedAt" json:"updatedAt,omitempty"`
|
||||||
|
}
|
16
internal/orm/JWK.pkl.go
Normal file
16
internal/orm/JWK.pkl.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type JWK struct {
|
||||||
|
Kty string `pkl:"kty" json:"kty,omitempty"`
|
||||||
|
|
||||||
|
Crv string `pkl:"crv" json:"crv,omitempty"`
|
||||||
|
|
||||||
|
X string `pkl:"x" json:"x,omitempty"`
|
||||||
|
|
||||||
|
Y string `pkl:"y" json:"y,omitempty"`
|
||||||
|
|
||||||
|
N string `pkl:"n" json:"n,omitempty"`
|
||||||
|
|
||||||
|
E string `pkl:"e" json:"e,omitempty"`
|
||||||
|
}
|
14
internal/orm/Keyshare.pkl.go
Normal file
14
internal/orm/Keyshare.pkl.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Keyshare struct {
|
||||||
|
Id string `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Data string `pkl:"data" json:"data,omitempty"`
|
||||||
|
|
||||||
|
Role int `pkl:"role" json:"role,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
|
||||||
|
LastRefreshed *string `pkl:"lastRefreshed" json:"lastRefreshed,omitempty"`
|
||||||
|
}
|
39
internal/orm/Orm.pkl.go
Normal file
39
internal/orm/Orm.pkl.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/apple/pkl-go/pkl"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Orm struct {
|
||||||
|
DbName string `pkl:"db_name"`
|
||||||
|
|
||||||
|
DbVersion int `pkl:"db_version"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadFromPath loads the pkl module at the given path and evaluates it into a Orm
|
||||||
|
func LoadFromPath(ctx context.Context, path string) (ret *Orm, err error) {
|
||||||
|
evaluator, err := pkl.NewEvaluator(ctx, pkl.PreconfiguredOptions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
cerr := evaluator.Close()
|
||||||
|
if err == nil {
|
||||||
|
err = cerr
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
ret, err = Load(ctx, evaluator, pkl.FileSource(path))
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Orm
|
||||||
|
func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Orm, error) {
|
||||||
|
var ret Orm
|
||||||
|
if err := evaluator.EvaluateModule(ctx, source, &ret); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &ret, nil
|
||||||
|
}
|
20
internal/orm/Profile.pkl.go
Normal file
20
internal/orm/Profile.pkl.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
type Profile struct {
|
||||||
|
Id string `pkl:"id" json:"id,omitempty" query:"id"`
|
||||||
|
|
||||||
|
Subject string `pkl:"subject" json:"subject,omitempty"`
|
||||||
|
|
||||||
|
Controller string `pkl:"controller" json:"controller,omitempty"`
|
||||||
|
|
||||||
|
OriginUri *string `pkl:"originUri" json:"originUri,omitempty"`
|
||||||
|
|
||||||
|
PublicMetadata *string `pkl:"publicMetadata" json:"publicMetadata,omitempty"`
|
||||||
|
|
||||||
|
PrivateMetadata *string `pkl:"privateMetadata" json:"privateMetadata,omitempty"`
|
||||||
|
|
||||||
|
CreatedAt *string `pkl:"createdAt" json:"createdAt,omitempty"`
|
||||||
|
|
||||||
|
UpdatedAt *string `pkl:"updatedAt" json:"updatedAt,omitempty"`
|
||||||
|
}
|
26
internal/orm/PublicKey.pkl.go
Normal file
26
internal/orm/PublicKey.pkl.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package orm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/onsonr/sonr/internal/orm/keyalgorithm"
|
||||||
|
"github.com/onsonr/sonr/internal/orm/keycurve"
|
||||||
|
"github.com/onsonr/sonr/internal/orm/keyencoding"
|
||||||
|
"github.com/onsonr/sonr/internal/orm/keyrole"
|
||||||
|
"github.com/onsonr/sonr/internal/orm/keytype"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PublicKey struct {
|
||||||
|
Role keyrole.KeyRole `pkl:"role" json:"role,omitempty" query:"role"`
|
||||||
|
|
||||||
|
Algorithm keyalgorithm.KeyAlgorithm `pkl:"algorithm"`
|
||||||
|
|
||||||
|
Encoding keyencoding.KeyEncoding `pkl:"encoding"`
|
||||||
|
|
||||||
|
Curve keycurve.KeyCurve `pkl:"curve"`
|
||||||
|
|
||||||
|
KeyType keytype.KeyType `pkl:"key_type"`
|
||||||
|
|
||||||
|
Raw string `pkl:"raw"`
|
||||||
|
|
||||||
|
Jwk *JWK `pkl:"jwk"`
|
||||||
|
}
|
46
internal/orm/assettype/AssetType.pkl.go
Normal file
46
internal/orm/assettype/AssetType.pkl.go
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package assettype
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type AssetType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
Native AssetType = "native"
|
||||||
|
Wrapped AssetType = "wrapped"
|
||||||
|
Staking AssetType = "staking"
|
||||||
|
Pool AssetType = "pool"
|
||||||
|
Ibc AssetType = "ibc"
|
||||||
|
Cw20 AssetType = "cw20"
|
||||||
|
)
|
||||||
|
|
||||||
|
// String returns the string representation of AssetType
|
||||||
|
func (rcv AssetType) String() string {
|
||||||
|
return string(rcv)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ encoding.BinaryUnmarshaler = new(AssetType)
|
||||||
|
|
||||||
|
// UnmarshalBinary implements encoding.BinaryUnmarshaler for AssetType.
|
||||||
|
func (rcv *AssetType) UnmarshalBinary(data []byte) error {
|
||||||
|
switch str := string(data); str {
|
||||||
|
case "native":
|
||||||
|
*rcv = Native
|
||||||
|
case "wrapped":
|
||||||
|
*rcv = Wrapped
|
||||||
|
case "staking":
|
||||||
|
*rcv = Staking
|
||||||
|
case "pool":
|
||||||
|
*rcv = Pool
|
||||||
|
case "ibc":
|
||||||
|
*rcv = Ibc
|
||||||
|
case "cw20":
|
||||||
|
*rcv = Cw20
|
||||||
|
default:
|
||||||
|
return fmt.Errorf(`illegal: "%s" is not a valid AssetType`, str)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
116
internal/orm/bip44.go
Normal file
116
internal/orm/bip44.go
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
package orm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha512"
|
||||||
|
"encoding/binary"
|
||||||
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/btcec/v2"
|
||||||
|
"github.com/onsonr/sonr/internal/orm/didmethod"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ChainCode uint32
|
||||||
|
|
||||||
|
func GetChainCode(m didmethod.DIDMethod) ChainCode {
|
||||||
|
switch m {
|
||||||
|
case didmethod.Bitcoin:
|
||||||
|
return 0 // 0
|
||||||
|
case didmethod.Ethereum:
|
||||||
|
return 64 // 60
|
||||||
|
case didmethod.Ibc:
|
||||||
|
return 118 // 118
|
||||||
|
case didmethod.Sonr:
|
||||||
|
return 703 // 703
|
||||||
|
default:
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func FormatAddress(pubKey *PublicKey, m didmethod.DIDMethod) (string, error) {
|
||||||
|
hexPubKey, err := hex.DecodeString(pubKey.Raw)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// switch m {
|
||||||
|
// case didmethod.Bitcoin:
|
||||||
|
// return bech32.Encode("bc", pubKey.Bytes())
|
||||||
|
//
|
||||||
|
// case didmethod.Ethereum:
|
||||||
|
// epk, err := pubKey.ECDSA()
|
||||||
|
// if err != nil {
|
||||||
|
// return "", err
|
||||||
|
// }
|
||||||
|
// return ComputeEthAddress(*epk), nil
|
||||||
|
//
|
||||||
|
// case didmethod.Sonr:
|
||||||
|
// return bech32.Encode("idx", hexPubKey)
|
||||||
|
//
|
||||||
|
// case didmethod.Ibc:
|
||||||
|
// return bech32.Encode("cosmos", hexPubKey)
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
return string(hexPubKey), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputeAccountPublicKey computes the public key of a child key given the extended public key, chain code, and index.
|
||||||
|
func ComputeBip32AccountPublicKey(extPubKey PublicKey, chainCode ChainCode, index int) (*PublicKey, error) {
|
||||||
|
// Check if the index is a hardened child key
|
||||||
|
if chainCode&0x80000000 != 0 && index < 0 {
|
||||||
|
return nil, errors.New("invalid index")
|
||||||
|
}
|
||||||
|
|
||||||
|
hexPubKey, err := hex.DecodeString(extPubKey.Raw)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize the public key
|
||||||
|
pubKey, err := btcec.ParsePubKey(hexPubKey)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
pubKeyBytes := pubKey.SerializeCompressed()
|
||||||
|
|
||||||
|
// Serialize the index
|
||||||
|
indexBytes := make([]byte, 4)
|
||||||
|
binary.BigEndian.PutUint32(indexBytes, uint32(index))
|
||||||
|
|
||||||
|
// Compute the HMAC-SHA512
|
||||||
|
mac := hmac.New(sha512.New, []byte{byte(chainCode)})
|
||||||
|
mac.Write(pubKeyBytes)
|
||||||
|
mac.Write(indexBytes)
|
||||||
|
I := mac.Sum(nil)
|
||||||
|
|
||||||
|
// Split I into two 32-byte sequences
|
||||||
|
IL := I[:32]
|
||||||
|
|
||||||
|
// Convert IL to a big integer
|
||||||
|
ilNum := new(big.Int).SetBytes(IL)
|
||||||
|
|
||||||
|
// Check if parse256(IL) >= n
|
||||||
|
curve := btcec.S256()
|
||||||
|
if ilNum.Cmp(curve.N) >= 0 {
|
||||||
|
return nil, errors.New("invalid child key")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compute the child public key
|
||||||
|
ilx, ily := curve.ScalarBaseMult(IL)
|
||||||
|
childX, childY := curve.Add(ilx, ily, pubKey.X(), pubKey.Y())
|
||||||
|
lx := newBigIntFieldVal(childX)
|
||||||
|
ly := newBigIntFieldVal(childY)
|
||||||
|
|
||||||
|
// Create the child public key
|
||||||
|
_ = btcec.NewPublicKey(lx, ly)
|
||||||
|
return &PublicKey{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// newBigIntFieldVal creates a new field value from a big integer.
|
||||||
|
func newBigIntFieldVal(val *big.Int) *btcec.FieldVal {
|
||||||
|
lx := new(btcec.FieldVal)
|
||||||
|
lx.SetByteSlice(val.Bytes())
|
||||||
|
return lx
|
||||||
|
}
|
10
internal/orm/browser/AuthenticatorSelectionCriteria.pkl.go
Normal file
10
internal/orm/browser/AuthenticatorSelectionCriteria.pkl.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type AuthenticatorSelectionCriteria struct {
|
||||||
|
AuthenticatorAttachment string `pkl:"authenticatorAttachment"`
|
||||||
|
|
||||||
|
RequireResidentKey bool `pkl:"requireResidentKey"`
|
||||||
|
|
||||||
|
UserVerification string `pkl:"userVerification"`
|
||||||
|
}
|
36
internal/orm/browser/Browser.pkl.go
Normal file
36
internal/orm/browser/Browser.pkl.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/apple/pkl-go/pkl"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Browser struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// LoadFromPath loads the pkl module at the given path and evaluates it into a Browser
|
||||||
|
func LoadFromPath(ctx context.Context, path string) (ret *Browser, err error) {
|
||||||
|
evaluator, err := pkl.NewEvaluator(ctx, pkl.PreconfiguredOptions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
cerr := evaluator.Close()
|
||||||
|
if err == nil {
|
||||||
|
err = cerr
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
ret, err = Load(ctx, evaluator, pkl.FileSource(path))
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load loads the pkl module at the given source and evaluates it with the given evaluator into a Browser
|
||||||
|
func Load(ctx context.Context, evaluator pkl.Evaluator, source *pkl.ModuleSource) (*Browser, error) {
|
||||||
|
var ret Browser
|
||||||
|
if err := evaluator.EvaluateModule(ctx, source, &ret); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &ret, nil
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type PublicKeyCredentialCreationOptions struct {
|
||||||
|
Rp *RpEntity `pkl:"rp"`
|
||||||
|
|
||||||
|
User *UserEntity `pkl:"user"`
|
||||||
|
|
||||||
|
Challenge string `pkl:"challenge"`
|
||||||
|
|
||||||
|
PubKeyCredParams []*PublicKeyCredentialParameters `pkl:"pubKeyCredParams"`
|
||||||
|
|
||||||
|
Timeout int `pkl:"timeout"`
|
||||||
|
|
||||||
|
ExcludeCredentials []*PublicKeyCredentialDescriptor `pkl:"excludeCredentials"`
|
||||||
|
|
||||||
|
AuthenticatorSelection *AuthenticatorSelectionCriteria `pkl:"authenticatorSelection"`
|
||||||
|
|
||||||
|
Attestation string `pkl:"attestation"`
|
||||||
|
|
||||||
|
Extensions []*PublicKeyCredentialParameters `pkl:"extensions"`
|
||||||
|
}
|
10
internal/orm/browser/PublicKeyCredentialDescriptor.pkl.go
Normal file
10
internal/orm/browser/PublicKeyCredentialDescriptor.pkl.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type PublicKeyCredentialDescriptor struct {
|
||||||
|
Id string `pkl:"id"`
|
||||||
|
|
||||||
|
Transports []string `pkl:"transports"`
|
||||||
|
|
||||||
|
Type string `pkl:"type"`
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type PublicKeyCredentialParameters struct {
|
||||||
|
Type string `pkl:"type"`
|
||||||
|
|
||||||
|
Alg *int `pkl:"alg"`
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type PublicKeyCredentialRequestOptions struct {
|
||||||
|
Challenge string `pkl:"challenge"`
|
||||||
|
|
||||||
|
Timeout int `pkl:"timeout"`
|
||||||
|
|
||||||
|
RpId string `pkl:"rpId"`
|
||||||
|
|
||||||
|
AllowCredentials []*PublicKeyCredentialDescriptor `pkl:"allowCredentials"`
|
||||||
|
|
||||||
|
UserVerification string `pkl:"userVerification"`
|
||||||
|
|
||||||
|
Extensions []*PublicKeyCredentialParameters `pkl:"extensions"`
|
||||||
|
}
|
10
internal/orm/browser/RpEntity.pkl.go
Normal file
10
internal/orm/browser/RpEntity.pkl.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type RpEntity struct {
|
||||||
|
Id string `pkl:"id"`
|
||||||
|
|
||||||
|
Name *string `pkl:"name"`
|
||||||
|
|
||||||
|
Icon *string `pkl:"icon"`
|
||||||
|
}
|
16
internal/orm/browser/SWT.pkl.go
Normal file
16
internal/orm/browser/SWT.pkl.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type SWT struct {
|
||||||
|
Origin string `pkl:"origin"`
|
||||||
|
|
||||||
|
Location string `pkl:"location"`
|
||||||
|
|
||||||
|
Identifier string `pkl:"identifier"`
|
||||||
|
|
||||||
|
Scopes []string `pkl:"scopes"`
|
||||||
|
|
||||||
|
Properties map[string]string `pkl:"properties"`
|
||||||
|
|
||||||
|
ExpiryBlock int `pkl:"expiryBlock"`
|
||||||
|
}
|
10
internal/orm/browser/UserEntity.pkl.go
Normal file
10
internal/orm/browser/UserEntity.pkl.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
type UserEntity struct {
|
||||||
|
Id string `pkl:"id"`
|
||||||
|
|
||||||
|
DisplayName *string `pkl:"displayName"`
|
||||||
|
|
||||||
|
Name *string `pkl:"name"`
|
||||||
|
}
|
16
internal/orm/browser/init.pkl.go
Normal file
16
internal/orm/browser/init.pkl.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// Code generated from Pkl module `browser`. DO NOT EDIT.
|
||||||
|
package browser
|
||||||
|
|
||||||
|
import "github.com/apple/pkl-go/pkl"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
pkl.RegisterMapping("browser", Browser{})
|
||||||
|
pkl.RegisterMapping("browser#PublicKeyCredentialRequestOptions", PublicKeyCredentialRequestOptions{})
|
||||||
|
pkl.RegisterMapping("browser#PublicKeyCredentialDescriptor", PublicKeyCredentialDescriptor{})
|
||||||
|
pkl.RegisterMapping("browser#PublicKeyCredentialParameters", PublicKeyCredentialParameters{})
|
||||||
|
pkl.RegisterMapping("browser#AuthenticatorSelectionCriteria", AuthenticatorSelectionCriteria{})
|
||||||
|
pkl.RegisterMapping("browser#PublicKeyCredentialCreationOptions", PublicKeyCredentialCreationOptions{})
|
||||||
|
pkl.RegisterMapping("browser#RpEntity", RpEntity{})
|
||||||
|
pkl.RegisterMapping("browser#UserEntity", UserEntity{})
|
||||||
|
pkl.RegisterMapping("browser#SWT", SWT{})
|
||||||
|
}
|
334
internal/orm/constants.go
Normal file
334
internal/orm/constants.go
Normal file
@ -0,0 +1,334 @@
|
|||||||
|
package orm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/onsonr/sonr/x/did/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
AuthenticatorAttachment string
|
||||||
|
AuthenticatorTransport string
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Platform represents a platform authenticator is attached using a client device-specific transport, called
|
||||||
|
// platform attachment, and is usually not removable from the client device. A public key credential bound to a
|
||||||
|
// platform authenticator is called a platform credential.
|
||||||
|
Platform AuthenticatorAttachment = "platform"
|
||||||
|
|
||||||
|
// CrossPlatform represents a roaming authenticator is attached using cross-platform transports, called
|
||||||
|
// cross-platform attachment. Authenticators of this class are removable from, and can "roam" among, client devices.
|
||||||
|
// A public key credential bound to a roaming authenticator is called a roaming credential.
|
||||||
|
CrossPlatform AuthenticatorAttachment = "cross-platform"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ParseAuthenticatorAttachment(s string) AuthenticatorAttachment {
|
||||||
|
switch s {
|
||||||
|
case "platform":
|
||||||
|
return Platform
|
||||||
|
default:
|
||||||
|
return CrossPlatform
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
// USB indicates the respective authenticator can be contacted over removable USB.
|
||||||
|
USB AuthenticatorTransport = "usb"
|
||||||
|
|
||||||
|
// NFC indicates the respective authenticator can be contacted over Near Field Communication (NFC).
|
||||||
|
NFC AuthenticatorTransport = "nfc"
|
||||||
|
|
||||||
|
// BLE indicates the respective authenticator can be contacted over Bluetooth Smart (Bluetooth Low Energy / BLE).
|
||||||
|
BLE AuthenticatorTransport = "ble"
|
||||||
|
|
||||||
|
// SmartCard indicates the respective authenticator can be contacted over ISO/IEC 7816 smart card with contacts.
|
||||||
|
//
|
||||||
|
// WebAuthn Level 3.
|
||||||
|
SmartCard AuthenticatorTransport = "smart-card"
|
||||||
|
|
||||||
|
// Hybrid indicates the respective authenticator can be contacted using a combination of (often separate)
|
||||||
|
// data-transport and proximity mechanisms. This supports, for example, authentication on a desktop computer using
|
||||||
|
// a smartphone.
|
||||||
|
//
|
||||||
|
// WebAuthn Level 3.
|
||||||
|
Hybrid AuthenticatorTransport = "hybrid"
|
||||||
|
|
||||||
|
// Internal indicates the respective authenticator is contacted using a client device-specific transport, i.e., it
|
||||||
|
// is a platform authenticator. These authenticators are not removable from the client device.
|
||||||
|
Internal AuthenticatorTransport = "internal"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ParseAuthenticatorTransport(s string) AuthenticatorTransport {
|
||||||
|
switch s {
|
||||||
|
case "usb":
|
||||||
|
return USB
|
||||||
|
case "nfc":
|
||||||
|
return NFC
|
||||||
|
case "ble":
|
||||||
|
return BLE
|
||||||
|
case "smart-card":
|
||||||
|
return SmartCard
|
||||||
|
case "hybrid":
|
||||||
|
return Hybrid
|
||||||
|
default:
|
||||||
|
return Internal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type AuthenticatorFlags byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
// FlagUserPresent Bit 00000001 in the byte sequence. Tells us if user is present. Also referred to as the UP flag.
|
||||||
|
FlagUserPresent AuthenticatorFlags = 1 << iota // Referred to as UP
|
||||||
|
|
||||||
|
// FlagRFU1 is a reserved for future use flag.
|
||||||
|
FlagRFU1
|
||||||
|
|
||||||
|
// FlagUserVerified Bit 00000100 in the byte sequence. Tells us if user is verified
|
||||||
|
// by the authenticator using a biometric or PIN. Also referred to as the UV flag.
|
||||||
|
FlagUserVerified
|
||||||
|
|
||||||
|
// FlagBackupEligible Bit 00001000 in the byte sequence. Tells us if a backup is eligible for device. Also referred
|
||||||
|
// to as the BE flag.
|
||||||
|
FlagBackupEligible // Referred to as BE
|
||||||
|
|
||||||
|
// FlagBackupState Bit 00010000 in the byte sequence. Tells us if a backup state for device. Also referred to as the
|
||||||
|
// BS flag.
|
||||||
|
FlagBackupState
|
||||||
|
|
||||||
|
// FlagRFU2 is a reserved for future use flag.
|
||||||
|
FlagRFU2
|
||||||
|
|
||||||
|
// FlagAttestedCredentialData Bit 01000000 in the byte sequence. Indicates whether
|
||||||
|
// the authenticator added attested credential data. Also referred to as the AT flag.
|
||||||
|
FlagAttestedCredentialData
|
||||||
|
|
||||||
|
// FlagHasExtensions Bit 10000000 in the byte sequence. Indicates if the authenticator data has extensions. Also
|
||||||
|
// referred to as the ED flag.
|
||||||
|
FlagHasExtensions
|
||||||
|
)
|
||||||
|
|
||||||
|
type AttestationFormat string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AttestationFormatPacked is the "packed" attestation statement format is a WebAuthn-optimized format for
|
||||||
|
// attestation. It uses a very compact but still extensible encoding method. This format is implementable by
|
||||||
|
// authenticators with limited resources (e.g., secure elements).
|
||||||
|
AttestationFormatPacked AttestationFormat = "packed"
|
||||||
|
|
||||||
|
// AttestationFormatTPM is the TPM attestation statement format returns an attestation statement in the same format
|
||||||
|
// as the packed attestation statement format, although the rawData and signature fields are computed differently.
|
||||||
|
AttestationFormatTPM AttestationFormat = "tpm"
|
||||||
|
|
||||||
|
// AttestationFormatAndroidKey is the attestation statement format for platform authenticators on versions "N", and
|
||||||
|
// later, which may provide this proprietary "hardware attestation" statement.
|
||||||
|
AttestationFormatAndroidKey AttestationFormat = "android-key"
|
||||||
|
|
||||||
|
// AttestationFormatAndroidSafetyNet is the attestation statement format that Android-based platform authenticators
|
||||||
|
// MAY produce an attestation statement based on the Android SafetyNet API.
|
||||||
|
AttestationFormatAndroidSafetyNet AttestationFormat = "android-safetynet"
|
||||||
|
|
||||||
|
// AttestationFormatFIDOUniversalSecondFactor is the attestation statement format that is used with FIDO U2F
|
||||||
|
// authenticators.
|
||||||
|
AttestationFormatFIDOUniversalSecondFactor AttestationFormat = "fido-u2f"
|
||||||
|
|
||||||
|
// AttestationFormatApple is the attestation statement format that is used with Apple devices' platform
|
||||||
|
// authenticators.
|
||||||
|
AttestationFormatApple AttestationFormat = "apple"
|
||||||
|
|
||||||
|
// AttestationFormatNone is the attestation statement format that is used to replace any authenticator-provided
|
||||||
|
// attestation statement when a WebAuthn Relying Party indicates it does not wish to receive attestation information.
|
||||||
|
AttestationFormatNone AttestationFormat = "none"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExtractAttestationFormats(p *types.Params) []AttestationFormat {
|
||||||
|
var formats []AttestationFormat
|
||||||
|
for _, v := range p.AttestationFormats {
|
||||||
|
formats = append(formats, parseAttestationFormat(v))
|
||||||
|
}
|
||||||
|
return formats
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseAttestationFormat(s string) AttestationFormat {
|
||||||
|
switch s {
|
||||||
|
case "packed":
|
||||||
|
return AttestationFormatPacked
|
||||||
|
case "tpm":
|
||||||
|
return AttestationFormatTPM
|
||||||
|
case "android-key":
|
||||||
|
return AttestationFormatAndroidKey
|
||||||
|
case "android-safetynet":
|
||||||
|
return AttestationFormatAndroidSafetyNet
|
||||||
|
case "fido-u2f":
|
||||||
|
return AttestationFormatFIDOUniversalSecondFactor
|
||||||
|
case "apple":
|
||||||
|
return AttestationFormatApple
|
||||||
|
case "none":
|
||||||
|
return AttestationFormatNone
|
||||||
|
default:
|
||||||
|
return AttestationFormatPacked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type CredentialType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
CredentialTypePublicKeyCredential CredentialType = "public-key"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConveyancePreference string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// PreferNoAttestation is a ConveyancePreference value.
|
||||||
|
//
|
||||||
|
// This value indicates that the Relying Party is not interested in authenticator attestation. For example, in order
|
||||||
|
// to potentially avoid having to obtain user consent to relay identifying information to the Relying Party, or to
|
||||||
|
// save a round trip to an Attestation CA or Anonymization CA.
|
||||||
|
//
|
||||||
|
// This is the default value.
|
||||||
|
//
|
||||||
|
// Specification: §5.4.7. Attestation Conveyance Preference Enumeration (https://www.w3.org/TR/webauthn/#dom-attestationconveyancepreference-none)
|
||||||
|
PreferNoAttestation ConveyancePreference = "none"
|
||||||
|
|
||||||
|
// PreferIndirectAttestation is a ConveyancePreference value.
|
||||||
|
//
|
||||||
|
// This value indicates that the Relying Party prefers an attestation conveyance yielding verifiable attestation
|
||||||
|
// statements, but allows the client to decide how to obtain such attestation statements. The client MAY replace the
|
||||||
|
// authenticator-generated attestation statements with attestation statements generated by an Anonymization CA, in
|
||||||
|
// order to protect the user’s privacy, or to assist Relying Parties with attestation verification in a
|
||||||
|
// heterogeneous ecosystem.
|
||||||
|
//
|
||||||
|
// Note: There is no guarantee that the Relying Party will obtain a verifiable attestation statement in this case.
|
||||||
|
// For example, in the case that the authenticator employs self attestation.
|
||||||
|
//
|
||||||
|
// Specification: §5.4.7. Attestation Conveyance Preference Enumeration (https://www.w3.org/TR/webauthn/#dom-attestationconveyancepreference-indirect)
|
||||||
|
PreferIndirectAttestation ConveyancePreference = "indirect"
|
||||||
|
|
||||||
|
// PreferDirectAttestation is a ConveyancePreference value.
|
||||||
|
//
|
||||||
|
// This value indicates that the Relying Party wants to receive the attestation statement as generated by the
|
||||||
|
// authenticator.
|
||||||
|
//
|
||||||
|
// Specification: §5.4.7. Attestation Conveyance Preference Enumeration (https://www.w3.org/TR/webauthn/#dom-attestationconveyancepreference-direct)
|
||||||
|
PreferDirectAttestation ConveyancePreference = "direct"
|
||||||
|
|
||||||
|
// PreferEnterpriseAttestation is a ConveyancePreference value.
|
||||||
|
//
|
||||||
|
// This value indicates that the Relying Party wants to receive an attestation statement that may include uniquely
|
||||||
|
// identifying information. This is intended for controlled deployments within an enterprise where the organization
|
||||||
|
// wishes to tie registrations to specific authenticators. User agents MUST NOT provide such an attestation unless
|
||||||
|
// the user agent or authenticator configuration permits it for the requested RP ID.
|
||||||
|
//
|
||||||
|
// If permitted, the user agent SHOULD signal to the authenticator (at invocation time) that enterprise
|
||||||
|
// attestation is requested, and convey the resulting AAGUID and attestation statement, unaltered, to the Relying
|
||||||
|
// Party.
|
||||||
|
//
|
||||||
|
// Specification: §5.4.7. Attestation Conveyance Preference Enumeration (https://www.w3.org/TR/webauthn/#dom-attestationconveyancepreference-enterprise)
|
||||||
|
PreferEnterpriseAttestation ConveyancePreference = "enterprise"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ExtractConveyancePreference(p *types.Params) ConveyancePreference {
|
||||||
|
switch p.ConveyancePreference {
|
||||||
|
case "none":
|
||||||
|
return PreferNoAttestation
|
||||||
|
case "indirect":
|
||||||
|
return PreferIndirectAttestation
|
||||||
|
case "direct":
|
||||||
|
return PreferDirectAttestation
|
||||||
|
case "enterprise":
|
||||||
|
return PreferEnterpriseAttestation
|
||||||
|
default:
|
||||||
|
return PreferNoAttestation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type PublicKeyCredentialHints string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// PublicKeyCredentialHintSecurityKey is a PublicKeyCredentialHint that indicates that the Relying Party believes
|
||||||
|
// that users will satisfy this request with a physical security key. For example, an enterprise Relying Party may
|
||||||
|
// set this hint if they have issued security keys to their employees and will only accept those authenticators for
|
||||||
|
// registration and authentication.
|
||||||
|
//
|
||||||
|
// For compatibility with older user agents, when this hint is used in PublicKeyCredentialCreationOptions, the
|
||||||
|
// authenticatorAttachment SHOULD be set to cross-platform.
|
||||||
|
PublicKeyCredentialHintSecurityKey PublicKeyCredentialHints = "security-key"
|
||||||
|
|
||||||
|
// PublicKeyCredentialHintClientDevice is a PublicKeyCredentialHint that indicates that the Relying Party believes
|
||||||
|
// that users will satisfy this request with a platform authenticator attached to the client device.
|
||||||
|
//
|
||||||
|
// For compatibility with older user agents, when this hint is used in PublicKeyCredentialCreationOptions, the
|
||||||
|
// authenticatorAttachment SHOULD be set to platform.
|
||||||
|
PublicKeyCredentialHintClientDevice PublicKeyCredentialHints = "client-device"
|
||||||
|
|
||||||
|
// PublicKeyCredentialHintHybrid is a PublicKeyCredentialHint that indicates that the Relying Party believes that
|
||||||
|
// users will satisfy this request with general-purpose authenticators such as smartphones. For example, a consumer
|
||||||
|
// Relying Party may believe that only a small fraction of their customers possesses dedicated security keys. This
|
||||||
|
// option also implies that the local platform authenticator should not be promoted in the UI.
|
||||||
|
//
|
||||||
|
// For compatibility with older user agents, when this hint is used in PublicKeyCredentialCreationOptions, the
|
||||||
|
// authenticatorAttachment SHOULD be set to cross-platform.
|
||||||
|
PublicKeyCredentialHintHybrid PublicKeyCredentialHints = "hybrid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ParsePublicKeyCredentialHints(s string) PublicKeyCredentialHints {
|
||||||
|
switch s {
|
||||||
|
case "security-key":
|
||||||
|
return PublicKeyCredentialHintSecurityKey
|
||||||
|
case "client-device":
|
||||||
|
return PublicKeyCredentialHintClientDevice
|
||||||
|
case "hybrid":
|
||||||
|
return PublicKeyCredentialHintHybrid
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type AttestedCredentialData struct {
|
||||||
|
AAGUID []byte `json:"aaguid"`
|
||||||
|
CredentialID []byte `json:"credential_id"`
|
||||||
|
|
||||||
|
// The raw credential public key bytes received from the attestation data.
|
||||||
|
CredentialPublicKey []byte `json:"public_key"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResidentKeyRequirement string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ResidentKeyRequirementDiscouraged indicates the Relying Party prefers creating a server-side credential, but will
|
||||||
|
// accept a client-side discoverable credential. This is the default.
|
||||||
|
ResidentKeyRequirementDiscouraged ResidentKeyRequirement = "discouraged"
|
||||||
|
|
||||||
|
// ResidentKeyRequirementPreferred indicates to the client we would prefer a discoverable credential.
|
||||||
|
ResidentKeyRequirementPreferred ResidentKeyRequirement = "preferred"
|
||||||
|
|
||||||
|
// ResidentKeyRequirementRequired indicates the Relying Party requires a client-side discoverable credential, and is
|
||||||
|
// prepared to receive an error if a client-side discoverable credential cannot be created.
|
||||||
|
ResidentKeyRequirementRequired ResidentKeyRequirement = "required"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ParseResidentKeyRequirement(s string) ResidentKeyRequirement {
|
||||||
|
switch s {
|
||||||
|
case "discouraged":
|
||||||
|
return ResidentKeyRequirementDiscouraged
|
||||||
|
case "preferred":
|
||||||
|
return ResidentKeyRequirementPreferred
|
||||||
|
default:
|
||||||
|
return ResidentKeyRequirementRequired
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
AuthenticationExtensions map[string]any
|
||||||
|
UserVerificationRequirement string
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// VerificationRequired User verification is required to create/release a credential
|
||||||
|
VerificationRequired UserVerificationRequirement = "required"
|
||||||
|
|
||||||
|
// VerificationPreferred User verification is preferred to create/release a credential
|
||||||
|
VerificationPreferred UserVerificationRequirement = "preferred" // This is the default
|
||||||
|
|
||||||
|
// VerificationDiscouraged The authenticator should not verify the user for the credential
|
||||||
|
VerificationDiscouraged UserVerificationRequirement = "discouraged"
|
||||||
|
)
|
56
internal/orm/credential.go
Normal file
56
internal/orm/credential.go
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
package orm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
|
||||||
|
"github.com/go-webauthn/webauthn/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewCredential will return a credential pointer on successful validation of a registration response.
|
||||||
|
func NewCredential(c *protocol.ParsedCredentialCreationData, origin, handle string) *Credential {
|
||||||
|
return &Credential{
|
||||||
|
Subject: handle,
|
||||||
|
Origin: origin,
|
||||||
|
AttestationType: c.Response.AttestationObject.Format,
|
||||||
|
CredentialId: BytesToBase64(c.Response.AttestationObject.AuthData.AttData.CredentialID),
|
||||||
|
PublicKey: BytesToBase64(c.Response.AttestationObject.AuthData.AttData.CredentialPublicKey),
|
||||||
|
Transport: NormalizeTransports(c.Response.Transports),
|
||||||
|
SignCount: uint(c.Response.AttestationObject.AuthData.Counter),
|
||||||
|
UserPresent: c.Response.AttestationObject.AuthData.Flags.HasUserPresent(),
|
||||||
|
UserVerified: c.Response.AttestationObject.AuthData.Flags.HasUserVerified(),
|
||||||
|
BackupEligible: c.Response.AttestationObject.AuthData.Flags.HasBackupEligible(),
|
||||||
|
BackupState: c.Response.AttestationObject.AuthData.Flags.HasAttestedCredentialData(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func BytesToBase64(b []byte) string {
|
||||||
|
return base64.RawURLEncoding.EncodeToString(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Base64ToBytes(b string) ([]byte, error) {
|
||||||
|
return base64.RawURLEncoding.DecodeString(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Descriptor converts a Credential into a protocol.CredentialDescriptor.
|
||||||
|
func (c *Credential) Descriptor() protocol.CredentialDescriptor {
|
||||||
|
id, err := base64.RawURLEncoding.DecodeString(c.CredentialId)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return protocol.CredentialDescriptor{
|
||||||
|
Type: protocol.PublicKeyCredentialType,
|
||||||
|
CredentialID: id,
|
||||||
|
Transport: ConvertTransports(c.Transport),
|
||||||
|
AttestationType: c.AttestationType,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is a signal that the authenticator may be cloned, see CloneWarning above for more information.
|
||||||
|
func (a *Credential) UpdateCounter(authDataCount uint) {
|
||||||
|
if authDataCount <= a.SignCount && (authDataCount != 0 || a.SignCount != 0) {
|
||||||
|
a.CloneWarning = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
a.SignCount = authDataCount
|
||||||
|
}
|
52
internal/orm/didmethod/DIDMethod.pkl.go
Normal file
52
internal/orm/didmethod/DIDMethod.pkl.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
// Code generated from Pkl module `orm`. DO NOT EDIT.
|
||||||
|
package didmethod
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DIDMethod string
|
||||||
|
|
||||||
|
const (
|
||||||
|
Ipfs DIDMethod = "ipfs"
|
||||||
|
Sonr DIDMethod = "sonr"
|
||||||
|
Bitcoin DIDMethod = "bitcoin"
|
||||||
|
Ethereum DIDMethod = "ethereum"
|
||||||
|
Ibc DIDMethod = "ibc"
|
||||||
|
Webauthn DIDMethod = "webauthn"
|
||||||
|
Dwn DIDMethod = "dwn"
|
||||||
|
Service DIDMethod = "service"
|
||||||
|
)
|
||||||
|
|
||||||
|
// String returns the string representation of DIDMethod
|
||||||
|
func (rcv DIDMethod) String() string {
|
||||||
|
return string(rcv)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ encoding.BinaryUnmarshaler = new(DIDMethod)
|
||||||
|
|
||||||
|
// UnmarshalBinary implements encoding.BinaryUnmarshaler for DIDMethod.
|
||||||
|
func (rcv *DIDMethod) UnmarshalBinary(data []byte) error {
|
||||||
|
switch str := string(data); str {
|
||||||
|
case "ipfs":
|
||||||
|
*rcv = Ipfs
|
||||||
|
case "sonr":
|
||||||
|
*rcv = Sonr
|
||||||
|
case "bitcoin":
|
||||||
|
*rcv = Bitcoin
|
||||||
|
case "ethereum":
|
||||||
|
*rcv = Ethereum
|
||||||
|
case "ibc":
|
||||||
|
*rcv = Ibc
|
||||||
|
case "webauthn":
|
||||||
|
*rcv = Webauthn
|
||||||
|
case "dwn":
|
||||||
|
*rcv = Dwn
|
||||||
|
case "service":
|
||||||
|
*rcv = Service
|
||||||
|
default:
|
||||||
|
return fmt.Errorf(`illegal: "%s" is not a valid DIDMethod`, str)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user