mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-05 19:01:42 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
866468c002 | ||
|
|
7f3aa01bd5 | ||
|
|
2f65b1c283 | ||
|
|
48f7b5d5cc | ||
|
|
d26d3d7b4d | ||
|
|
807b2e86ec | ||
|
|
9bd5e41fa0 | ||
|
|
2ae32b2f64 | ||
|
|
ef7c33a011 | ||
|
|
ac8250557d | ||
|
|
8764e93437 | ||
|
|
8224fd3683 | ||
|
|
a5dd620b17 | ||
|
|
57bce7d50e | ||
|
|
5c5e909ffd | ||
|
|
0cf308016b | ||
|
|
9787394d5a | ||
|
|
a90111907d | ||
|
|
7c8fa0045c | ||
|
|
0eb5530422 | ||
|
|
a90a553222 | ||
|
|
aee9af7b34 | ||
|
|
571fb6100b | ||
|
|
0a7b7d9fe2 | ||
|
|
afc6343c21 | ||
|
|
bb0e8495d3 | ||
|
|
26a322a5ea | ||
|
|
014ce98359 | ||
|
|
ddf2f6232a | ||
|
|
2486ff3c94 | ||
|
|
9b0a78adda | ||
|
|
b727a52193 | ||
|
|
e0d4427153 | ||
|
|
356093d08a | ||
|
|
b0a91ddf14 | ||
|
|
aa8f8c004f | ||
|
|
d8e5bc9f37 | ||
|
|
75adb6200d | ||
|
|
92df0375dd | ||
|
|
d6f6023d8b | ||
|
|
3c450ad795 | ||
|
|
4ce9a45912 | ||
|
|
68aa232368 | ||
|
|
2545ab5748 | ||
|
|
a5c17cb3db | ||
|
|
280b441a4b | ||
|
|
145499e1e4 | ||
|
|
0ccfa47e7b | ||
|
|
e2735d5cd1 | ||
|
|
5eb1f0d0a9 | ||
|
|
a3652e3f2f | ||
|
|
7d344ef854 | ||
|
|
378d259895 | ||
|
|
3bbec0ebed | ||
|
|
4c9919f0a0 | ||
|
|
c77bf5d1ea | ||
|
|
143053e355 | ||
|
|
47c3a53080 | ||
|
|
0ec2f7d86a | ||
|
|
398864fc6b | ||
|
|
630e4ad7f0 | ||
|
|
7e50d7f76d | ||
|
|
9dfb8634bc | ||
|
|
9556faabb9 | ||
|
|
c9cc4042db | ||
|
|
fc9995dd40 | ||
|
|
5cc450c170 | ||
|
|
d3cfd27f5a | ||
|
|
30c984fd90 |
@@ -2,7 +2,7 @@
|
|||||||
name = "cz_conventional_commits"
|
name = "cz_conventional_commits"
|
||||||
tag_format = "v$version"
|
tag_format = "v$version"
|
||||||
version_scheme = "semver"
|
version_scheme = "semver"
|
||||||
version = "0.5.27"
|
version = "0.6.2"
|
||||||
update_changelog_on_bump = true
|
update_changelog_on_bump = true
|
||||||
major_version_zero = true
|
major_version_zero = true
|
||||||
changelog_file = "./docs/docs/changelog.md"
|
changelog_file = "CHANGELOG.md"
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
FROM jetpackio/devbox:latest
|
|
||||||
|
|
||||||
# Installing your devbox project
|
|
||||||
WORKDIR /code
|
|
||||||
USER root:root
|
|
||||||
RUN mkdir -p /code && chown ${DEVBOX_USER}:${DEVBOX_USER} /code
|
|
||||||
USER ${DEVBOX_USER}:${DEVBOX_USER}
|
|
||||||
|
|
||||||
# Copy devbox configuration files
|
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.json devbox.json
|
|
||||||
COPY --chown=${DEVBOX_USER}:${DEVBOX_USER} devbox.lock devbox.lock
|
|
||||||
|
|
||||||
RUN devbox run -- echo "Installed Packages."
|
|
||||||
RUN devbox shellenv --init-hook >> ~/.profile
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "Devbox Remote Container",
|
|
||||||
"build": {
|
|
||||||
"dockerfile": "./Dockerfile",
|
|
||||||
"context": ".."
|
|
||||||
},
|
|
||||||
"customizations": {
|
|
||||||
"vscode": {
|
|
||||||
"settings": {},
|
|
||||||
"extensions": [
|
|
||||||
"jetpack-io.devbox"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"remoteUser": "devbox",
|
|
||||||
"forwardPorts": [
|
|
||||||
1317,
|
|
||||||
26657,
|
|
||||||
9090,
|
|
||||||
3000,
|
|
||||||
80,
|
|
||||||
5000
|
|
||||||
],
|
|
||||||
"portsAttributes": {
|
|
||||||
"1317": {
|
|
||||||
"label": "sonr-api",
|
|
||||||
"onAutoForward": "notify"
|
|
||||||
},
|
|
||||||
"26657": {
|
|
||||||
"label": "sonr-rpc",
|
|
||||||
"onAutoForward": "notify"
|
|
||||||
},
|
|
||||||
"9090": {
|
|
||||||
"label": "sonr-grpc",
|
|
||||||
"onAutoForward": "silent"
|
|
||||||
},
|
|
||||||
"3000": {
|
|
||||||
"label": "hway-frontend",
|
|
||||||
"onAutoForward": "silent"
|
|
||||||
},
|
|
||||||
"80": {
|
|
||||||
"label": "ipfs-gateway",
|
|
||||||
"onAutoForward": "silent"
|
|
||||||
},
|
|
||||||
"5000": {
|
|
||||||
"label": "ipfs-api",
|
|
||||||
"onAutoForward": "silent"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"features": {
|
|
||||||
"ghcr.io/michidk/devcontainers-features/bun:1": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/cirolosapio/devcontainers-features/alpine-ohmyzsh:0": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/guiyomh/features/golangci-lint:0": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/meaningful-ooo/devcontainer-features/homebrew:2": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/devcontainers/features/github-cli:1": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/devcontainers/features/go:1": {
|
|
||||||
"version": "latest",
|
|
||||||
"go": "1.23"
|
|
||||||
},
|
|
||||||
"ghcr.io/devcontainers/features/rust:1": {
|
|
||||||
"version": "latest",
|
|
||||||
"rust": "1.73"
|
|
||||||
},
|
|
||||||
"ghcr.io/jpawlowski/devcontainer-features/codespaces-dotfiles:1": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/duduribeiro/devcontainer-features/neovim:1": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/dlouwers/devcontainer-features/devbox:1": {
|
|
||||||
"version": "latest"
|
|
||||||
},
|
|
||||||
"ghcr.io/devcontainers/features/sshd:1": {
|
|
||||||
"version": "latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
You are an expert in Cosmos SDK data modeling and state management, specializing in building efficient and scalable data models using the Cosmos SDK ORM system with Protocol Buffers.
|
|
||||||
|
|
||||||
Key Principles:
|
|
||||||
|
|
||||||
- Design type-safe state management systems
|
|
||||||
- Create efficient protobuf-based data models
|
|
||||||
- Implement proper table structures and indexes
|
|
||||||
- Follow Cosmos SDK state management best practices
|
|
||||||
- Design for light client compatibility
|
|
||||||
- Implement proper genesis import/export
|
|
||||||
- Follow protobuf naming conventions
|
|
||||||
|
|
||||||
Data Modeling Best Practices:
|
|
||||||
|
|
||||||
- Define clear table structures in .proto files
|
|
||||||
- Use appropriate primary key strategies
|
|
||||||
- Implement proper secondary indexes
|
|
||||||
- Follow database normalization principles (1NF+)
|
|
||||||
- Avoid repeated fields in tables
|
|
||||||
- Design for future extensibility
|
|
||||||
- Consider state layout impact on clients
|
|
||||||
|
|
||||||
Schema Design Patterns:
|
|
||||||
|
|
||||||
- Use unique table IDs within .proto files
|
|
||||||
- Implement proper field numbering
|
|
||||||
- Design efficient multipart keys
|
|
||||||
- Use appropriate field types
|
|
||||||
- Consider index performance implications
|
|
||||||
- Implement proper singleton patterns
|
|
||||||
- Design for automatic query services
|
|
||||||
|
|
||||||
State Management:
|
|
||||||
|
|
||||||
- Follow Cosmos SDK store patterns
|
|
||||||
- Implement proper prefix handling
|
|
||||||
- Design efficient range queries
|
|
||||||
- Use appropriate encoding strategies
|
|
||||||
- Handle state migrations properly
|
|
||||||
- Implement proper genesis handling
|
|
||||||
- Consider light client proof requirements
|
|
||||||
|
|
||||||
Error Handling and Validation:
|
|
||||||
|
|
||||||
- Implement proper input validation
|
|
||||||
- Use appropriate error types
|
|
||||||
- Handle state errors appropriately
|
|
||||||
- Implement proper debugging
|
|
||||||
- Use context appropriately
|
|
||||||
- Implement proper logging
|
|
||||||
- Handle concurrent access
|
|
||||||
|
|
||||||
Performance Optimization:
|
|
||||||
|
|
||||||
- Design efficient key encodings
|
|
||||||
- Optimize storage space usage
|
|
||||||
- Implement efficient queries
|
|
||||||
- Use appropriate index strategies
|
|
||||||
- Consider state growth implications
|
|
||||||
- Monitor performance metrics
|
|
||||||
- Design for scalability
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
|
|
||||||
- cosmos/orm/v1/orm.proto
|
|
||||||
- [google.golang.org/protobuf](http://google.golang.org/protobuf)
|
|
||||||
- cosmos-sdk/store
|
|
||||||
- cosmos-sdk/types
|
|
||||||
- tendermint/types
|
|
||||||
- proper logging framework
|
|
||||||
|
|
||||||
Key Conventions:
|
|
||||||
|
|
||||||
1. Use consistent protobuf naming
|
|
||||||
2. Implement proper documentation
|
|
||||||
3. Follow schema versioning practices
|
|
||||||
4. Use proper table ID management
|
|
||||||
5. Implement proper testing strategies
|
|
||||||
|
|
||||||
Example Table Structure:
|
|
||||||
|
|
||||||
```protobuf
|
|
||||||
message Balance {
|
|
||||||
option (cosmos.orm.v1.table) = {
|
|
||||||
id: 1
|
|
||||||
primary_key: { fields: "account,denom" }
|
|
||||||
index: { id: 1, fields: "denom" }
|
|
||||||
};
|
|
||||||
|
|
||||||
bytes account = 1;
|
|
||||||
string denom = 2;
|
|
||||||
uint64 amount = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
message Params {
|
|
||||||
option (cosmos.orm.v1.singleton) = {
|
|
||||||
id: 2
|
|
||||||
};
|
|
||||||
|
|
||||||
google.protobuf.Duration voting_period = 1;
|
|
||||||
uint64 min_threshold = 2;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Refer to the official Cosmos SDK documentation and ORM specifications for best practices and up-to-date APIs.
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
You are an expert in Go data modeling and PostgreSQL database design, specializing in building efficient and scalable data models using modern ORMs like GORM and SQLBoiler.
|
|
||||||
|
|
||||||
Key Principles:
|
|
||||||
- Write idiomatic Go code following standard Go conventions
|
|
||||||
- Design clean and maintainable database schemas
|
|
||||||
- Implement proper relationships and constraints
|
|
||||||
- Use appropriate indexes for query optimization
|
|
||||||
- Follow database normalization principles
|
|
||||||
- Implement proper error handling and validation
|
|
||||||
- Use meaningful struct tags for ORM mapping
|
|
||||||
|
|
||||||
Data Modeling Best Practices:
|
|
||||||
- Use appropriate Go types for database columns
|
|
||||||
- Implement proper foreign key relationships
|
|
||||||
- Design for data integrity and consistency
|
|
||||||
- Consider soft deletes where appropriate
|
|
||||||
- Use composite indexes strategically
|
|
||||||
- Implement proper timestamps for auditing
|
|
||||||
- Handle NULL values appropriately with pointers
|
|
||||||
|
|
||||||
ORM Patterns:
|
|
||||||
- Use GORM hooks for complex operations
|
|
||||||
- Implement proper model validation
|
|
||||||
- Use transactions for atomic operations
|
|
||||||
- Implement proper eager loading
|
|
||||||
- Use batch operations for better performance
|
|
||||||
- Handle migrations systematically
|
|
||||||
- Implement proper model scopes
|
|
||||||
|
|
||||||
Database Design:
|
|
||||||
- Follow PostgreSQL best practices
|
|
||||||
- Use appropriate column types
|
|
||||||
- Implement proper constraints
|
|
||||||
- Design efficient indexes
|
|
||||||
- Use JSONB for flexible data when needed
|
|
||||||
- Implement proper partitioning strategies
|
|
||||||
- Consider materialized views for complex queries
|
|
||||||
|
|
||||||
Error Handling and Validation:
|
|
||||||
- Implement proper input validation
|
|
||||||
- Use custom error types
|
|
||||||
- Handle database errors appropriately
|
|
||||||
- Implement retry mechanisms
|
|
||||||
- Use context for timeouts
|
|
||||||
- Implement proper logging
|
|
||||||
- Handle concurrent access
|
|
||||||
|
|
||||||
Performance Optimization:
|
|
||||||
- Use appropriate batch sizes
|
|
||||||
- Implement connection pooling
|
|
||||||
- Use prepared statements
|
|
||||||
- Optimize query patterns
|
|
||||||
- Use appropriate caching strategies
|
|
||||||
- Monitor query performance
|
|
||||||
- Use explain analyze for optimization
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
- GORM or SQLBoiler
|
|
||||||
- pq (PostgreSQL driver)
|
|
||||||
- validator
|
|
||||||
- migrate
|
|
||||||
- sqlx (for raw SQL when needed)
|
|
||||||
- zap or logrus for logging
|
|
||||||
|
|
||||||
Key Conventions:
|
|
||||||
1. Use consistent naming conventions
|
|
||||||
2. Implement proper documentation
|
|
||||||
3. Follow database migration best practices
|
|
||||||
4. Use version control for schema changes
|
|
||||||
5. Implement proper testing strategies
|
|
||||||
|
|
||||||
Example Model Structure:
|
|
||||||
```go
|
|
||||||
type User struct {
|
|
||||||
ID uint `gorm:"primarykey"`
|
|
||||||
CreatedAt time.Time
|
|
||||||
UpdatedAt time.Time
|
|
||||||
DeletedAt gorm.DeletedAt `gorm:"index"`
|
|
||||||
|
|
||||||
Name string `gorm:"type:varchar(100);not null"`
|
|
||||||
Email string `gorm:"type:varchar(100);uniqueIndex;not null"`
|
|
||||||
Profile Profile
|
|
||||||
Orders []Order
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Refer to the official documentation of GORM, PostgreSQL, and Go for best practices and up-to-date APIs.
|
|
||||||
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
You are a technical lead specializing in decentralized identity systems and security architecture, with expertise in W3C standards, Cosmos SDK, and blockchain security patterns.
|
|
||||||
|
|
||||||
Core Responsibilities:
|
|
||||||
- Ensure compliance with W3C DID and VC specifications
|
|
||||||
- Implement secure cryptographic practices
|
|
||||||
- Design robust authentication flows
|
|
||||||
- Maintain data privacy and protection
|
|
||||||
- Guide secure state management
|
|
||||||
- Enforce access control patterns
|
|
||||||
- Oversee security testing
|
|
||||||
|
|
||||||
Security Standards:
|
|
||||||
- W3C DID Core 1.0
|
|
||||||
- W3C Verifiable Credentials
|
|
||||||
- W3C WebAuthn Level 2
|
|
||||||
- OAuth 2.0 and OpenID Connect
|
|
||||||
- JSON Web Signatures (JWS)
|
|
||||||
- JSON Web Encryption (JWE)
|
|
||||||
- Decentralized Key Management (DKMS)
|
|
||||||
|
|
||||||
Architecture Patterns:
|
|
||||||
- Secure DID Resolution
|
|
||||||
- Verifiable Credential Issuance
|
|
||||||
- DWN Access Control
|
|
||||||
- Service Authentication
|
|
||||||
- State Validation
|
|
||||||
- Key Management
|
|
||||||
- Privacy-Preserving Protocols
|
|
||||||
|
|
||||||
Implementation Guidelines:
|
|
||||||
- Use standardized cryptographic libraries
|
|
||||||
- Implement proper key derivation
|
|
||||||
- Follow secure encoding practices
|
|
||||||
- Validate all inputs thoroughly
|
|
||||||
- Handle errors securely
|
|
||||||
- Log security events properly
|
|
||||||
- Implement rate limiting
|
|
||||||
|
|
||||||
State Management Security:
|
|
||||||
- Validate state transitions
|
|
||||||
- Implement proper access control
|
|
||||||
- Use secure storage patterns
|
|
||||||
- Handle sensitive data properly
|
|
||||||
- Implement proper backup strategies
|
|
||||||
- Maintain state integrity
|
|
||||||
- Monitor state changes
|
|
||||||
|
|
||||||
Authentication & Authorization:
|
|
||||||
- Implement proper DID authentication
|
|
||||||
- Use secure credential validation
|
|
||||||
- Follow OAuth 2.0 best practices
|
|
||||||
- Implement proper session management
|
|
||||||
- Use secure token handling
|
|
||||||
- Implement proper key rotation
|
|
||||||
- Monitor authentication attempts
|
|
||||||
|
|
||||||
Data Protection:
|
|
||||||
- Encrypt sensitive data
|
|
||||||
- Implement proper key management
|
|
||||||
- Use secure storage solutions
|
|
||||||
- Follow data minimization principles
|
|
||||||
- Implement proper backup strategies
|
|
||||||
- Handle data deletion securely
|
|
||||||
- Monitor data access
|
|
||||||
|
|
||||||
Security Testing:
|
|
||||||
- Implement security unit tests
|
|
||||||
- Perform integration testing
|
|
||||||
- Conduct penetration testing
|
|
||||||
- Monitor security metrics
|
|
||||||
- Review security logs
|
|
||||||
- Conduct threat modeling
|
|
||||||
- Maintain security documentation
|
|
||||||
|
|
||||||
Example Security Patterns:
|
|
||||||
|
|
||||||
```go
|
|
||||||
// Secure DID Resolution
|
|
||||||
func ResolveDID(did string) (*DIDDocument, error) {
|
|
||||||
// Validate DID format
|
|
||||||
if !ValidateDIDFormat(did) {
|
|
||||||
return nil, ErrInvalidDID
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resolve with retry and timeout
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), resolveTimeout)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
doc, err := resolver.ResolveWithContext(ctx, did)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("resolution failed: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Validate document structure
|
|
||||||
if err := ValidateDIDDocument(doc); err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid document: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return doc, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Secure Credential Verification
|
|
||||||
func VerifyCredential(vc *VerifiableCredential) error {
|
|
||||||
// Check expiration
|
|
||||||
if vc.IsExpired() {
|
|
||||||
return ErrCredentialExpired
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify proof
|
|
||||||
if err := vc.VerifyProof(trustRegistry); err != nil {
|
|
||||||
return fmt.Errorf("invalid proof: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verify status
|
|
||||||
if err := vc.CheckRevocationStatus(); err != nil {
|
|
||||||
return fmt.Errorf("revocation check failed: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Security Checklist:
|
|
||||||
1. All DIDs follow W3C specification
|
|
||||||
2. Credentials implement proper proofs
|
|
||||||
3. Keys use proper derivation/rotation
|
|
||||||
4. State changes are validated
|
|
||||||
5. Access control is enforced
|
|
||||||
6. Data is properly encrypted
|
|
||||||
7. Logging captures security events
|
|
||||||
|
|
||||||
Refer to W3C specifications, Cosmos SDK security documentation, and blockchain security best practices for detailed implementation guidance.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
# To get started with Dependabot version updates, you'll need to specify which
|
|
||||||
# package ecosystems to update and where the package manifests are located.
|
|
||||||
# Please see the documentation for all configuration options:
|
|
||||||
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "gomod" # See documentation for possible values
|
|
||||||
directory: "/" # Location of package manifests
|
|
||||||
schedule:
|
|
||||||
interval: "monthly"
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
"@pr/feature": ["feature/*", "feat/*"]
|
"feature": ["feature/*", "feat/*"]
|
||||||
"@pr/fix": fix/*
|
"bugfix": fix/*
|
||||||
"@pr/chore": chore/*
|
"enhancement": enhancement/*
|
||||||
"@pr/docs": docs/*
|
|
||||||
"@pr/refactor": refactor/*
|
|
||||||
|
|||||||
+249
-427
@@ -1,427 +1,249 @@
|
|||||||
[
|
{
|
||||||
{
|
"scopes": [
|
||||||
"name": "app/cosmos-sdk",
|
"core-chain",
|
||||||
"path": "app",
|
"core-ibc",
|
||||||
"docs": [
|
"x-did",
|
||||||
{
|
"x-dwn",
|
||||||
"keywords": [
|
"x-svc",
|
||||||
"module",
|
"security-mpc",
|
||||||
"cosmos"
|
"security-ucan",
|
||||||
],
|
"security-zkp",
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/module-manager"
|
"ci-cd",
|
||||||
},
|
"dev-ops"
|
||||||
{
|
],
|
||||||
"keywords": [
|
"docs": [
|
||||||
"protobuf",
|
{
|
||||||
"cosmos"
|
"keywords": ["github", "actions", "workflows", "syntax"],
|
||||||
],
|
"url": "https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions"
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/messages-and-queries"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["cosmos", "tooling", "cosmovisor"],
|
||||||
"keywords": [
|
"url": "https://docs.cosmos.network/v0.50/build/tooling/cosmovisor"
|
||||||
"rpc",
|
},
|
||||||
"protobuf",
|
{
|
||||||
"service",
|
"keywords": ["process-compose", "configuration"],
|
||||||
"cosmos"
|
"url": "https://f1bonacc1.github.io/process-compose/configuration/"
|
||||||
],
|
},
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/msg-services"
|
{
|
||||||
},
|
"keywords": ["taskfile", "cli", "reference"],
|
||||||
{
|
"url": "https://taskfile.dev/reference/cli"
|
||||||
"keywords": [
|
},
|
||||||
"protobuf",
|
{
|
||||||
"rpc",
|
"keywords": [],
|
||||||
"cosmos",
|
"url": "https://taskfile.dev/reference/schema"
|
||||||
"query"
|
},
|
||||||
],
|
{
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/query-services"
|
"keywords": ["taskfile", "templating", "reference"],
|
||||||
},
|
"url": "https://taskfile.dev/reference/templating/"
|
||||||
{
|
},
|
||||||
"keywords": [
|
{
|
||||||
"cosmos",
|
"keywords": ["mkdocs", "material", "reference"],
|
||||||
"depinject",
|
"url": "https://squidfunk.github.io/mkdocs-material/reference/"
|
||||||
"sdk"
|
},
|
||||||
],
|
{
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/depinject"
|
"keywords": ["pkl", "language", "reference"],
|
||||||
}
|
"url": "https://pkl-lang.org/main/current/language-reference/index.html"
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["pwa", "service-workers", "web"],
|
||||||
"name": "app/ibc",
|
"url": "https://web.dev/learn/pwa/service-workers/"
|
||||||
"path": "app",
|
},
|
||||||
"docs": [
|
{
|
||||||
{
|
"keywords": ["service-workers", "web", "api"],
|
||||||
"keywords": [
|
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"
|
||||||
"cosmos",
|
},
|
||||||
"interchain",
|
{
|
||||||
"accounts"
|
"keywords": ["web-authentication", "web", "api"],
|
||||||
],
|
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API"
|
||||||
"url": "https://ibc.cosmos.network/v8/apps/interchain-accounts/overview/"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["sdk", "modules", "cosmos", "manager"],
|
||||||
"keywords": [],
|
"url": "https://docs.cosmos.network/v0.50/build/building-modules/module-manager"
|
||||||
"url": "https://ibc.cosmos.network/v8/apps/transfer/overview/"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["sdk", "modules", "cosmos", "messages", "queries"],
|
||||||
"keywords": [],
|
"url": "https://docs.cosmos.network/v0.50/build/building-modules/messages-and-queries"
|
||||||
"url": "https://docs.osmosis.zone/osmosis-core/asset-info/"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["sdk", "modules", "messages", "service", "cosmos"],
|
||||||
"keywords": [],
|
"url": "https://docs.cosmos.network/v0.50/build/building-modules/msg-services"
|
||||||
"url": "https://docs.osmosis.zone/osmosis-core/modules/tokenfactory"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["sdk", "modules", "services", "cosmos", "query"],
|
||||||
"keywords": [
|
"url": "https://docs.cosmos.network/v0.50/build/building-modules/query-services"
|
||||||
"usdc",
|
},
|
||||||
"mint",
|
{
|
||||||
"cosmos",
|
"keywords": ["cosmos", "depinject", "modules", "sdk"],
|
||||||
"noble"
|
"url": "https://docs.cosmos.network/v0.50/build/building-modules/depinject"
|
||||||
],
|
},
|
||||||
"url": "https://docs.noble.xyz/cctp/mint"
|
{
|
||||||
},
|
"keywords": ["ibc", "apps", "sdk", "interchain-accounts"],
|
||||||
{
|
"url": "https://ibc.cosmos.network/v8/apps/interchain-accounts/overview/"
|
||||||
"keywords": [
|
},
|
||||||
"usdc"
|
{
|
||||||
],
|
"keywords": ["ibc", "apps", "sdk", "transfer"],
|
||||||
"url": "https://docs.noble.xyz/cctp/mint_forward"
|
"url": "https://ibc.cosmos.network/v8/apps/transfer/overview/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"keywords": [],
|
"keywords": ["osmosis", "modules", "ibc", "assets"],
|
||||||
"url": "https://docs.evmos.org/protocol/modules/erc20"
|
"url": "https://docs.osmosis.zone/osmosis-core/asset-info/"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"keywords": [],
|
"keywords": ["ibc", "osmosis", "tokenfactory", "modules", "assets"],
|
||||||
"url": "https://docs.nomic.io/nbtc"
|
"url": "https://docs.osmosis.zone/osmosis-core/modules/tokenfactory"
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
},
|
"keywords": ["ibc", "mint", "cctp", "noble", "assets"],
|
||||||
{
|
"url": "https://docs.noble.xyz/cctp/mint"
|
||||||
"name": "crypto/mpc",
|
},
|
||||||
"path": "crypto/mpc",
|
{
|
||||||
"docs": [
|
"keywords": ["ibc", "relayer", "nomic", "assets"],
|
||||||
{
|
"url": "https://docs.nomic.io/network/ibc-relayer"
|
||||||
"keywords": [
|
},
|
||||||
"mpc",
|
{
|
||||||
"wallet",
|
"keywords": ["ibc", "cctp", "noble", "mint_forward", "assets"],
|
||||||
"security",
|
"url": "https://docs.noble.xyz/cctp/mint_forward"
|
||||||
"advanced cryptography"
|
},
|
||||||
],
|
{
|
||||||
"url": "https://csrc.nist.gov/CSRC/media/Events/NTCW19/papers/paper-DKLS.pdf"
|
"keywords": ["evmos", "erc20", "assets"],
|
||||||
}
|
"url": "https://docs.evmos.org/protocol/modules/erc20"
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["nomic", "nbtc", "assets"],
|
||||||
"name": "crypto/ucan",
|
"url": "https://docs.nomic.io/nbtc"
|
||||||
"path": "crypto/ucan",
|
},
|
||||||
"docs": [
|
{
|
||||||
{
|
"keywords": ["mpc", "wallet", "cryptography", "capability", "invokation"],
|
||||||
"keywords": [],
|
"url": "https://csrc.nist.gov/CSRC/media/Events/NTCW19/papers/paper-DKLS.pdf"
|
||||||
"url": "https://raw.githubusercontent.com/ucan-wg/spec/refs/heads/main/README.md"
|
},
|
||||||
}
|
{
|
||||||
]
|
"keywords": ["ucan", "spec", "cryptography", "authorization"],
|
||||||
},
|
"url": "https://raw.githubusercontent.com/ucan-wg/spec/refs/heads/main/README.md"
|
||||||
{
|
},
|
||||||
"name": "crypto/zkp",
|
{
|
||||||
"path": "crypto/accumulator",
|
"keywords": ["zero-knowledge", "proofs", "cryptography", "privacy"],
|
||||||
"docs": [
|
"url": "https://eprint.iacr.org/2021/1672.pdf"
|
||||||
{
|
},
|
||||||
"keywords": [],
|
{
|
||||||
"url": "https://eprint.iacr.org/2021/1672.pdf"
|
"keywords": ["gateway", "http", "sse"],
|
||||||
}
|
"url": "https://echo.labstack.com/docs/cookbook/sse"
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["gateway", "http", "websocket"],
|
||||||
"name": "gateway/handlers",
|
"url": "https://echo.labstack.com/docs/cookbook/websocket"
|
||||||
"path": "pkg/gateway/handlers",
|
},
|
||||||
"docs": [
|
{
|
||||||
{
|
"keywords": ["gateway", "http", "subdomain"],
|
||||||
"keywords": [],
|
"url": "https://echo.labstack.com/docs/cookbook/subdomain"
|
||||||
"url": "https://echo.labstack.com/docs/cookbook/sse"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["tigerbeetle", "models", "oracle"],
|
||||||
"keywords": [],
|
"url": "https://docs.tigerbeetle.com/coding/data-modeling"
|
||||||
"url": "https://echo.labstack.com/docs/cookbook/websocket"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["tigerbeetle", "two=phase", "transfers", "oracle"],
|
||||||
"keywords": [],
|
"url": "https://docs.tigerbeetle.com/coding/two-phase-transfers"
|
||||||
"url": "https://echo.labstack.com/docs/cookbook/subdomain"
|
},
|
||||||
}
|
{
|
||||||
]
|
"keywords": [
|
||||||
},
|
"tigerbeetle",
|
||||||
{
|
"oracle",
|
||||||
"name": "gateway/database",
|
"reliable",
|
||||||
"path": "pkg/gateway/internal/database",
|
"transaction",
|
||||||
"docs": [
|
"submission"
|
||||||
{
|
],
|
||||||
"keywords": [],
|
"url": "https://docs.tigerbeetle.com/coding/reliable-transaction-submission"
|
||||||
"url": "https://docs.tigerbeetle.com/coding/data-modeling"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["currency", "exchange", "tigerbeetle", "oracle"],
|
||||||
"keywords": [],
|
"url": "https://docs.tigerbeetle.com/coding/recipes/currency-exchange"
|
||||||
"url": "https://docs.tigerbeetle.com/coding/two-phase-transfers"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": [
|
||||||
"keywords": [],
|
"balance",
|
||||||
"url": "https://docs.tigerbeetle.com/coding/reliable-transaction-submission"
|
"tigerbeetle",
|
||||||
},
|
"oracle",
|
||||||
{
|
"conditional",
|
||||||
"keywords": [
|
"transfers"
|
||||||
"currency"
|
],
|
||||||
],
|
"url": "https://docs.tigerbeetle.com/coding/recipes/balance-conditional-transfers"
|
||||||
"url": "https://docs.tigerbeetle.com/coding/recipes/currency-exchange"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["tigerbeetle", "account", "oracle"],
|
||||||
"keywords": [
|
"url": "https://docs.tigerbeetle.com/reference/account"
|
||||||
"balance"
|
},
|
||||||
],
|
{
|
||||||
"url": "https://docs.tigerbeetle.com/coding/recipes/balance-conditional-transfers"
|
"keywords": ["tigerbeetle", "transfer", "oracle"],
|
||||||
},
|
"url": "https://docs.tigerbeetle.com/reference/transfer"
|
||||||
{
|
},
|
||||||
"keywords": [],
|
{
|
||||||
"url": "https://docs.tigerbeetle.com/reference/account"
|
"keywords": ["substreams", "packages", "consumer", "oracle"],
|
||||||
},
|
"url": "https://docs.substreams.dev/documentation/consume/packages"
|
||||||
{
|
},
|
||||||
"keywords": [],
|
{
|
||||||
"url": "https://docs.tigerbeetle.com/reference/transfer"
|
"keywords": ["substreams", "deploy", "service", "oracle"],
|
||||||
},
|
"url": "https://docs.substreams.dev/documentation/consume/sql/deployable-services/local-service"
|
||||||
{
|
},
|
||||||
"keywords": [],
|
{
|
||||||
"url": "https://docs.substreams.dev/documentation/consume/packages"
|
"keywords": ["substreams", "tutorial", "cosmos", "injective"],
|
||||||
},
|
"url": "https://docs.substreams.dev/tutorials/cosmos/injective/foundational"
|
||||||
{
|
},
|
||||||
"keywords": [],
|
{
|
||||||
"url": "https://docs.substreams.dev/documentation/consume/sql/deployable-services/local-service"
|
"keywords": ["worker", "http", "jwt"],
|
||||||
},
|
"url": "https://echo.labstack.com/docs/cookbook/jwt"
|
||||||
{
|
},
|
||||||
"keywords": [],
|
{
|
||||||
"url": "https://docs.substreams.dev/tutorials/cosmos/injective/foundational"
|
"keywords": ["worker", "http", "secure"],
|
||||||
}
|
"url": "https://echo.labstack.com/docs/middleware/secure"
|
||||||
]
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["worker", "http", "service-workers", "web", "api"],
|
||||||
"name": "vault/handlers",
|
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"
|
||||||
"path": "pkg/vault/handlers",
|
},
|
||||||
"docs": [
|
{
|
||||||
{
|
"keywords": ["synapse", "matrix", "configuration", "usage"],
|
||||||
"keywords": [],
|
"url": "https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html"
|
||||||
"url": "https://echo.labstack.com/docs/cookbook/jwt"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["cosmos", "protobuf", "orm", "sdk"],
|
||||||
"keywords": [],
|
"url": "https://docs.cosmos.network/v0.50/build/packages/orm"
|
||||||
"url": "https://echo.labstack.com/docs/middleware/secure"
|
},
|
||||||
},
|
{
|
||||||
{
|
"keywords": ["cosmos", "sdk", "modules", "auth"],
|
||||||
"keywords": [],
|
"url": "https://docs.cosmos.network/v0.50/build/modules/auth"
|
||||||
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"
|
},
|
||||||
}
|
{
|
||||||
]
|
"keywords": ["cosmos", "sdk", "modules", "bank"],
|
||||||
},
|
"url": "https://docs.cosmos.network/v0.50/build/modules/bank"
|
||||||
{
|
},
|
||||||
"name": "vault/database",
|
{
|
||||||
"path": "pkg/vault/internal/database",
|
"keywords": ["cosmos", "modules", "authz", "sdk"],
|
||||||
"docs": [
|
"url": "https://docs.cosmos.network/v0.50/build/modules/authz"
|
||||||
"https://dexie.org/docs/ExportImport/dexie-export-import",
|
},
|
||||||
"https://dexie.org/docs/API-Reference#quick-reference",
|
{
|
||||||
"https://templ.guide/syntax-and-usage/script-templates"
|
"keywords": ["cosmos", "protobuf", "collections", "sdk"],
|
||||||
]
|
"url": "https://docs.cosmos.network/v0.50/build/packages/collections"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pkl/ipfs",
|
"keywords": ["cosmos", "modules", "gov", "sdk"],
|
||||||
"path": "pkl/ipfs.net",
|
"url": "https://docs.cosmos.network/v0.50/build/modules/gov"
|
||||||
"docs": [
|
},
|
||||||
{
|
{
|
||||||
"keywords": [],
|
"keywords": ["cosmos", "modules", "staking", "sdk"],
|
||||||
"url": "https://github.com/ipfs/kubo/blob/master/docs/config.md"
|
"url": "https://docs.cosmos.network/v0.50/build/modules/staking"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"keywords": [],
|
"keywords": ["cosmos", "protobuf", "annotations", "sdk"],
|
||||||
"url": "https://pkl-lang.org/main/current/language-reference/index.html"
|
"url": "https://docs.cosmos.network/v0.50/build/building-modules/protobuf-annotations"
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
},
|
"keywords": ["cosmos", "sdk", "modules", "group"],
|
||||||
{
|
"url": "https://docs.cosmos.network/v0.50/build/modules/group"
|
||||||
"name": "pkl/matrix",
|
},
|
||||||
"path": "pkl/matrix.net",
|
{
|
||||||
"docs": [
|
"keywords": ["cosmos", "sdk", "modules", "nft"],
|
||||||
{
|
"url": "https://docs.cosmos.network/v0.50/build/modules/nft"
|
||||||
"keywords": [],
|
}
|
||||||
"url": "https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html"
|
],
|
||||||
},
|
"next-milestone": "34"
|
||||||
{
|
}
|
||||||
"keywords": [],
|
|
||||||
"url": "https://pkl-lang.org/main/current/language-reference/index.html"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pkl/chain",
|
|
||||||
"path": "pkl/sonr.chain",
|
|
||||||
"docs": [
|
|
||||||
"https://tutorials.cosmos.network/tutorials/9-path-to-prod/5-network.html",
|
|
||||||
"https://tutorials.cosmos.network/tutorials/9-path-to-prod/4-genesis.html",
|
|
||||||
"https://pkl-lang.org/main/current/language-reference/index.html",
|
|
||||||
"https://docs.cosmos.network/v0.50/user/run-node/run-testnet"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pkl/hway",
|
|
||||||
"path": "pkl/sonr.hway",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://pkl-lang.org/main/current/language-reference/index.html"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pkl/motr",
|
|
||||||
"path": "pkl/sonr.motr",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://pkl-lang.org/main/current/language-reference/index.html"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://web.dev/learn/pwa/service-workers/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "x/did",
|
|
||||||
"path": "proto/did",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/packages/orm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/protobuf-annotations"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/auth"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/packages/collections"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/bank"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "x/dwn",
|
|
||||||
"path": "proto/dwn",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/protobuf-annotations"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/packages/orm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/authz"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/packages/collections"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/gov"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/staking"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "x/svc",
|
|
||||||
"path": "proto/svc",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/packages/collections"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/building-modules/protobuf-annotations"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/packages/orm"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/group"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/modules/nft"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "repo/ci-cd",
|
|
||||||
"path": "deploy",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.cosmos.network/v0.50/build/tooling/cosmovisor"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://f1bonacc1.github.io/process-compose/configuration/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://docs.nomic.io/network/ibc-relayer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://www.jetify.com/docs/devbox"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://taskfile.dev/reference/cli"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://taskfile.dev/reference/schema"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://taskfile.dev/reference/templating/"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "repo/docs",
|
|
||||||
"path": "docs",
|
|
||||||
"docs": [
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://squidfunk.github.io/mkdocs-material/reference/"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"keywords": [],
|
|
||||||
"url": "https://github.com/mkdocs/catalog/blob/main/README.md"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|||||||
@@ -1,63 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
ROOT_DIR=$(git rev-parse --show-toplevel)
|
|
||||||
|
|
||||||
# Extract scope name and path using jq, and pass it to fzf for selection
|
|
||||||
SCOPE=$(cat "$ROOT_DIR/.github/scopes.json" | jq -r '.[] | "\(.name)"' | fzf --prompt "Select scope:")
|
|
||||||
DOCS=$(cat "$ROOT_DIR/.github/scopes.json" | jq -r ".[] | select(.name == \"$SCOPE\") | .docs[].url")
|
|
||||||
|
|
||||||
# Write Title
|
|
||||||
TITLE=$(gum input --placeholder "Issue Title...")
|
|
||||||
|
|
||||||
# Write Goal
|
|
||||||
GOAL=$(mods --role "determine-issue-goal" "$SCOPE $TITLE")
|
|
||||||
|
|
||||||
# Input Requirements
|
|
||||||
REQUIREMENTS=()
|
|
||||||
while true; do
|
|
||||||
if [ ${#REQUIREMENTS[@]} -ge 2 ]; then
|
|
||||||
if ! gum confirm "Do you want to add another requirement?"; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
REQUIREMENT=$(gum input --placeholder "Add a requirement...")
|
|
||||||
if [ -n "$REQUIREMENT" ]; then
|
|
||||||
REQUIREMENTS+=("$REQUIREMENT")
|
|
||||||
else
|
|
||||||
echo "Requirement cannot be empty. Please enter a valid requirement."
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
create_body() {
|
|
||||||
echo "### Goal(s):"
|
|
||||||
echo "$GOAL"
|
|
||||||
echo "### Requirements:"
|
|
||||||
for i in "${!REQUIREMENTS[@]}"; do
|
|
||||||
echo "$(($i + 1)). ${REQUIREMENTS[$i]}"
|
|
||||||
done
|
|
||||||
echo "### Resources:"
|
|
||||||
while IFS= read -r doc; do
|
|
||||||
echo "- $doc"
|
|
||||||
done <<< "$DOCS"
|
|
||||||
}
|
|
||||||
|
|
||||||
ISSUE_BODY=$(create_body)
|
|
||||||
|
|
||||||
# Function to collect output
|
|
||||||
preview_output() {
|
|
||||||
echo "# ($SCOPE) $TITLE"
|
|
||||||
echo "$ISSUE_BODY"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Display the formatted output
|
|
||||||
preview_output | gum format
|
|
||||||
|
|
||||||
# Confirm to create a GitHub issue
|
|
||||||
if gum confirm "Do you want to create a new GitHub issue with this information?"; then
|
|
||||||
# Create a new GitHub issue using the gh CLI
|
|
||||||
gh issue create --repo onsonr/sonr --title "($SCOPE) $TITLE" --body "$ISSUE_BODY"
|
|
||||||
else
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
ROOT_DIR=$(git rev-parse --show-toplevel)
|
|
||||||
|
|
||||||
# Package the PKL projects
|
|
||||||
bunx pkl project package $ROOT_DIR/pkl/*/
|
|
||||||
|
|
||||||
# Process each directory in .out
|
|
||||||
for dir in .out/*/; do
|
|
||||||
# Get the folder name and version
|
|
||||||
folder=$(basename "$dir")
|
|
||||||
version=$(echo "$folder" | grep -o '@.*' | sed 's/@//')
|
|
||||||
new_folder=$(echo "$folder" | sed 's/@[0-9.]*$//')
|
|
||||||
|
|
||||||
# Create new directory without version
|
|
||||||
mkdir -p ".out/$new_folder/$version"
|
|
||||||
|
|
||||||
# Copy contents to versioned subdirectory
|
|
||||||
cp -r "$dir"* ".out/$new_folder/$version/"
|
|
||||||
|
|
||||||
# Find and copy only .pkl files from the original package
|
|
||||||
pkg_dir="$ROOT_DIR/pkl/$new_folder"
|
|
||||||
if [ -d "$pkg_dir" ]; then
|
|
||||||
# Copy only .pkl files to version directory
|
|
||||||
find "$pkg_dir" -name "*.pkl" -exec cp {} ".out/$new_folder/$version/" \;
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove old versioned directory
|
|
||||||
rm -rf "$dir"
|
|
||||||
|
|
||||||
# Upload to R2 with new structure
|
|
||||||
rclone copy ".out/$new_folder" "r2:pkljar/$new_folder"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Cleanup .out directory
|
|
||||||
rm -rf .out
|
|
||||||
|
|
||||||
@@ -1,27 +1,37 @@
|
|||||||
name: Run All Checks
|
name: Check PR
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
merge_group:
|
merge_group:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read # for TimonVS/pr-labeler-action to read config file
|
||||||
|
pull-requests: write # for TimonVS/pr-labeler-action to add labels in PR
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tidy-pr:
|
verify-pr:
|
||||||
name: Tidy PR
|
name: Test Lints
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
permissions:
|
permissions:
|
||||||
contents: read # for TimonVS/pr-labeler-action to read config file
|
contents: read # for TimonVS/pr-labeler-action to read config file
|
||||||
pull-requests: write # for TimonVS/pr-labeler-action to add labels in PR
|
pull-requests: write # for TimonVS/pr-labeler-action to add labels in PR
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # Required to fetch all history for merging
|
||||||
|
|
||||||
- uses: TimonVS/pr-labeler-action@v5
|
- uses: TimonVS/pr-labeler-action@v5
|
||||||
with:
|
with:
|
||||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
configuration-path: .github/pr-labeler.yml # optional, .github/pr-labeler.yml is the default value
|
configuration-path: .github/pr-labeler.yml # optional, .github/pr-labeler.yml is the default value
|
||||||
|
- name: Trunk Check
|
||||||
|
uses: trunk-io/trunk-action@v1
|
||||||
|
|
||||||
test-builds:
|
test-builds:
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Run Build Tests
|
name: Test Builds
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -36,15 +46,11 @@ jobs:
|
|||||||
check-latest: true
|
check-latest: true
|
||||||
- name: Run Sonrd Build
|
- name: Run Sonrd Build
|
||||||
run: make build
|
run: make build
|
||||||
- name: Run Hway Build
|
|
||||||
run: make build-hway
|
|
||||||
- name: Run Motr Build
|
|
||||||
run: make build-motr
|
|
||||||
|
|
||||||
test-unit:
|
test-unit:
|
||||||
if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Run Unit Tests
|
name: Test Unit
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -59,47 +65,10 @@ jobs:
|
|||||||
check-latest: true
|
check-latest: true
|
||||||
- run: make test-unit
|
- run: make test-unit
|
||||||
|
|
||||||
test-race:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event_name == 'merge_group'
|
|
||||||
name: Run Race Tests
|
|
||||||
continue-on-error: true
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: onsonr/sonr
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: "1.23"
|
|
||||||
check-latest: true
|
|
||||||
- run: make test-race
|
|
||||||
|
|
||||||
test-cover:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event_name == 'merge_group'
|
|
||||||
name: Run Coverage Tests
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
repository: onsonr/sonr
|
|
||||||
fetch-depth: 0
|
|
||||||
fetch-tags: true
|
|
||||||
|
|
||||||
- uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: "1.23"
|
|
||||||
check-latest: true
|
|
||||||
- run: make test-cover
|
|
||||||
|
|
||||||
validate-release:
|
validate-release:
|
||||||
if: github.event_name == 'merge_group'
|
if: github.event_name == 'merge_group' || github.event_name == 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Verify Release Config
|
name: Test Version
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -113,21 +82,17 @@ jobs:
|
|||||||
go-version: "1.23"
|
go-version: "1.23"
|
||||||
check-latest: true
|
check-latest: true
|
||||||
|
|
||||||
|
- name: Install Python
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: "3.x"
|
||||||
|
|
||||||
|
- name: Version Check
|
||||||
|
run: make validate-tag
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Check GoReleaser Config
|
- name: Check GoReleaser Config
|
||||||
uses: goreleaser/goreleaser-action@v6
|
run: make release-check
|
||||||
with:
|
|
||||||
distribution: goreleaser
|
|
||||||
version: latest
|
|
||||||
args: check
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: GoReleaser Dry Run
|
|
||||||
uses: goreleaser/goreleaser-action@v6
|
|
||||||
with:
|
|
||||||
distribution: goreleaser
|
|
||||||
version: latest
|
|
||||||
args: release --snapshot --clean --skip=publish
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
name: Merge Group
|
||||||
|
|
||||||
|
on:
|
||||||
|
merge_group:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read # for TimonVS/pr-labeler-action to read config file
|
||||||
|
pull-requests: write # for TimonVS/pr-labeler-action to add labels in PR
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-race:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'merge_group'
|
||||||
|
name: Test Race
|
||||||
|
continue-on-error: true
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: onsonr/sonr
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.23"
|
||||||
|
check-latest: true
|
||||||
|
- run: make test-race
|
||||||
|
|
||||||
|
test-cover:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event_name == 'merge_group'
|
||||||
|
name: Test Coverage
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: onsonr/sonr
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.23"
|
||||||
|
check-latest: true
|
||||||
|
- run: make test-cover
|
||||||
|
|
||||||
|
test-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Test Release
|
||||||
|
if: github.event_name == 'merge_group'
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: onsonr/sonr
|
||||||
|
fetch-depth: 0
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.23"
|
||||||
|
check-latest: true
|
||||||
|
|
||||||
|
- name: Release Dry Run
|
||||||
|
run: make release-dry
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
name: Post Merge
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types: [closed]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
issues: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bump-version:
|
||||||
|
name: Cz Bump
|
||||||
|
if: |
|
||||||
|
github.event.pull_request.merged == true &&
|
||||||
|
github.event.pull_request.user.login != 'dependabot[bot]' &&
|
||||||
|
github.event.pull_request.user.login != 'dependabot-preview[bot]'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Check out
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
ssh-key: "${{ secrets.COMMIT_KEY }}"
|
||||||
|
|
||||||
|
- name: Create bump and changelog
|
||||||
|
uses: commitizen-tools/commitizen-action@master
|
||||||
|
with:
|
||||||
|
push: false
|
||||||
|
increment: patch
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
- name: Push using ssh
|
||||||
|
run: |
|
||||||
|
git push origin main --tags
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Publish Versioned Assets
|
name: New Release
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
@@ -9,7 +9,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
buf_push:
|
buf_push:
|
||||||
name: Publish to buf.build/onsonr/sonr
|
name: Publish Protobufs
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
# Run `git checkout`
|
# Run `git checkout`
|
||||||
@@ -23,9 +23,29 @@ jobs:
|
|||||||
input: proto
|
input: proto
|
||||||
buf_token: ${{ secrets.BUF_TOKEN }}
|
buf_token: ${{ secrets.BUF_TOKEN }}
|
||||||
|
|
||||||
publish-docs:
|
container-push:
|
||||||
|
name: Publish Docker Images
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Publish Docs
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v5
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64
|
||||||
|
push: true
|
||||||
|
tags: ghcr.io/onsonr/sonr:latest
|
||||||
|
|
||||||
|
docs-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Publish Tech Docs
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: Configure Git Credentials
|
- name: Configure Git Credentials
|
||||||
@@ -43,4 +63,4 @@ jobs:
|
|||||||
restore-keys: |
|
restore-keys: |
|
||||||
mkdocs-material-
|
mkdocs-material-
|
||||||
- run: pip install mkdocs-material
|
- run: pip install mkdocs-material
|
||||||
- run: cd docs && mkdocs gh-deploy --force
|
- run: mkdocs gh-deploy --force
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Versioned Release
|
name: New Tag
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -6,31 +6,15 @@ on:
|
|||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- v*
|
- v*
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
bump-version:
|
|
||||||
if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop'
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: Bump Current Version
|
|
||||||
outputs:
|
|
||||||
new_tag: ${{ steps.bump.outputs.new_tag }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Create bump and changelog
|
|
||||||
id: bump
|
|
||||||
uses: commitizen-tools/commitizen-action@master
|
|
||||||
with:
|
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
increment: "PATCH"
|
|
||||||
|
|
||||||
new-release:
|
new-release:
|
||||||
name: Run GoReleaser on New Tag
|
name: Create Release
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -53,15 +37,15 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Release
|
- name: Run GoReleaser
|
||||||
uses: goreleaser/goreleaser-action@v6
|
run: make release
|
||||||
with:
|
|
||||||
distribution: goreleaser
|
|
||||||
version: latest
|
|
||||||
args: release --clean
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GH_RELEASER_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GH_RELEASER_TOKEN }}
|
||||||
GITHUB_PERSONAL_AUTH_TOKEN: ${{ secrets.GH_RELEASER_TOKEN }}
|
GITHUB_PERSONAL_AUTH_TOKEN: ${{ secrets.GH_RELEASER_TOKEN }}
|
||||||
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
|
||||||
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
|
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
|
||||||
|
REDDIT_APP_ID: ${{ secrets.REDDIT_APP_ID }}
|
||||||
|
REDDIT_SECRET: ${{ secrets.REDDIT_SECRET }}
|
||||||
|
REDDIT_USERNAME: ${{ secrets.REDDIT_USERNAME }}
|
||||||
|
REDDIT_PASSWORD: ${{ secrets.REDDIT_PASSWORD }}
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
|
# Aider related generated files
|
||||||
|
.aider-context
|
||||||
|
|
||||||
# Binaries
|
# Binaries
|
||||||
|
.task
|
||||||
no
|
no
|
||||||
.data
|
.data
|
||||||
schemas
|
schemas
|
||||||
@@ -87,6 +91,7 @@ buildenv*
|
|||||||
node_modules
|
node_modules
|
||||||
cmd/gateway/node_modules
|
cmd/gateway/node_modules
|
||||||
pkg/nebula/node_modules
|
pkg/nebula/node_modules
|
||||||
|
configs/logs.json
|
||||||
|
|
||||||
mprocs.yaml
|
mprocs.yaml
|
||||||
build
|
build
|
||||||
|
|||||||
+11
-86
@@ -2,15 +2,11 @@
|
|||||||
version: 2
|
version: 2
|
||||||
project_name: sonr
|
project_name: sonr
|
||||||
|
|
||||||
|
before:
|
||||||
|
hooks:
|
||||||
|
- echo "Release date is {{ .Env.RELEASE_DATE }}"
|
||||||
|
|
||||||
builds:
|
builds:
|
||||||
- id: motr
|
|
||||||
main: ./cmd/motr
|
|
||||||
binary: app
|
|
||||||
goos:
|
|
||||||
- js
|
|
||||||
goarch:
|
|
||||||
- wasm
|
|
||||||
|
|
||||||
- id: sonr
|
- id: sonr
|
||||||
main: ./cmd/sonrd
|
main: ./cmd/sonrd
|
||||||
binary: sonrd
|
binary: sonrd
|
||||||
@@ -36,45 +32,11 @@ builds:
|
|||||||
- netgo
|
- netgo
|
||||||
- ledger
|
- ledger
|
||||||
|
|
||||||
- id: hway
|
|
||||||
main: ./cmd/hway
|
|
||||||
binary: hway
|
|
||||||
goos:
|
|
||||||
- linux
|
|
||||||
- darwin
|
|
||||||
goarch:
|
|
||||||
- amd64
|
|
||||||
- arm64
|
|
||||||
mod_timestamp: "{{ .CommitTimestamp }}"
|
|
||||||
flags:
|
|
||||||
- -mod=readonly
|
|
||||||
- -trimpath
|
|
||||||
goamd64:
|
|
||||||
- v1
|
|
||||||
tags:
|
|
||||||
- netgo
|
|
||||||
ldflags:
|
|
||||||
- -X main.version={{.Version}}
|
|
||||||
- -X main.commit={{.Commit}}
|
|
||||||
- -X main.date={{.Date}}
|
|
||||||
archives:
|
archives:
|
||||||
- id: sonr
|
- id: sonr
|
||||||
builds: [sonr]
|
builds: [sonr]
|
||||||
name_template: >-
|
name_template: >-
|
||||||
sonr_{{ .Version }}_
|
sonr_{{ .Os }}_{{- if eq .Arch "amd64" }}x86_64
|
||||||
{{- title .Os }}_{{- if eq .Arch "amd64" }}x86_64
|
|
||||||
{{- else if eq .Arch "386" }}i386
|
|
||||||
{{- else }}{{ .Arch }}{{ end }}
|
|
||||||
format: tar.gz
|
|
||||||
files:
|
|
||||||
- src: README*
|
|
||||||
wrap_in_directory: true
|
|
||||||
|
|
||||||
- id: hway
|
|
||||||
builds: [hway]
|
|
||||||
name_template: >-
|
|
||||||
hway_{{ .Version }}_
|
|
||||||
{{- title .Os }}_{{- if eq .Arch "amd64" }}x86_64
|
|
||||||
{{- else if eq .Arch "386" }}i386
|
{{- else if eq .Arch "386" }}i386
|
||||||
{{- else }}{{ .Arch }}{{ end }}
|
{{- else }}{{ .Arch }}{{ end }}
|
||||||
format: tar.gz
|
format: tar.gz
|
||||||
@@ -83,32 +45,9 @@ archives:
|
|||||||
wrap_in_directory: true
|
wrap_in_directory: true
|
||||||
|
|
||||||
nfpms:
|
nfpms:
|
||||||
- id: hway
|
|
||||||
package_name: hway
|
|
||||||
file_name_template: "{{ .ConventionalFileName }}"
|
|
||||||
builds: [hway]
|
|
||||||
vendor: Sonr
|
|
||||||
homepage: "https://onsonr.dev"
|
|
||||||
maintainer: "Sonr <support@onsonr.dev>"
|
|
||||||
description: "Sonr Highway is a decentralized, permissionless, and censorship-resistant identity network proxy."
|
|
||||||
license: "Apache 2.0"
|
|
||||||
formats:
|
|
||||||
- rpm
|
|
||||||
- deb
|
|
||||||
- apk
|
|
||||||
dependencies:
|
|
||||||
- ipfs
|
|
||||||
contents:
|
|
||||||
- src: README*
|
|
||||||
dst: /usr/share/doc/hway
|
|
||||||
bindir: /usr/bin
|
|
||||||
section: net
|
|
||||||
priority: optional
|
|
||||||
# Add these lines to match build config
|
|
||||||
|
|
||||||
- id: sonr
|
- id: sonr
|
||||||
package_name: sonrd
|
package_name: sonrd
|
||||||
file_name_template: "{{ .ConventionalFileName }}"
|
file_name_template: "sonrd_{{ .Os }}_{{ .Arch }}{{ .ConventionalExtension }}"
|
||||||
builds: [sonr]
|
builds: [sonr]
|
||||||
vendor: Sonr
|
vendor: Sonr
|
||||||
homepage: "https://onsonr.dev"
|
homepage: "https://onsonr.dev"
|
||||||
@@ -130,23 +69,6 @@ nfpms:
|
|||||||
# Add these lines to match build config
|
# Add these lines to match build config
|
||||||
|
|
||||||
brews:
|
brews:
|
||||||
- name: hway
|
|
||||||
ids: [hway]
|
|
||||||
commit_author:
|
|
||||||
name: goreleaserbot
|
|
||||||
email: bot@goreleaser.com
|
|
||||||
directory: Formula
|
|
||||||
caveats: "Run a local hway node and access it with the hway proxy"
|
|
||||||
homepage: "https://onsonr.dev"
|
|
||||||
description: "Sonr is a decentralized, permissionless, and censorship-resistant identity network."
|
|
||||||
dependencies:
|
|
||||||
- name: ipfs
|
|
||||||
repository:
|
|
||||||
owner: onsonr
|
|
||||||
name: homebrew-tap
|
|
||||||
branch: master
|
|
||||||
token: "{{ .Env.GITHUB_PERSONAL_AUTH_TOKEN }}"
|
|
||||||
|
|
||||||
- name: sonr
|
- name: sonr
|
||||||
ids: [sonr]
|
ids: [sonr]
|
||||||
commit_author:
|
commit_author:
|
||||||
@@ -154,7 +76,7 @@ brews:
|
|||||||
email: bot@goreleaser.com
|
email: bot@goreleaser.com
|
||||||
directory: Formula
|
directory: Formula
|
||||||
caveats: "Run a local sonr node and access it with the hway proxy"
|
caveats: "Run a local sonr node and access it with the hway proxy"
|
||||||
homepage: "https://onsonr.dev"
|
homepage: "https://onson.dev"
|
||||||
description: "Sonr is a decentralized, permissionless, and censorship-resistant identity network."
|
description: "Sonr is a decentralized, permissionless, and censorship-resistant identity network."
|
||||||
dependencies:
|
dependencies:
|
||||||
- name: ipfs
|
- name: ipfs
|
||||||
@@ -168,12 +90,15 @@ release:
|
|||||||
github:
|
github:
|
||||||
owner: onsonr
|
owner: onsonr
|
||||||
name: sonr
|
name: sonr
|
||||||
name_template: "Release {{.Version}}"
|
name_template: "{{ .Tag }} | {{ .Env.RELEASE_DATE }}"
|
||||||
draft: false
|
draft: false
|
||||||
replace_existing_draft: true
|
replace_existing_draft: true
|
||||||
replace_existing_artifacts: true
|
replace_existing_artifacts: true
|
||||||
extra_files:
|
extra_files:
|
||||||
- glob: ./README*
|
- glob: ./README*
|
||||||
|
- glob: ./scripts/install.sh
|
||||||
|
- glob: ./scripts/test_node.sh
|
||||||
|
- glob: ./scripts/test_ics_node.sh
|
||||||
|
|
||||||
announce:
|
announce:
|
||||||
telegram:
|
telegram:
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
GOPATH:
|
|
||||||
sh: go env GOPATH
|
|
||||||
BIN_DIR: "{{.GOPATH}}/bin"
|
|
||||||
BINARY: "{{.BIN_DIR}}/hway"
|
|
||||||
OS:
|
|
||||||
sh: uname -s
|
|
||||||
ARCH:
|
|
||||||
sh: uname -m
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
build:
|
|
||||||
desc: Build the hway binary
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- gum spin --spinner dot --title "Build Hway Single Target ({{.OS}}/{{.ARCH}})..." -- goreleaser build --snapshot --clean --single-target --id hway -o {{.BIN_DIR}}/hway
|
|
||||||
|
|
||||||
install:
|
|
||||||
desc: Install the hway binary
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- gum spin --spinner dot --title "Install Hway Single Target ({{.OS}}/{{.ARCH}})..." -- make install-hway
|
|
||||||
|
|
||||||
start:
|
|
||||||
desc: Start the hway daemon
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- "{{.BINARY}}"
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
ROOT:
|
|
||||||
sh: git rev-parse --show-toplevel
|
|
||||||
tasks:
|
|
||||||
init:
|
|
||||||
desc: Setup ipfs with Cloudflare
|
|
||||||
silent: true
|
|
||||||
vars:
|
|
||||||
PEERS: |
|
|
||||||
'[
|
|
||||||
{"ID": "QmcFf2FH3CEgTNHeMRGhN7HNHU1EXAxoEk6EFuSyXCsvRE", "Addrs": ["/dnsaddr/node-1.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcFmLd5ySfk2WZuJ1mfSWLDjdmHZq7rSAua4GoeSQfs1z", "Addrs": ["/dnsaddr/node-2.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfFmzSDVbwexQ9Au2pt5YEXHK5xajwgaU6PpkbLWerMa", "Addrs": ["/dnsaddr/node-3.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfJeB3Js1FG7T8YaZATEiaHqNKVdQfybYYkbT1knUswx", "Addrs": ["/dnsaddr/node-4.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfVvzK4tMdFmpJjEKDUoqRgP4W9FnmJoziYX5GXJJ8eZ", "Addrs": ["/dnsaddr/node-5.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfZD3VKrUxyP9BbyUnZDpbqDnT7cQ4WjPP8TRLXaoE7G", "Addrs": ["/dnsaddr/node-6.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfZP2LuW4jxviTeG8fi28qjnZScACb8PEgHAc17ZEri3", "Addrs": ["/dnsaddr/node-7.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfgsJsMtx6qJb74akCw1M24X1zFwgGo11h1cuhwQjtJP", "Addrs": ["/dnsaddr/node-8.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "Qmcfr2FC7pFzJbTSDfYaSy1J8Uuy8ccGLeLyqJCKJvTHMi", "Addrs": ["/dnsaddr/node-9.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfR3V5YAtHBzxVACWCzXTt26SyEkxdwhGJ6875A8BuWx", "Addrs": ["/dnsaddr/node-10.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "Qmcfuo1TM9uUiJp6dTbm915Rf1aTqm3a3dnmCdDQLHgvL5", "Addrs": ["/dnsaddr/node-11.ingress.cloudflare-ipfs.com"]},
|
|
||||||
{"ID": "QmcfV2sg9zaq7UUHVCGuSvT2M2rnLBAPsiE79vVyK3Cuev", "Addrs": ["/dnsaddr/node-12.ingress.cloudflare-ipfs.com"]}
|
|
||||||
]'
|
|
||||||
cmds:
|
|
||||||
- rm -rf ~/.ipfs
|
|
||||||
- ipfs init
|
|
||||||
- ipfs config --json Peering.Peers {{.PEERS}}
|
|
||||||
- ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
|
|
||||||
|
|
||||||
mount:
|
|
||||||
desc: Mount the ipfs,ipns directories
|
|
||||||
silent: true
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
cmds:
|
|
||||||
- ipfs config --json Mounts.FuseAllowOther true
|
|
||||||
|
|
||||||
start:
|
|
||||||
desc: Start the ipfs daemon
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- cmd: ipfs daemon --migrate
|
|
||||||
platforms:
|
|
||||||
- darwin
|
|
||||||
- task: mount
|
|
||||||
- cmd: ipfs daemon --mount
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
GOPATH:
|
|
||||||
sh: go env GOPATH
|
|
||||||
BIN_DIR: "{{.GOPATH}}/bin"
|
|
||||||
OS:
|
|
||||||
sh: uname -s
|
|
||||||
ARCH:
|
|
||||||
sh: uname -m
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
init:
|
|
||||||
desc: Initialize postgresql
|
|
||||||
silent: true
|
|
||||||
dir: deploy/apps/chainindex
|
|
||||||
cmds:
|
|
||||||
- cmd: sudo -u postgres psql -f seed.sql
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
- cmd: sudo -u postgres psql -d chainindex -f schema.sql
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
reset:
|
|
||||||
desc: Reset postgresql
|
|
||||||
silent: true
|
|
||||||
dir: deploy/apps/chainindex
|
|
||||||
cmds:
|
|
||||||
- cmd: sudo -u postgres psql -d chainindex -f reset.sql
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
BINARY: sonrd
|
|
||||||
BUILD_FLAGS: -mod=readonly -trimpath
|
|
||||||
BUILD_TAGS: netgo,ledger
|
|
||||||
COMMIT:
|
|
||||||
sh: git rev-parse HEAD
|
|
||||||
VERSION:
|
|
||||||
sh: git describe --tags --always
|
|
||||||
tasks:
|
|
||||||
build:
|
|
||||||
desc: Build the sonrd binary
|
|
||||||
cmds:
|
|
||||||
- >
|
|
||||||
go build
|
|
||||||
{{.BUILD_FLAGS}}
|
|
||||||
-tags "{{.BUILD_TAGS}}"
|
|
||||||
-ldflags "
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Name=sonr
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.AppName=sonrd
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Version={{.VERSION}}
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.Commit={{.COMMIT}}
|
|
||||||
-X github.com/cosmos/cosmos-sdk/version.BuildTags={{.BUILD_TAGS}}
|
|
||||||
"
|
|
||||||
-o ./build/{{.BINARY}}
|
|
||||||
./cmd/sonrd
|
|
||||||
env:
|
|
||||||
CGO_ENABLED: 1
|
|
||||||
GOARCH:
|
|
||||||
sh: go env GOARCH
|
|
||||||
GOOS:
|
|
||||||
sh: go env GOOS
|
|
||||||
|
|
||||||
install:
|
|
||||||
desc: Install sonrd
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- gum spin --spinner dot --title "Installing sonr daemon..." -- make install
|
|
||||||
|
|
||||||
start:
|
|
||||||
desc: Start the sonr node
|
|
||||||
cmds:
|
|
||||||
- sh scripts/test_dop_node.sh
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
ROOT:
|
|
||||||
sh: git rev-parse --show-toplevel
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
init:
|
|
||||||
desc: Configure synapse homeserver with PKL
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- pkl eval pkl/matrix.net/Homeserver.pkl -f yaml -o deploy/conf/synapse/homeserver.yaml
|
|
||||||
env:
|
|
||||||
MATRIX_CLIENT_NAME: sonr.id
|
|
||||||
MATRIX_SERVER_NAME: sonr.id
|
|
||||||
MATRIX_SERVER_URL: http://localhost:8008
|
|
||||||
MATRIX_SLIDING_SYNC_PROXY: http://localhost:8008
|
|
||||||
MATRIX_PSQL_CONN: postgresql://matrixhs_user:matrixhs_password123@localhost:5432/sonr
|
|
||||||
MATRIX_REGISTRATION_SHARED_SECRET: secret
|
|
||||||
MATRIX_ENABLE_RECATCHA: false
|
|
||||||
MATRIX_RECATCHA_PUBLIC_KEY: ""
|
|
||||||
MATRIX_RECATCHA_PRIVATE_KEY: ""
|
|
||||||
MATRIX_RECATCHA_BYPASS_SECRET: ""
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
ROOT:
|
|
||||||
sh: git rev-parse --show-toplevel
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
init:
|
|
||||||
desc: Configure tigerbeetle database
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- pkl eval pkl/matrix.net/Homeserver.pkl -f yaml -o deploy/conf/synapse/homeserver.yaml
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
*out
|
||||||
|
*logs
|
||||||
|
*actions
|
||||||
|
*notifications
|
||||||
|
*tools
|
||||||
|
plugins
|
||||||
|
user_trunk.yaml
|
||||||
|
user.yaml
|
||||||
|
tmp
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
linters:
|
||||||
|
disable:
|
||||||
|
- unused # Disables unreachable code checking
|
||||||
|
|
||||||
|
run:
|
||||||
|
# Exclude test files from analysis
|
||||||
|
tests: false
|
||||||
|
|
||||||
|
# Define which files and directories to exclude
|
||||||
|
issues:
|
||||||
|
exclude-rules:
|
||||||
|
# Exclude all test files
|
||||||
|
- path: _test\.go
|
||||||
|
linters:
|
||||||
|
- all
|
||||||
|
|
||||||
|
# Exclude specific directories
|
||||||
|
exclude-dirs:
|
||||||
|
- api/did/v1
|
||||||
|
- api/dwn/v1
|
||||||
|
- api/svc/v1
|
||||||
|
- internal
|
||||||
|
|
||||||
|
# Exclude specific file patterns
|
||||||
|
exclude-files:
|
||||||
|
- ".*\\.pb\\.go$"
|
||||||
|
- ".*_templ\\.go$"
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Following source doesn't work in most setups
|
||||||
|
ignored:
|
||||||
|
- SC1090
|
||||||
|
- SC1091
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
# Prettier friendly markdownlint config (all formatting rules disabled)
|
||||||
|
extends: markdownlint/style/prettier
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
edition = "2021"
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
enable=all
|
||||||
|
source-path=SCRIPTDIR
|
||||||
|
disable=SC2154
|
||||||
|
|
||||||
|
# If you're having issues with shellcheck following source, disable the errors via:
|
||||||
|
# disable=SC1090
|
||||||
|
# disable=SC1091
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
rules:
|
||||||
|
quoted-strings:
|
||||||
|
required: only-when-needed
|
||||||
|
extra-allowed: ["{|}"]
|
||||||
|
key-duplicates: {}
|
||||||
|
octal-values:
|
||||||
|
forbid-implicit-octal: true
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# This file controls the behavior of Trunk: https://docs.trunk.io/cli
|
||||||
|
# To learn more about the format of this file, see https://docs.trunk.io/reference/trunk-yaml
|
||||||
|
version: 0.1
|
||||||
|
cli:
|
||||||
|
version: 1.22.8
|
||||||
|
# Trunk provides extensibility via plugins. (https://docs.trunk.io/plugins)
|
||||||
|
plugins:
|
||||||
|
sources:
|
||||||
|
- id: trunk
|
||||||
|
ref: v1.6.6
|
||||||
|
uri: https://github.com/trunk-io/plugins
|
||||||
|
# Many linters and tools depend on runtimes - configure them here. (https://docs.trunk.io/runtimes)
|
||||||
|
runtimes:
|
||||||
|
enabled:
|
||||||
|
- go@1.23.0
|
||||||
|
- node@18.20.5
|
||||||
|
- python@3.10.8
|
||||||
|
# This is the section where you manage your linters. (https://docs.trunk.io/check/configuration)
|
||||||
|
lint:
|
||||||
|
enabled:
|
||||||
|
- actionlint@1.7.6
|
||||||
|
- checkov@3.2.347
|
||||||
|
- clippy@1.65.0
|
||||||
|
- git-diff-check
|
||||||
|
- gofmt@1.20.4
|
||||||
|
- golangci-lint@1.62.2
|
||||||
|
- hadolint@2.12.1-beta
|
||||||
|
# - markdownlint@0.43.0
|
||||||
|
- osv-scanner@1.9.2
|
||||||
|
- prettier@3.4.2
|
||||||
|
- rustfmt@1.65.0
|
||||||
|
# - shellcheck@0.10.0
|
||||||
|
# - shfmt@3.6.0
|
||||||
|
- taplo@0.9.3
|
||||||
|
- trufflehog@3.88.0
|
||||||
|
actions:
|
||||||
|
enabled:
|
||||||
|
- trunk-announce
|
||||||
|
- trunk-check-pre-push
|
||||||
|
- trunk-fmt-pre-commit
|
||||||
|
- trunk-upgrade-available
|
||||||
+684
@@ -0,0 +1,684 @@
|
|||||||
|
## v0.6.2 (2025-01-06)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- simplify release process and remove unnecessary tasks
|
||||||
|
- remove devcontainer configuration
|
||||||
|
|
||||||
|
## v0.6.1 (2024-12-30)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- convert highway sink schema to SQLite
|
||||||
|
- **scopes**: add Web Authentication API documentation
|
||||||
|
- add install script for Sonr binaries
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- Handle only 500 errors in ErrorHandler
|
||||||
|
- Return only on 500 errors in error handler
|
||||||
|
- update sqlc queries to match schema and use SQLite conventions
|
||||||
|
- Rename DecodeWasmContext to decodeWasmContext
|
||||||
|
- resolve lint errors in WASMMiddleware function
|
||||||
|
- prevent automatic version bumps from dependabot
|
||||||
|
- correct merge workflow to increment patch version
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove outdated scopes
|
||||||
|
- remove unnecessary seed message
|
||||||
|
- Update sqlc queries to match schema and sqlite conventions
|
||||||
|
- move gateway and vault components to new locations
|
||||||
|
- **scopes**: simplify scopes.json structure
|
||||||
|
- **scopes**: rename and reorganize scopes
|
||||||
|
- **api**: remove unused Allocate RPC from Query service
|
||||||
|
- remove postgresql tasks
|
||||||
|
- remove unused AI PR body generator step
|
||||||
|
- simplify Taskfile and remove unused chain configurations
|
||||||
|
|
||||||
|
## v0.6.0 (2024-12-24)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- Add option to create draft issues from the new-issue script
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- rename DID, DWN, and SVC modules to core-dids, core-dwns, and core-svcs respectively
|
||||||
|
- rename MsgInitialize to MsgSpawn for clarity
|
||||||
|
- rename scopes in .github/scopes.json for better clarity
|
||||||
|
|
||||||
|
## v0.5.28 (2024-12-22)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- Sink
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- update testnet configuration
|
||||||
|
- optimize GitHub Actions workflow triggers (#1204)
|
||||||
|
- Move embed
|
||||||
|
|
||||||
|
## v0.1.6 (2024-12-16)
|
||||||
|
|
||||||
|
## v0.5.26 (2024-12-13)
|
||||||
|
|
||||||
|
## v0.5.25 (2024-12-11)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- enable GoReleaser releases on tags and snapshots
|
||||||
|
- automate release on tag and workflow dispatch
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- Correct regular expression for version tags in release workflow
|
||||||
|
|
||||||
|
## v0.5.24 (2024-12-11)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- prevent duplicate releases
|
||||||
|
|
||||||
|
## v0.5.23 (2024-12-11)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- rename scheduled release workflow to versioned release
|
||||||
|
- remove changelog from release artifacts
|
||||||
|
|
||||||
|
## v0.5.22 (2024-12-11)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- Implement passkey-based authentication and registration flow
|
||||||
|
- allow manual triggering of deployment workflow
|
||||||
|
- add start-tui command for interactive mode
|
||||||
|
- add coin selection and update passkey input in registration form
|
||||||
|
- add hway command for Sonr DID gateway
|
||||||
|
- Conditionally install process-compose only if binary not found
|
||||||
|
- Add process-compose support with custom start and down commands
|
||||||
|
- implement passkey registration flow
|
||||||
|
- Improve createProfile form layout with wider max-width and enhanced spacing
|
||||||
|
- improve index page UI with new navigation buttons and remove redundant settings buttons
|
||||||
|
- Make input rows responsive with grid layout for mobile and desktop
|
||||||
|
- enhance index page with additional settings buttons and style adjustments
|
||||||
|
- implement passkey-based authentication
|
||||||
|
- add support for Cloudsmith releases
|
||||||
|
- add go dependency and enhance devbox environment variables
|
||||||
|
- update create profile form placeholders and handle
|
||||||
|
- add DID-based authentication middleware
|
||||||
|
- Add validation for human verification slider sum in CreateProfile form
|
||||||
|
- implement passkey registration flow
|
||||||
|
- Update WebAuthn credential handling with modern browser standards
|
||||||
|
- Streamline passkey registration with automatic form submission
|
||||||
|
- Add credential parsing and logging in register finish handler
|
||||||
|
- Add credential details row with icon after passkey creation
|
||||||
|
- Add form validation for passkey credential input
|
||||||
|
- implement passkey registration flow
|
||||||
|
- Add hidden input to store passkey credential data for form submission
|
||||||
|
- add CI workflow for deploying network
|
||||||
|
- add hway binary support and Homebrew formula
|
||||||
|
- remove username from passkey creation
|
||||||
|
- implement passkey registration flow
|
||||||
|
- add passkey creation functionality
|
||||||
|
- add CNAME for onsonr.dev domain
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- use Unix domain sockets for devnet processes
|
||||||
|
- correct workflow name and improve devnet deployment process
|
||||||
|
- correct title of profile creation page
|
||||||
|
- rename devbox start script to up and remove stop script
|
||||||
|
- Consolidate archive configuration and add LICENSE file
|
||||||
|
- Improve cross-browser passkey credential handling and encoding
|
||||||
|
- Remove commented-out code in passkey registration script
|
||||||
|
- remove line-clamp from tailwind config
|
||||||
|
- remove unnecessary background and restart settings from process-compose.yaml
|
||||||
|
- suppress process-compose server output and log to file
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove unnecessary git fetch step in deploy workflow
|
||||||
|
- remove obsolete interchain test dependencies
|
||||||
|
- update index views to use new nebula components
|
||||||
|
- move Wasm related code to pkg/common/wasm
|
||||||
|
- migrate config package to pkg directory
|
||||||
|
- migrate to new configuration system and model definitions
|
||||||
|
- move session package to pkg directory
|
||||||
|
- Refactor registration forms to use UI components
|
||||||
|
- move gateway config to vault package
|
||||||
|
- improve command line flag descriptions and variable names
|
||||||
|
- refactor hway command to use echo framework for server
|
||||||
|
- Update root command to load EnvImpl from cobra flags
|
||||||
|
- Modify command flags and environment loading logic in cmds.go
|
||||||
|
- improve build process and move process-compose.yaml
|
||||||
|
- remove unused devbox.json and related configurations
|
||||||
|
- Improve mobile layout responsiveness for Rows and Columns components
|
||||||
|
- Remove max-w-fit from Rows component
|
||||||
|
- replace session package with context package
|
||||||
|
- rename database initialization function
|
||||||
|
- move session management to dedicated database module
|
||||||
|
- remove unused UI components related to wallet and index pages
|
||||||
|
- consolidate handlers into single files
|
||||||
|
- move gateway and vault packages to internal directory
|
||||||
|
- Move registration form components to dedicated directory
|
||||||
|
- remove unused devbox package
|
||||||
|
- remove devbox configuration
|
||||||
|
- move vault package to app directory
|
||||||
|
- improve code structure within gateway package
|
||||||
|
- move gateway package to app directory
|
||||||
|
- move vault package internal components to root
|
||||||
|
- migrate layout imports to common styles package
|
||||||
|
- Move form templates and styles to common directory
|
||||||
|
- consolidate authentication and DID handling logic
|
||||||
|
- Improve WebAuthn credential handling and validation in register finish route
|
||||||
|
- remove profile card component
|
||||||
|
- Simplify passkey registration UI and move profile component inline
|
||||||
|
- Update credential logging with transport and ID type
|
||||||
|
- Update register handler to use protocol.CredentialDescriptor struct
|
||||||
|
- Update credential handling to use protocol.CredentialDescriptor
|
||||||
|
- improve profile card styling and functionality
|
||||||
|
- Simplify session management and browser information extraction
|
||||||
|
- Update PeerInfo to extract and store comprehensive device information
|
||||||
|
- improve address display in property details
|
||||||
|
- remove unused documentation generation script
|
||||||
|
- replace sonr/pkg/styles/layout with nebula/ui/layout
|
||||||
|
- migrate UI components to nebula module
|
||||||
|
- improve scopes.json structure and update scripts for better usability
|
||||||
|
|
||||||
|
## v0.5.20 (2024-12-07)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- simplify CI workflow by removing redundant asset publishing steps
|
||||||
|
|
||||||
|
## v0.5.19 (2024-12-06)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add support for parent field and resources list in Capability message
|
||||||
|
- add fast reflection methods for Capability and Resource
|
||||||
|
- add gum package and update devbox configuration
|
||||||
|
- add new button components and layout improvements
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- adjust fullscreen modal close button margin
|
||||||
|
- update devbox lockfile
|
||||||
|
- resolve rendering issue in login modal
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- rename accaddr package to address
|
||||||
|
- Update Credential table to match WebAuthn Credential Descriptor
|
||||||
|
- Deployment setup
|
||||||
|
- migrate build system from Taskfile to Makefile
|
||||||
|
- rename Assertion to Account and update related code
|
||||||
|
- remove unused TUI components
|
||||||
|
- Move IPFS interaction functions to common package
|
||||||
|
- remove dependency on DWN.pkl
|
||||||
|
- remove unused dependencies and simplify module imports
|
||||||
|
- Rename x/vault -> x/dwn and x/service -> x/svc
|
||||||
|
- move resolver formatter to services package
|
||||||
|
- remove web documentation
|
||||||
|
- update devbox configuration and scripts
|
||||||
|
- rename layout component to root
|
||||||
|
- refactor authentication pages into their own modules
|
||||||
|
- update templ version to v0.2.778 and remove unused air config
|
||||||
|
- move signer implementation to mpc package
|
||||||
|
|
||||||
|
## v0.5.18 (2024-11-06)
|
||||||
|
|
||||||
|
## v0.5.17 (2024-11-05)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add remote client constructor
|
||||||
|
- add avatar image components
|
||||||
|
- add SVG CDN Illustrations to marketing architecture
|
||||||
|
- **marketing**: refactor marketing page components
|
||||||
|
- Refactor intro video component to use a proper script template
|
||||||
|
- Move Alpine.js script initialization to separate component
|
||||||
|
- Add intro video modal component
|
||||||
|
- add homepage architecture section
|
||||||
|
- add Hero section component with stats and buttons
|
||||||
|
- **css**: add new utility classes for group hover
|
||||||
|
- implement authentication register finish endpoint
|
||||||
|
- add controller creation step to allocate
|
||||||
|
- Update service module README based on protobuf files
|
||||||
|
- Update x/macaroon/README.md with details from protobuf files
|
||||||
|
- update Vault README with details from proto files
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- update file paths in error messages
|
||||||
|
- update intro video modal script
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- update marketing section architecture
|
||||||
|
- change verification table id
|
||||||
|
- **proto**: remove macaroon proto
|
||||||
|
- rename ValidateBasic to Validate
|
||||||
|
- rename session cookie key
|
||||||
|
- remove unused sync-initial endpoint
|
||||||
|
- remove formatter.go from service module
|
||||||
|
|
||||||
|
## v0.5.16 (2024-10-21)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- include assets generation in wasm build
|
||||||
|
|
||||||
|
## v0.5.15 (2024-10-21)
|
||||||
|
|
||||||
|
## v0.5.14 (2024-10-21)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove StakingKeeper dependency from GlobalFeeDecorator
|
||||||
|
|
||||||
|
## v0.5.13 (2024-10-21)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add custom secp256k1 pubkey
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- update gRPC client to use new request types
|
||||||
|
- use RawPublicKey instead of PublicKey in macaroon issuer
|
||||||
|
- improve error handling in DID module
|
||||||
|
|
||||||
|
## v0.5.12 (2024-10-18)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add User-Agent and Platform to session
|
||||||
|
- introduce AuthState enum for authentication state
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **version**: revert version bump to 0.5.11
|
||||||
|
- **version**: update version to 0.5.12
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove dependency on proto change detection
|
||||||
|
- update asset publishing configuration
|
||||||
|
|
||||||
|
## v0.5.11 (2024-10-10)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- nebula assets served from CDN
|
||||||
|
- use CDN for nebula frontend assets
|
||||||
|
- add static hero section content to homepage
|
||||||
|
- add wrangler scripts for development, build, and deployment
|
||||||
|
- remove build configuration
|
||||||
|
- move gateway web code to dedicated directory
|
||||||
|
- add PubKey fast reflection
|
||||||
|
- **macaroon**: add transaction allowlist/denylist caveats
|
||||||
|
- add PR labeler
|
||||||
|
- **devbox**: remove hway start command
|
||||||
|
- add GitHub Actions workflow for running tests
|
||||||
|
- add workflow for deploying Hway to Cloudflare Workers
|
||||||
|
- Publish configs to R2
|
||||||
|
- integrate nebula UI with worker-assets-gen
|
||||||
|
- extract reusable layout components
|
||||||
|
- Implement service worker for IPFS vault
|
||||||
|
- implement CDN support for assets
|
||||||
|
- add payment method support
|
||||||
|
- add support for public key management
|
||||||
|
- add ModalForm component
|
||||||
|
- add LoginStart and RegisterStart routes
|
||||||
|
- implement authentication views
|
||||||
|
- add json tags to config structs
|
||||||
|
- implement templ forms for consent privacy, credential assert, credential register, and profile details
|
||||||
|
- **vault**: introduce assembly of the initial vault
|
||||||
|
- add client logos to homepage
|
||||||
|
- add tailwind utility classes
|
||||||
|
- implement new profile card component
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- Correct source directory for asset publishing
|
||||||
|
- install dependencies before nebula build
|
||||||
|
- update Schema service to use new API endpoint
|
||||||
|
- fix broken logo image path
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove unnecessary branch configuration from scheduled release workflow
|
||||||
|
- update dwn configuration generation import path
|
||||||
|
- use nebula/routes instead of nebula/global
|
||||||
|
- move index template to routes package
|
||||||
|
- remove cdn package and move assets to global styles
|
||||||
|
- move nebula assets to hway build directory
|
||||||
|
- remove docker build and deployment
|
||||||
|
- rename internal/session package to internal/ctx
|
||||||
|
- remove unused fields from
|
||||||
|
- rename PR_TEMPLATE to PULL_REQUEST_TEMPLATE
|
||||||
|
- remove devbox.json init hook
|
||||||
|
- rename sonrd dockerfile to Dockerfile
|
||||||
|
- remove unused dependency
|
||||||
|
- rename 'global/cdn' to 'assets'
|
||||||
|
- move CDN assets to separate folder
|
||||||
|
- move Pkl module definitions to dedicated package
|
||||||
|
- move CDN assets to js/ folder
|
||||||
|
- remove unused component templates
|
||||||
|
- move ui components to global
|
||||||
|
- move view handlers to router package
|
||||||
|
|
||||||
|
## v0.5.10 (2024-10-07)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **blocks**: remove button component
|
||||||
|
|
||||||
|
## v0.5.9 (2024-10-06)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add Motr support
|
||||||
|
- update UIUX PKL to utilize optional fields
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- Update source directory for asset publishing
|
||||||
|
|
||||||
|
## v0.5.8 (2024-10-04)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- Remove unused logs configuration
|
||||||
|
|
||||||
|
## v0.5.7 (2024-10-04)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **devbox**: use process-compose for testnet services
|
||||||
|
- remove motr.mjs dependency
|
||||||
|
- add markdown rendering to issue templates
|
||||||
|
- update issue templates for better clarity
|
||||||
|
- add issue templates for tracking and task issues
|
||||||
|
- add issue templates for bug report and tracking
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- update issue template headings
|
||||||
|
- rename bug-report issue template to bug
|
||||||
|
|
||||||
|
## v0.5.6 (2024-10-03)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- introduce docker-compose based setup
|
||||||
|
- add hway and sonr processes to dev environment
|
||||||
|
|
||||||
|
## v0.5.5 (2024-10-03)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add rudimentary DidController table
|
||||||
|
- update home section with new features
|
||||||
|
- introduce Home model and refactor views
|
||||||
|
- **nebula**: create Home model for home page
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- reorganize pkl files for better separation of concerns
|
||||||
|
- rename msg_server_test.go to rpc_test.go
|
||||||
|
|
||||||
|
## v0.5.4 (2024-10-02)
|
||||||
|
|
||||||
|
## v0.5.3 (2024-10-02)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- remove unnecessary telegram message template
|
||||||
|
|
||||||
|
## v0.5.2 (2024-10-02)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **service**: integrate group module (#1104)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- revert version bump to 0.5.1
|
||||||
|
|
||||||
|
## v0.5.1 (2024-10-02)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- move Motr API to state package
|
||||||
|
|
||||||
|
## v0.5.0 (2024-10-02)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- allow multiple macaroons with the same id
|
||||||
|
|
||||||
|
## v0.4.5 (2024-10-02)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- **release**: add docker images for sonrd and motr
|
||||||
|
- update homepage with new visual design
|
||||||
|
- add DID to vault genesis schema
|
||||||
|
- add video component
|
||||||
|
- add video component
|
||||||
|
- add hx-get attribute to primary button in hero section
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- use correct secret for docker login
|
||||||
|
- **layout**: add missing favicon
|
||||||
|
- **hero**: Use hx-swap for primary button to prevent flicker
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- use single GITHUB_TOKEN for release workflow
|
||||||
|
- update workflow variables
|
||||||
|
|
||||||
|
## v0.4.2 (2024-10-01)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- use single GITHUB_TOKEN for release workflow
|
||||||
|
|
||||||
|
## v0.4.1 (2024-10-01)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- Implement session management
|
||||||
|
- allow manual release triggers
|
||||||
|
- add Input and RegistrationForm models
|
||||||
|
- add new utility classes
|
||||||
|
- add login and registration pages
|
||||||
|
- add tailwindcss utilities
|
||||||
|
- add support for ARM64 architecture
|
||||||
|
- add DWN resolver field
|
||||||
|
- add stats section to homepage
|
||||||
|
- implement hero section using Pkl
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **version**: update version number to 0.4.0
|
||||||
|
- update release workflow to use latest tag
|
||||||
|
- **versioning**: revert version to 0.9.0
|
||||||
|
- **cta**: Fix typo in CTA title
|
||||||
|
- change bento section title to reflect security focus
|
||||||
|
- adjust hero image dimensions
|
||||||
|
- **Input**: Change type from to
|
||||||
|
- update hero image height in config.pkl
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- move home page sections to home package
|
||||||
|
- rename motrd to motr
|
||||||
|
- update hero image dimensions
|
||||||
|
- move nebula configuration to static file
|
||||||
|
|
||||||
|
## v0.4.0 (2024-09-30)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add PKL schema for message formats
|
||||||
|
- add Homebrew tap for sonr
|
||||||
|
- update release workflow to use latest tag
|
||||||
|
- **dwn**: add wasm build for dwn
|
||||||
|
- add macaroon and oracle genesis states
|
||||||
|
- add scheduled binary release workflow
|
||||||
|
- introduce process-compose for process management
|
||||||
|
- add counter animation to hero section
|
||||||
|
- add registration page
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- Enable scheduled release workflow
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove old changelog entries
|
||||||
|
- rename buf-publish.yml to publish-assets.yml
|
||||||
|
- remove unused field from
|
||||||
|
- remove unnecessary checkout in scheduled-release workflow
|
||||||
|
- rename build ID to sonr
|
||||||
|
- remove unnecessary release existence check
|
||||||
|
- move dwn wasm build to pkg directory
|
||||||
|
|
||||||
|
## v0.3.1 (2024-09-29)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- move nebula/pages to pkg/nebula/pages
|
||||||
|
|
||||||
|
## v0.3.0 (2024-09-29)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- add buf.lock for proto definitions
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- remove unused linting rules
|
||||||
|
- update proto breaking check target to master branch
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- remove unused lock files and configurations
|
||||||
|
|
||||||
|
## v0.2.0 (2024-09-29)
|
||||||
|
|
||||||
|
### Feat
|
||||||
|
|
||||||
|
- disable goreleaser workflow
|
||||||
|
- update workflows to include master branch
|
||||||
|
- remove global style declaration
|
||||||
|
- **oracle**: add oracle module
|
||||||
|
- optimize IPFS configuration for better performance
|
||||||
|
- add local IPFS bootstrap script and refactor devbox config
|
||||||
|
- add AllocateVault HTTP endpoint
|
||||||
|
- add WebAuthn credential management functionality
|
||||||
|
- remove unused coins interface
|
||||||
|
- remove global integrity proof from genesis state
|
||||||
|
- add vault module
|
||||||
|
- enable buf.build publishing on master and develop branches
|
||||||
|
- add Gitflow workflow for syncing branches
|
||||||
|
- add automated production release workflow
|
||||||
|
- **ui**: implement profile page
|
||||||
|
- 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
|
||||||
|
- add DID method for each coin
|
||||||
|
- Expand KeyType enum and update KeyInfo message in genesis.proto
|
||||||
|
- Add whitelisted key types to genesis params
|
||||||
|
- Add DID grants protobuf definition
|
||||||
|
- Add fields to KeyInfo struct to distinguish CBOR and standard blockchain key types
|
||||||
|
- Add new message types for AssetInfo, ChainInfo, Endpoint, ExplorerInfo, FeeInfo, and KeyInfo
|
||||||
|
- run sonr-node container in testnet network and make network external
|
||||||
|
- Add docker-compose.yaml file to start a Sonr testnet node
|
||||||
|
- configure Sonr testnet environment
|
||||||
|
- Update Dockerfile to start and run a testnet
|
||||||
|
- add Equal methods for AssetInfo and ChainInfo types
|
||||||
|
- Add ProveWitness and SyncVault RPCs
|
||||||
|
- Add MsgRegisterService to handle service registration
|
||||||
|
- Add MsgRegisterService to handle service registration
|
||||||
|
- add enums.pulsar.go file for PermissionScope enum
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- ensure go version is up-to-date
|
||||||
|
- use GITHUB_TOKEN for version bump workflow
|
||||||
|
- update account table interface to use address, chain and network
|
||||||
|
- **ci**: update docker vm release workflow with new token
|
||||||
|
- use mnemonic phrases for test account keys
|
||||||
|
- reduce motr proxy shutdown timeout
|
||||||
|
- **nebula**: use bunx for tailwindcss build
|
||||||
|
- **proto**: update protobuf message index numbers
|
||||||
|
- **ante**: reduce POA rate floor and ceiling
|
||||||
|
- 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
|
||||||
|
- remove unused imports and simplify KeyInfo message
|
||||||
|
- bind node ports to localhost
|
||||||
|
- Update docker-compose network name to dokploy-network
|
||||||
|
- Update network name to dokploy
|
||||||
|
- remove unused port mapping
|
||||||
|
- Update docker-compose.yaml to use correct volume path
|
||||||
|
- update docker-compose volume name
|
||||||
|
- Update docker-compose.yaml to use shell directly for sonrd command
|
||||||
|
- replace "sh" with "/bin/sh" in docker-compose.yaml command
|
||||||
|
- Update runner image dependencies for debian-11
|
||||||
|
- **deps**: update golang image to 1.21
|
||||||
|
- **chains**: update nomic chain build target
|
||||||
|
- Remove unused `Meta` message from `genesis.proto`
|
||||||
|
- Add ProveWitness and SyncVault RPCs
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
- adjust source directory for config files (#1102)
|
||||||
|
- Use actions/checkout@v4
|
||||||
|
- remove unused master branch from CI workflow
|
||||||
|
- rename github token secret
|
||||||
|
- remove unnecessary x-cloak styles
|
||||||
|
- optimize oracle genesis proto
|
||||||
|
- remove unused code related to whitelisted assets
|
||||||
|
- update buf publish source directory
|
||||||
|
- adjust devbox configuration to reflect nebula changes
|
||||||
|
- rename msg_server.go to rpc.go
|
||||||
|
- remove devbox integration
|
||||||
|
- move dwn package to app/config
|
||||||
|
- move configuration files to app directory
|
||||||
|
- extract root command creation to separate file
|
||||||
|
- move ipfs setup to function
|
||||||
|
- remove unnecessary proxy config
|
||||||
|
- rename script to
|
||||||
|
- move DWN proxy server logic to separate file
|
||||||
|
- use htmx instead of dwn for vault client
|
||||||
|
- remove unused environment variables
|
||||||
|
- simplify verification method structure
|
||||||
|
- use staking keeper in DID keeper
|
||||||
|
- remove unused dependencies
|
||||||
|
- remove unused image building workflow
|
||||||
|
- add field to
|
||||||
|
- Update KeyKind Enum to have proper naming conventions
|
||||||
|
- Update `DIDNamespace` to have proper naming convention
|
||||||
|
- expose ports directly in docker-compose
|
||||||
|
- remove unused port mappings
|
||||||
|
- streamline script execution
|
||||||
|
- use CMD instead of ENTRYPOINT in Dockerfile
|
||||||
|
- **deps**: Upgrade Debian base image to 11
|
||||||
|
- Simplify the types and properties to keep a consistent structure for the blockchain
|
||||||
|
- remove PERMISSION_SCOPE_IDENTIFIERS_ENS enum value
|
||||||
+3
-1
@@ -1,4 +1,4 @@
|
|||||||
FROM golang:1.22-alpine AS go-builder
|
FROM golang:1.23-alpine AS go-builder
|
||||||
|
|
||||||
SHELL ["/bin/sh", "-ecuxo", "pipefail"]
|
SHELL ["/bin/sh", "-ecuxo", "pipefail"]
|
||||||
|
|
||||||
@@ -31,6 +31,8 @@ RUN LEDGER_ENABLED=false BUILD_TAGS=muslc LINK_STATICALLY=true make build \
|
|||||||
# --------------------------------------------------------
|
# --------------------------------------------------------
|
||||||
FROM debian:11-slim
|
FROM debian:11-slim
|
||||||
|
|
||||||
|
LABEL org.opencontainers.image.source https://github.com/onsonr/sonr
|
||||||
|
|
||||||
COPY --from=go-builder /code/build/sonrd /usr/bin/sonrd
|
COPY --from=go-builder /code/build/sonrd /usr/bin/sonrd
|
||||||
|
|
||||||
# Install dependencies for Debian 11
|
# Install dependencies for Debian 11
|
||||||
|
|||||||
@@ -8,14 +8,16 @@ SDK_PACK := $(shell go list -m github.com/cosmos/cosmos-sdk | sed 's/ /\@/g')
|
|||||||
BINDIR ?= $(GOPATH)/bin
|
BINDIR ?= $(GOPATH)/bin
|
||||||
SIMAPP = ./app
|
SIMAPP = ./app
|
||||||
|
|
||||||
PC_PORT_NUM=42069
|
# Fetch from env
|
||||||
PC_LOG_FILE=./sonr.log
|
RELEASE_DATE ?= $(shell date +%Y).$(shell date +%V).$(shell date +%u)
|
||||||
PC_SOCKET_PATH=/tmp/sonr-net.sock
|
VERSION ?= $(shell echo $(shell git describe --tags) | sed 's/^v//')
|
||||||
|
COMMIT ?= $(shell git log -1 --format='%H')
|
||||||
|
OS ?= $(shell uname -s)
|
||||||
|
ROOT ?= $(shell git rev-parse --show-toplevel)
|
||||||
|
|
||||||
# for dockerized protobuf tools
|
# for dockerized protobuf tools
|
||||||
DOCKER := $(shell which docker)
|
DOCKER := $(shell which docker)
|
||||||
HTTPS_GIT := github.com/onsonr/sonr.git
|
HTTPS_GIT := github.com/onsonr/sonr.git
|
||||||
PROCESS_COMPOSE := $(shell which process-compose)
|
|
||||||
|
|
||||||
export GO111MODULE = on
|
export GO111MODULE = on
|
||||||
|
|
||||||
@@ -75,8 +77,6 @@ ldflags := $(strip $(ldflags))
|
|||||||
BUILD_FLAGS := -tags "$(build_tags_comma_sep)" -ldflags '$(ldflags)' -trimpath
|
BUILD_FLAGS := -tags "$(build_tags_comma_sep)" -ldflags '$(ldflags)' -trimpath
|
||||||
|
|
||||||
# The below include contains the tools and runsim targets.
|
# The below include contains the tools and runsim targets.
|
||||||
include contrib/devtools/Makefile
|
|
||||||
|
|
||||||
all: install lint test
|
all: install lint test
|
||||||
|
|
||||||
build: go.sum
|
build: go.sum
|
||||||
@@ -109,8 +109,14 @@ install: go.sum
|
|||||||
install-hway: go.sum
|
install-hway: go.sum
|
||||||
go install -mod=readonly ./cmd/hway
|
go install -mod=readonly ./cmd/hway
|
||||||
|
|
||||||
|
release: fmt-date
|
||||||
|
@go install github.com/goreleaser/goreleaser/v2@latest
|
||||||
|
RELEASE_DATE=$(RELEASE_DATE) goreleaser release --clean
|
||||||
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
### Tools & dependencies
|
### Tools & dependencies
|
||||||
|
########################################
|
||||||
|
|
||||||
go-mod-cache: go.sum
|
go-mod-cache: go.sum
|
||||||
@echo "--> Download go modules to local cache"
|
@echo "--> Download go modules to local cache"
|
||||||
@@ -136,12 +142,9 @@ clean:
|
|||||||
distclean: clean
|
distclean: clean
|
||||||
rm -rf vendor/
|
rm -rf vendor/
|
||||||
|
|
||||||
init-env:
|
|
||||||
@echo "Installing process-compose"
|
|
||||||
sh scripts/init_env.sh
|
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
### Testing
|
### Testing
|
||||||
|
########################################
|
||||||
|
|
||||||
test: test-unit
|
test: test-unit
|
||||||
test-all: test-race test-cover test-system
|
test-all: test-race test-cover test-system
|
||||||
@@ -312,6 +315,35 @@ sh-testnet: mod-tidy
|
|||||||
|
|
||||||
.PHONY: setup-testnet set-testnet-configs testnet testnet-basic sh-testnet dop-testnet
|
.PHONY: setup-testnet set-testnet-configs testnet testnet-basic sh-testnet dop-testnet
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
### extra utils ###
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
push-docker:
|
||||||
|
@docker build -t ghcr.io/onsonr/sonr:latest .
|
||||||
|
@docker tag ghcr.io/onsonr/sonr:latest ghcr.io/onsonr/sonr:$(VERSION)
|
||||||
|
@docker push ghcr.io/onsonr/sonr:latest
|
||||||
|
@docker push ghcr.io/onsonr/sonr:$(VERSION)
|
||||||
|
|
||||||
|
status:
|
||||||
|
@gh run ls -L 3
|
||||||
|
@gum format -- "# Sonr ($OS-$VERSION)" "- ($(COMMIT)) $ROOT" "- $(RELEASE_DATE)"
|
||||||
|
@sleep 3
|
||||||
|
|
||||||
|
release:
|
||||||
|
@go install github.com/goreleaser/goreleaser/v2@latest
|
||||||
|
@RELEASE_DATE=$(RELEASE_DATE) goreleaser release --clean
|
||||||
|
|
||||||
|
release-dry:
|
||||||
|
@go install github.com/goreleaser/goreleaser/v2@latest
|
||||||
|
@RELEASE_DATE=$(RELEASE_DATE) goreleaser release --snapshot --clean --skip=publish
|
||||||
|
|
||||||
|
release-check:
|
||||||
|
@go install github.com/goreleaser/goreleaser/v2@latest
|
||||||
|
@RELEASE_DATE=$(RELEASE_DATE) goreleaser check
|
||||||
|
|
||||||
|
validate-tag:
|
||||||
|
@sh ./scripts/validate_tag.sh
|
||||||
###############################################################################
|
###############################################################################
|
||||||
### help ###
|
### help ###
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|||||||
-137
@@ -1,137 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
|
|
||||||
vars:
|
|
||||||
VERSION:
|
|
||||||
sh: git describe --tags --abbrev=0
|
|
||||||
COMMIT:
|
|
||||||
sh: git rev-parse --short HEAD
|
|
||||||
ROOT:
|
|
||||||
sh: git rev-parse --show-toplevel
|
|
||||||
OS:
|
|
||||||
sh: uname -s
|
|
||||||
TASKS:
|
|
||||||
sh: task -l
|
|
||||||
DOPPLER_TOKEN:
|
|
||||||
sh: skate get DOPPLER_NETWORK
|
|
||||||
|
|
||||||
includes:
|
|
||||||
hway:
|
|
||||||
taskfile: .taskfiles/Hway.yml
|
|
||||||
ipfs:
|
|
||||||
taskfile: .taskfiles/IPFS.yml
|
|
||||||
postgres:
|
|
||||||
taskfile: .taskfiles/Postgres.yml
|
|
||||||
sonrd:
|
|
||||||
taskfile: .taskfiles/Sonrd.yml
|
|
||||||
synapse:
|
|
||||||
taskfile: .taskfiles/Synapse.yml
|
|
||||||
tigerbeetle:
|
|
||||||
taskfile: .taskfiles/TigerBeetle.yml
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
default:
|
|
||||||
cmds:
|
|
||||||
- gh run ls -L 3
|
|
||||||
- gum format -- "# Sonr ({{.OS}}-{{.VERSION}})" " - ({{.COMMIT}}) {{.ROOT}}"
|
|
||||||
- task -l -j | jq -r '.tasks[].name' | fzf --height=16 | xargs task
|
|
||||||
silent: true
|
|
||||||
|
|
||||||
deps:
|
|
||||||
desc: Install go dependencies
|
|
||||||
silent: true
|
|
||||||
vars:
|
|
||||||
DEPS:
|
|
||||||
[
|
|
||||||
"github.com/apple/pkl-go/cmd/pkl-gen-go@latest",
|
|
||||||
"github.com/sqlc-dev/sqlc/cmd/sqlc@latest",
|
|
||||||
"github.com/goreleaser/goreleaser/v2@latest",
|
|
||||||
"github.com/a-h/templ/cmd/templ@latest",
|
|
||||||
]
|
|
||||||
cmds:
|
|
||||||
- for: { var: DEPS }
|
|
||||||
cmd: gum spin --spinner dot --title "Installing go dependencies..." -- go install {{.ITEM}}
|
|
||||||
|
|
||||||
pkl-gen:
|
|
||||||
desc: Generate PKL files
|
|
||||||
silent: true
|
|
||||||
dir: "pkl/sonr.net"
|
|
||||||
vars:
|
|
||||||
FILES: ["Hway.pkl", "Motr.pkl", "UCAN.pkl"]
|
|
||||||
cmds:
|
|
||||||
- for: { var: FILES }
|
|
||||||
cmd: gum spin --spinner dot --title "Generating PKL in Go..." -- pkl-gen-go {{.ITEM}}
|
|
||||||
|
|
||||||
proto-gen:
|
|
||||||
desc: Generate proto files
|
|
||||||
silent: true
|
|
||||||
cmd: gum spin --spinner dot --title "Generating Protobufs..." -- make proto-gen
|
|
||||||
|
|
||||||
sqlc-gen:
|
|
||||||
desc: Generate SQLC files
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- gum spin --spinner dot --title "Generating SQLC..." -- sqlc generate -f internal/database/sqlc.yaml
|
|
||||||
|
|
||||||
templ-gen:
|
|
||||||
desc: Generate templ files
|
|
||||||
silent: true
|
|
||||||
cmd: gum spin --spinner dot --title "Generating Templ..." -- templ generate
|
|
||||||
|
|
||||||
start:
|
|
||||||
desc: Start the Network
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- task: postgres:reset
|
|
||||||
- task: ipfs:init
|
|
||||||
- task: ipfs:mount
|
|
||||||
- task: sonrd:install
|
|
||||||
- task: hway:build
|
|
||||||
- task: procs-up
|
|
||||||
|
|
||||||
status:
|
|
||||||
desc: Check the status of the Network
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- task: procs-attach
|
|
||||||
|
|
||||||
stop:
|
|
||||||
desc: Stop the Network
|
|
||||||
silent: true
|
|
||||||
cmds:
|
|
||||||
- task: procs-down
|
|
||||||
|
|
||||||
procs-up:
|
|
||||||
internal: true
|
|
||||||
dir: "deploy"
|
|
||||||
cmds:
|
|
||||||
- cmd: process-compose up
|
|
||||||
platforms:
|
|
||||||
- darwin
|
|
||||||
|
|
||||||
- cmd: process-compose up --use-uds --unix-socket /tmp/sonr-network.sock -D
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
procs-down:
|
|
||||||
internal: true
|
|
||||||
dir: "deploy"
|
|
||||||
cmds:
|
|
||||||
- cmd: process-compose down
|
|
||||||
platforms:
|
|
||||||
- darwin
|
|
||||||
|
|
||||||
- cmd: process-compose down --use-uds --unix-socket /tmp/sonr-network.sock
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
procs-attach:
|
|
||||||
internal: true
|
|
||||||
dir: "deploy"
|
|
||||||
cmds:
|
|
||||||
- cmd: process-compose attach --use-uds --unix-socket /tmp/sonr-network.sock
|
|
||||||
platforms:
|
|
||||||
- linux
|
|
||||||
|
|
||||||
- cmd: process-compose attach
|
|
||||||
platforms:
|
|
||||||
- darwin
|
|
||||||
+2515
-427
File diff suppressed because it is too large
Load Diff
+24
-1172
File diff suppressed because it is too large
Load Diff
@@ -19,8 +19,7 @@ import (
|
|||||||
const _ = grpc.SupportPackageIsVersion9
|
const _ = grpc.SupportPackageIsVersion9
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Query_Params_FullMethodName = "/dwn.v1.Query/Params"
|
Query_Params_FullMethodName = "/dwn.v1.Query/Params"
|
||||||
Query_Allocate_FullMethodName = "/dwn.v1.Query/Allocate"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// QueryClient is the client API for Query service.
|
// QueryClient is the client API for Query service.
|
||||||
@@ -31,9 +30,6 @@ 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 *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
|
Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
|
||||||
// Allocate initializes a Target Vault available for claims with a compatible
|
|
||||||
// Authentication mechanism. The default authentication mechanism is WebAuthn.
|
|
||||||
Allocate(ctx context.Context, in *QueryAllocateRequest, opts ...grpc.CallOption) (*QueryAllocateResponse, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type queryClient struct {
|
type queryClient struct {
|
||||||
@@ -54,16 +50,6 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts .
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *queryClient) Allocate(ctx context.Context, in *QueryAllocateRequest, opts ...grpc.CallOption) (*QueryAllocateResponse, error) {
|
|
||||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
|
||||||
out := new(QueryAllocateResponse)
|
|
||||||
err := c.cc.Invoke(ctx, Query_Allocate_FullMethodName, in, out, cOpts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// QueryServer is the server API for Query service.
|
// QueryServer is the server API for Query service.
|
||||||
// All implementations must embed UnimplementedQueryServer
|
// All implementations must embed UnimplementedQueryServer
|
||||||
// for forward compatibility.
|
// for forward compatibility.
|
||||||
@@ -72,9 +58,6 @@ func (c *queryClient) Allocate(ctx context.Context, in *QueryAllocateRequest, op
|
|||||||
type QueryServer interface {
|
type QueryServer interface {
|
||||||
// Params queries all parameters of the module.
|
// Params queries all parameters of the module.
|
||||||
Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
|
Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
|
||||||
// Allocate initializes a Target Vault available for claims with a compatible
|
|
||||||
// Authentication mechanism. The default authentication mechanism is WebAuthn.
|
|
||||||
Allocate(context.Context, *QueryAllocateRequest) (*QueryAllocateResponse, error)
|
|
||||||
mustEmbedUnimplementedQueryServer()
|
mustEmbedUnimplementedQueryServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,9 +71,6 @@ type UnimplementedQueryServer struct{}
|
|||||||
func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) {
|
func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
|
||||||
}
|
}
|
||||||
func (UnimplementedQueryServer) Allocate(context.Context, *QueryAllocateRequest) (*QueryAllocateResponse, error) {
|
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Allocate not implemented")
|
|
||||||
}
|
|
||||||
func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
|
func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
|
||||||
func (UnimplementedQueryServer) testEmbeddedByValue() {}
|
func (UnimplementedQueryServer) testEmbeddedByValue() {}
|
||||||
|
|
||||||
@@ -130,24 +110,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_Allocate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(QueryAllocateRequest)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(QueryServer).Allocate(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: Query_Allocate_FullMethodName,
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(QueryServer).Allocate(ctx, req.(*QueryAllocateRequest))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Query_ServiceDesc is the grpc.ServiceDesc for Query service.
|
// Query_ServiceDesc is the grpc.ServiceDesc for Query service.
|
||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
@@ -159,10 +121,6 @@ var Query_ServiceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "Params",
|
MethodName: "Params",
|
||||||
Handler: _Query_Params_Handler,
|
Handler: _Query_Params_Handler,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MethodName: "Allocate",
|
|
||||||
Handler: _Query_Allocate_Handler,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "dwn/v1/query.proto",
|
Metadata: "dwn/v1/query.proto",
|
||||||
|
|||||||
@@ -1818,7 +1818,7 @@ func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) {
|
|||||||
return file_dwn_v1_tx_proto_rawDescGZIP(), []int{1}
|
return file_dwn_v1_tx_proto_rawDescGZIP(), []int{1}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MsgInitialize spawns a New Vault with Unclaimed State. This is a one-time
|
// MsgSpawn spawns a New Vault with Unclaimed State. This is a one-time
|
||||||
// operation that must be performed interacting with the Vault.
|
// operation that must be performed interacting with the Vault.
|
||||||
//
|
//
|
||||||
// Since: cosmos-sdk 0.47
|
// Since: cosmos-sdk 0.47
|
||||||
@@ -1869,8 +1869,8 @@ func (x *MsgInitialize) GetParams() *Params {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MsgInitializeResponse defines the response structure for executing a
|
// MsgSpawnResponse defines the response structure for executing a
|
||||||
// MsgInitialize message.
|
// MsgSpawn message.
|
||||||
//
|
//
|
||||||
// Since: cosmos-sdk 0.47
|
// Since: cosmos-sdk 0.47
|
||||||
type MsgInitializeResponse struct {
|
type MsgInitializeResponse struct {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ type MsgClient interface {
|
|||||||
//
|
//
|
||||||
// Since: cosmos-sdk 0.47
|
// Since: cosmos-sdk 0.47
|
||||||
UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)
|
UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error)
|
||||||
// Initialize spawns a new Vault
|
// Spawn spawns a new Vault
|
||||||
Initialize(ctx context.Context, in *MsgInitialize, opts ...grpc.CallOption) (*MsgInitializeResponse, error)
|
Initialize(ctx context.Context, in *MsgInitialize, opts ...grpc.CallOption) (*MsgInitializeResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ type MsgServer interface {
|
|||||||
//
|
//
|
||||||
// Since: cosmos-sdk 0.47
|
// Since: cosmos-sdk 0.47
|
||||||
UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)
|
UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error)
|
||||||
// Initialize spawns a new Vault
|
// Spawn spawns a new Vault
|
||||||
Initialize(context.Context, *MsgInitialize) (*MsgInitializeResponse, error)
|
Initialize(context.Context, *MsgInitialize) (*MsgInitializeResponse, error)
|
||||||
mustEmbedUnimplementedMsgServer()
|
mustEmbedUnimplementedMsgServer()
|
||||||
}
|
}
|
||||||
|
|||||||
+1475
-498
File diff suppressed because it is too large
Load Diff
+1949
-28
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,9 @@ import (
|
|||||||
const _ = grpc.SupportPackageIsVersion9
|
const _ = grpc.SupportPackageIsVersion9
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Query_Params_FullMethodName = "/svc.v1.Query/Params"
|
Query_Params_FullMethodName = "/svc.v1.Query/Params"
|
||||||
|
Query_OriginExists_FullMethodName = "/svc.v1.Query/OriginExists"
|
||||||
|
Query_ResolveOrigin_FullMethodName = "/svc.v1.Query/ResolveOrigin"
|
||||||
)
|
)
|
||||||
|
|
||||||
// QueryClient is the client API for Query service.
|
// QueryClient is the client API for Query service.
|
||||||
@@ -30,6 +32,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 *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
|
Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error)
|
||||||
|
// OriginExists queries if a given origin exists.
|
||||||
|
OriginExists(ctx context.Context, in *QueryOriginExistsRequest, opts ...grpc.CallOption) (*QueryOriginExistsResponse, error)
|
||||||
|
// ResolveOrigin queries the domain of a given service and returns its record with capabilities.
|
||||||
|
ResolveOrigin(ctx context.Context, in *QueryResolveOriginRequest, opts ...grpc.CallOption) (*QueryResolveOriginResponse, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type queryClient struct {
|
type queryClient struct {
|
||||||
@@ -50,6 +56,26 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts .
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *queryClient) OriginExists(ctx context.Context, in *QueryOriginExistsRequest, opts ...grpc.CallOption) (*QueryOriginExistsResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(QueryOriginExistsResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Query_OriginExists_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *queryClient) ResolveOrigin(ctx context.Context, in *QueryResolveOriginRequest, opts ...grpc.CallOption) (*QueryResolveOriginResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(QueryResolveOriginResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Query_ResolveOrigin_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// QueryServer is the server API for Query service.
|
// QueryServer is the server API for Query service.
|
||||||
// All implementations must embed UnimplementedQueryServer
|
// All implementations must embed UnimplementedQueryServer
|
||||||
// for forward compatibility.
|
// for forward compatibility.
|
||||||
@@ -58,6 +84,10 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts .
|
|||||||
type QueryServer interface {
|
type QueryServer interface {
|
||||||
// Params queries all parameters of the module.
|
// Params queries all parameters of the module.
|
||||||
Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
|
Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error)
|
||||||
|
// OriginExists queries if a given origin exists.
|
||||||
|
OriginExists(context.Context, *QueryOriginExistsRequest) (*QueryOriginExistsResponse, error)
|
||||||
|
// ResolveOrigin queries the domain of a given service and returns its record with capabilities.
|
||||||
|
ResolveOrigin(context.Context, *QueryResolveOriginRequest) (*QueryResolveOriginResponse, error)
|
||||||
mustEmbedUnimplementedQueryServer()
|
mustEmbedUnimplementedQueryServer()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +101,12 @@ type UnimplementedQueryServer struct{}
|
|||||||
func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) {
|
func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method Params not implemented")
|
||||||
}
|
}
|
||||||
|
func (UnimplementedQueryServer) OriginExists(context.Context, *QueryOriginExistsRequest) (*QueryOriginExistsResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method OriginExists not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedQueryServer) ResolveOrigin(context.Context, *QueryResolveOriginRequest) (*QueryResolveOriginResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method ResolveOrigin not implemented")
|
||||||
|
}
|
||||||
func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
|
func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {}
|
||||||
func (UnimplementedQueryServer) testEmbeddedByValue() {}
|
func (UnimplementedQueryServer) testEmbeddedByValue() {}
|
||||||
|
|
||||||
@@ -110,6 +146,42 @@ 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_OriginExists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(QueryOriginExistsRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(QueryServer).OriginExists(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Query_OriginExists_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(QueryServer).OriginExists(ctx, req.(*QueryOriginExistsRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Query_ResolveOrigin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(QueryResolveOriginRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(QueryServer).ResolveOrigin(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Query_ResolveOrigin_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(QueryServer).ResolveOrigin(ctx, req.(*QueryResolveOriginRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
// Query_ServiceDesc is the grpc.ServiceDesc for Query service.
|
// Query_ServiceDesc is the grpc.ServiceDesc for Query service.
|
||||||
// It's only intended for direct use with grpc.RegisterService,
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
// and not to be introspected or modified (even as a copy)
|
// and not to be introspected or modified (even as a copy)
|
||||||
@@ -121,6 +193,14 @@ var Query_ServiceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "Params",
|
MethodName: "Params",
|
||||||
Handler: _Query_Params_Handler,
|
Handler: _Query_Params_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "OriginExists",
|
||||||
|
Handler: _Query_OriginExists_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "ResolveOrigin",
|
||||||
|
Handler: _Query_ResolveOrigin_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "svc/v1/query.proto",
|
Metadata: "svc/v1/query.proto",
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/go-webauthn/webauthn/protocol"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (c *GatewayContext) NewChallenge() string {
|
|
||||||
chal, _ := protocol.CreateChallenge()
|
|
||||||
chalStr := chal.String()
|
|
||||||
return chalStr
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cc *GatewayContext) ListCredentials(handle string) ([]*CredentialDescriptor, error) {
|
|
||||||
creds, err := cc.GetCredentialsByHandle(bgCtx(), handle)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return CredentialArrayToDescriptors(creds), nil
|
|
||||||
}
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
gocontext "context"
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/medama-io/go-useragent"
|
|
||||||
"github.com/onsonr/sonr/crypto/mpc"
|
|
||||||
"github.com/onsonr/sonr/internal/config/hway"
|
|
||||||
hwayorm "github.com/onsonr/sonr/internal/database/hwayorm"
|
|
||||||
"github.com/onsonr/sonr/pkg/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
type GatewayContext struct {
|
|
||||||
echo.Context
|
|
||||||
*hwayorm.Queries
|
|
||||||
agent useragent.UserAgent
|
|
||||||
id string
|
|
||||||
ipfsClient common.IPFS
|
|
||||||
tokenStore common.IPFSTokenStore
|
|
||||||
stagedEnclaves map[string]mpc.Enclave
|
|
||||||
grpcAddr string
|
|
||||||
turnstileSiteKey string
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetGateway(c echo.Context) (*GatewayContext, error) {
|
|
||||||
cc, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return nil, echo.NewHTTPError(http.StatusInternalServerError, "Gateway Context not found")
|
|
||||||
}
|
|
||||||
return cc, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func UseGateway(env hway.Hway, ipc common.IPFS, db *hwayorm.Queries) echo.MiddlewareFunc {
|
|
||||||
return func(next echo.HandlerFunc) echo.HandlerFunc {
|
|
||||||
return func(c echo.Context) error {
|
|
||||||
ua := useragent.NewParser()
|
|
||||||
ctx := &GatewayContext{
|
|
||||||
Context: c,
|
|
||||||
turnstileSiteKey: env.GetTurnstileSiteKey(),
|
|
||||||
agent: ua.Parse(c.Request().UserAgent()),
|
|
||||||
Queries: db,
|
|
||||||
ipfsClient: ipc,
|
|
||||||
grpcAddr: env.GetSonrGrpcUrl(),
|
|
||||||
tokenStore: common.NewUCANStore(ipc),
|
|
||||||
}
|
|
||||||
return next(ctx)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BG() gocontext.Context {
|
|
||||||
ctx := gocontext.Background()
|
|
||||||
return ctx
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cc *GatewayContext) ReadCookie(k common.CookieKey) string {
|
|
||||||
return common.ReadCookieUnsafe(cc.Context, k)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (cc *GatewayContext) WriteCookie(k common.CookieKey, v string) {
|
|
||||||
common.WriteCookie(cc.Context, k, v)
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
hwayorm "github.com/onsonr/sonr/internal/database/hwayorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
func UpdateProfile(c echo.Context) (*hwayorm.Profile, error) {
|
|
||||||
ctx, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return nil, echo.NewHTTPError(http.StatusInternalServerError, "Profile Context not found")
|
|
||||||
}
|
|
||||||
address := c.FormValue("address")
|
|
||||||
handle := c.FormValue("handle")
|
|
||||||
name := c.FormValue("name")
|
|
||||||
profile, err := ctx.UpdateProfile(bgCtx(), hwayorm.UpdateProfileParams{
|
|
||||||
Address: address,
|
|
||||||
Handle: handle,
|
|
||||||
Name: name,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &profile, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReadProfile(c echo.Context) (*hwayorm.Profile, error) {
|
|
||||||
ctx, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return nil, echo.NewHTTPError(http.StatusInternalServerError, "Profile Context not found")
|
|
||||||
}
|
|
||||||
handle := c.Param("handle")
|
|
||||||
profile, err := ctx.GetProfileByHandle(bgCtx(), handle)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return &profile, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeleteProfile(c echo.Context) error {
|
|
||||||
ctx, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Profile Context not found")
|
|
||||||
}
|
|
||||||
address := c.Param("address")
|
|
||||||
err := ctx.SoftDeleteProfile(bgCtx(), address)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
|
|
||||||
"github.com/a-h/templ"
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/views"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Render(c echo.Context, cmp templ.Component) error {
|
|
||||||
// Create a buffer to store the rendered HTML
|
|
||||||
buf := &bytes.Buffer{}
|
|
||||||
// Render the component to the buffer
|
|
||||||
err := cmp.Render(c.Request().Context(), buf)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set the content type
|
|
||||||
c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTML)
|
|
||||||
|
|
||||||
// Write the buffered content to the response
|
|
||||||
_, err = c.Response().Write(buf.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
c.Response().WriteHeader(200)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func RenderError(c echo.Context, err error) error {
|
|
||||||
return Render(c, views.ErrorView(err.Error()))
|
|
||||||
}
|
|
||||||
|
|
||||||
func RenderInitial(c echo.Context) error {
|
|
||||||
return Render(c, views.InitialView())
|
|
||||||
}
|
|
||||||
|
|
||||||
func RenderLoading(c echo.Context) error {
|
|
||||||
return Render(c, views.LoadingView())
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/onsonr/sonr/pkg/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
// ParamsBank returns the bank params
|
|
||||||
func (cc *GatewayContext) ParamsBank() (*common.BankParamsResponse, error) {
|
|
||||||
cl, err := common.NewBankClient(cc.grpcAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
resp, err := cl.Params(bgCtx(), &common.BankParamsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParamsDID returns the DID params
|
|
||||||
func (cc *GatewayContext) ParamsDID() (*common.DIDParamsResponse, error) {
|
|
||||||
cl, err := common.NewDIDClient(cc.grpcAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
resp, err := cl.Params(bgCtx(), &common.DIDParamsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParamsDWN returns the DWN params
|
|
||||||
func (cc *GatewayContext) ParamsDWN() (*common.DWNParamsResponse, error) {
|
|
||||||
cl, err := common.NewDWNClient(cc.grpcAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
resp, err := cl.Params(bgCtx(), &common.DWNParamsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParamsSVC returns the SVC params
|
|
||||||
func (cc *GatewayContext) ParamsSVC() (*common.SVCParamsResponse, error) {
|
|
||||||
cl, err := common.NewSVCClient(cc.grpcAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
resp, err := cl.Params(bgCtx(), &common.SVCParamsRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// StatusBlock returns the current block
|
|
||||||
func (cc *GatewayContext) StatusBlock() string {
|
|
||||||
qc, err := common.NewNodeClient(cc.grpcAddr)
|
|
||||||
if err != nil {
|
|
||||||
return "-1"
|
|
||||||
}
|
|
||||||
resp, err := qc.Status(bgCtx(), &common.StatusRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return "-1"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%d", resp.GetHeight())
|
|
||||||
}
|
|
||||||
|
|
||||||
// StatusNode returns the node status
|
|
||||||
func (cc *GatewayContext) StatusNode() (*common.StatusResponse, error) {
|
|
||||||
cl, err := common.NewNodeClient(cc.grpcAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
resp, err := cl.Status(bgCtx(), &common.StatusRequest{})
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TxBroadcast broadcasts a transaction to the network
|
|
||||||
func (cc *GatewayContext) TxBroadcast() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TxEncode encodes a transaction
|
|
||||||
func (cc *GatewayContext) TxEncode() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TxDecode decodes a transaction
|
|
||||||
func (cc *GatewayContext) TxDecode() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TxSimulate simulates a transaction on the network
|
|
||||||
func (cc *GatewayContext) TxSimulate() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,148 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
gocontext "context"
|
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/onsonr/sonr/pkg/common"
|
|
||||||
"github.com/segmentio/ksuid"
|
|
||||||
"lukechampine.com/blake3"
|
|
||||||
)
|
|
||||||
|
|
||||||
func NewSession(c echo.Context) error {
|
|
||||||
cc, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
baseSessionCreateParams := BaseSessionCreateParams(cc)
|
|
||||||
cc.id = baseSessionCreateParams.ID
|
|
||||||
if _, err := cc.CreateSession(bgCtx(), baseSessionCreateParams); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// Set Cookie
|
|
||||||
if err := common.WriteCookie(c, common.SessionID, cc.id); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uses blake3 to hash the sessionID to generate a nonce of length 12 bytes
|
|
||||||
func GetNonce(sessionID string) ([]byte, error) {
|
|
||||||
hash := blake3.New(32, nil)
|
|
||||||
_, err := hash.Write([]byte(sessionID))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
// Read the hash into a byte slice
|
|
||||||
nonce := make([]byte, 12)
|
|
||||||
_, err = hash.Write(nonce)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return nonce, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// ForbiddenDevice returns true if the device is unavailable
|
|
||||||
func ForbiddenDevice(c echo.Context) bool {
|
|
||||||
cc, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return cc.agent.IsBot() || cc.agent.IsTV()
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetOrigin(c echo.Context) string {
|
|
||||||
return c.Request().Host
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetSessionID(c echo.Context) string {
|
|
||||||
// Check from context
|
|
||||||
cc, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
// check from cookie
|
|
||||||
if cc.id == "" {
|
|
||||||
if ok := common.CookieExists(c, common.SessionID); !ok {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
cc.id = common.ReadCookieUnsafe(c, common.SessionID)
|
|
||||||
}
|
|
||||||
return cc.id
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetAuthChallenge(c echo.Context) string {
|
|
||||||
cc, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
s, err := cc.GetChallengeBySessionID(bgCtx(), cc.id)
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetProfileHandle(c echo.Context) string {
|
|
||||||
// First check for the cookie
|
|
||||||
handle := common.ReadCookieUnsafe(c, common.UserHandle)
|
|
||||||
if handle != "" {
|
|
||||||
return handle
|
|
||||||
}
|
|
||||||
|
|
||||||
// Then check the session
|
|
||||||
cc, ok := c.(*GatewayContext)
|
|
||||||
if !ok {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
s, err := cc.GetSessionByID(bgCtx(), cc.id)
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
profile, err := cc.GetProfileByID(bgCtx(), s.ProfileID)
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return profile.Handle
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// func GetHumanVerificationNumbers(c echo.Context) (int64, int64) {
|
|
||||||
// cc, ok := c.(*GatewayContext)
|
|
||||||
// if !ok {
|
|
||||||
// return 0, 0
|
|
||||||
// }
|
|
||||||
// s, err := cc.dbq.GetHumanVerificationNumbers(bgCtx(), cc.id)
|
|
||||||
// if err != nil {
|
|
||||||
// return 0, 0
|
|
||||||
// }
|
|
||||||
// return s.IsHumanFirst, s.IsHumanLast
|
|
||||||
// }
|
|
||||||
|
|
||||||
// utility function to get a context
|
|
||||||
func bgCtx() gocontext.Context {
|
|
||||||
ctx := gocontext.Background()
|
|
||||||
return ctx
|
|
||||||
}
|
|
||||||
|
|
||||||
func getOrCreateSessionID(c echo.Context) string {
|
|
||||||
if ok := common.CookieExists(c, common.SessionID); !ok {
|
|
||||||
sessionID := ksuid.New().String()
|
|
||||||
common.WriteCookie(c, common.SessionID, sessionID)
|
|
||||||
return sessionID
|
|
||||||
}
|
|
||||||
|
|
||||||
sessionID, err := common.ReadCookie(c, common.SessionID)
|
|
||||||
if err != nil {
|
|
||||||
sessionID = ksuid.New().String()
|
|
||||||
common.WriteCookie(c, common.SessionID, sessionID)
|
|
||||||
}
|
|
||||||
return sessionID
|
|
||||||
}
|
|
||||||
|
|
||||||
func boolToInt64(b bool) int64 {
|
|
||||||
if b {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/go-webauthn/webauthn/protocol"
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/medama-io/go-useragent"
|
|
||||||
hwayorm "github.com/onsonr/sonr/internal/database/hwayorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Define the credential structure matching our frontend data
|
|
||||||
type CredentialDescriptor struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
RawID string `json:"rawId"`
|
|
||||||
Type string `json:"type"`
|
|
||||||
AuthenticatorAttachment string `json:"authenticatorAttachment"`
|
|
||||||
Transports string `json:"transports"`
|
|
||||||
ClientExtensionResults map[string]string `json:"clientExtensionResults"`
|
|
||||||
Response struct {
|
|
||||||
AttestationObject string `json:"attestationObject"`
|
|
||||||
ClientDataJSON string `json:"clientDataJSON"`
|
|
||||||
} `json:"response"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *CredentialDescriptor) ToModel(handle, origin string) *hwayorm.Credential {
|
|
||||||
return &hwayorm.Credential{
|
|
||||||
Handle: handle,
|
|
||||||
Origin: origin,
|
|
||||||
CredentialID: c.ID,
|
|
||||||
Type: c.Type,
|
|
||||||
Transports: c.Transports,
|
|
||||||
AuthenticatorAttachment: c.AuthenticatorAttachment,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func CredentialArrayToDescriptors(credentials []hwayorm.Credential) []*CredentialDescriptor {
|
|
||||||
var descriptors []*CredentialDescriptor
|
|
||||||
for _, cred := range credentials {
|
|
||||||
cd := &CredentialDescriptor{
|
|
||||||
ID: cred.CredentialID,
|
|
||||||
RawID: cred.CredentialID,
|
|
||||||
Type: cred.Type,
|
|
||||||
AuthenticatorAttachment: cred.AuthenticatorAttachment,
|
|
||||||
Transports: cred.Transports,
|
|
||||||
}
|
|
||||||
descriptors = append(descriptors, cd)
|
|
||||||
}
|
|
||||||
return descriptors
|
|
||||||
}
|
|
||||||
|
|
||||||
func BaseSessionCreateParams(e echo.Context) hwayorm.CreateSessionParams {
|
|
||||||
// f := rand.Intn(5) + 1
|
|
||||||
// l := rand.Intn(4) + 1
|
|
||||||
challenge, _ := protocol.CreateChallenge()
|
|
||||||
id := getOrCreateSessionID(e)
|
|
||||||
ua := useragent.NewParser()
|
|
||||||
s := ua.Parse(e.Request().UserAgent())
|
|
||||||
|
|
||||||
return hwayorm.CreateSessionParams{
|
|
||||||
ID: id,
|
|
||||||
BrowserName: s.GetBrowser(),
|
|
||||||
BrowserVersion: s.GetMajorVersion(),
|
|
||||||
ClientIpaddr: e.RealIP(),
|
|
||||||
Platform: s.GetOS(),
|
|
||||||
IsMobile: s.IsMobile(),
|
|
||||||
IsTablet: s.IsTablet(),
|
|
||||||
IsDesktop: s.IsDesktop(),
|
|
||||||
IsBot: s.IsBot(),
|
|
||||||
IsTv: s.IsTV(),
|
|
||||||
// IsHumanFirst: int64(f),
|
|
||||||
// IsHumanLast: int64(l),
|
|
||||||
Challenge: challenge.String(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭───────────────────────────────────────────────────────────╮
|
|
||||||
// │ Create Passkey (/register/passkey) │
|
|
||||||
// ╰───────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
// CreatePasskeyParams represents the parameters for creating a passkey
|
|
||||||
type CreatePasskeyParams struct {
|
|
||||||
Address string
|
|
||||||
Handle string
|
|
||||||
Name string
|
|
||||||
Challenge string
|
|
||||||
CreationBlock string
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭───────────────────────────────────────────────────────────╮
|
|
||||||
// │ Create Profile (/register/profile) │
|
|
||||||
// ╰───────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
// CreateProfileParams represents the parameters for creating a profile
|
|
||||||
type CreateProfileParams struct {
|
|
||||||
TurnstileSiteKey string
|
|
||||||
FirstNumber int
|
|
||||||
LastNumber int
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sum returns the sum of the first and last number
|
|
||||||
func (d CreateProfileParams) Sum() int {
|
|
||||||
return d.FirstNumber + d.LastNumber
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/onsonr/sonr/crypto/mpc"
|
|
||||||
"github.com/onsonr/sonr/pkg/common"
|
|
||||||
"lukechampine.com/blake3"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (cc *GatewayContext) Spawn(handle, origin string) (*CreatePasskeyParams, error) {
|
|
||||||
challenge := GetAuthChallenge(cc)
|
|
||||||
sid := GetSessionID(cc)
|
|
||||||
nonce, err := calcNonce(sid)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
encl, err := mpc.GenEnclave(nonce)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
cc.stagedEnclaves[sid] = encl
|
|
||||||
common.WriteCookie(cc, common.SonrAddress, encl.Address())
|
|
||||||
return &CreatePasskeyParams{
|
|
||||||
Address: encl.Address(),
|
|
||||||
Handle: handle,
|
|
||||||
Name: origin,
|
|
||||||
Challenge: challenge,
|
|
||||||
CreationBlock: cc.StatusBlock(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Uses blake3 to hash the sessionID to generate a nonce of length 12 bytes
|
|
||||||
func calcNonce(sessionID string) ([]byte, error) {
|
|
||||||
hash := blake3.New(32, nil)
|
|
||||||
_, err := hash.Write([]byte(sessionID))
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
// Read the hash into a byte slice
|
|
||||||
nonce := make([]byte, 12)
|
|
||||||
_, err = hash.Write(nonce)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return nonce, nil
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
// Package gateway provides the default routes for the Sonr hway.
|
|
||||||
package gateway
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/labstack/echo-contrib/echoprometheus"
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
echomiddleware "github.com/labstack/echo/v4/middleware"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/context"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/handlers"
|
|
||||||
config "github.com/onsonr/sonr/internal/config/hway"
|
|
||||||
hwayorm "github.com/onsonr/sonr/internal/database/hwayorm"
|
|
||||||
"github.com/onsonr/sonr/pkg/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Gateway = *echo.Echo
|
|
||||||
|
|
||||||
// New returns a new Gateway instance
|
|
||||||
func New(env config.Hway, ipc common.IPFS, dbq *hwayorm.Queries) (Gateway, error) {
|
|
||||||
e := echo.New()
|
|
||||||
|
|
||||||
// Built-in middleware
|
|
||||||
e.Use(echomiddleware.Logger())
|
|
||||||
e.Use(echomiddleware.Recover())
|
|
||||||
e.IPExtractor = echo.ExtractIPDirect()
|
|
||||||
e.Use(echoprometheus.NewMiddleware("hway"))
|
|
||||||
e.Use(context.UseGateway(env, ipc, dbq))
|
|
||||||
|
|
||||||
// Register View Handlers
|
|
||||||
e.HTTPErrorHandler = handlers.ErrorHandler
|
|
||||||
e.GET("/", handlers.IndexHandler)
|
|
||||||
handlers.RegisterHandler(e.Group("/register"))
|
|
||||||
return e, nil
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package handlers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/context"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ErrorHandler(err error, c echo.Context) {
|
|
||||||
if he, ok := err.(*echo.HTTPError); ok {
|
|
||||||
// Log the error if needed
|
|
||||||
c.Logger().Errorf("Error: %v", he.Message)
|
|
||||||
context.RenderError(c, he)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package handlers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/context"
|
|
||||||
)
|
|
||||||
|
|
||||||
func IndexHandler(c echo.Context) error {
|
|
||||||
id := context.GetSessionID(c)
|
|
||||||
if id == "" {
|
|
||||||
context.NewSession(c)
|
|
||||||
}
|
|
||||||
return context.RenderInitial(c)
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package handlers
|
|
||||||
@@ -1,111 +0,0 @@
|
|||||||
package handlers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/context"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/islands"
|
|
||||||
"github.com/onsonr/sonr/app/gateway/views"
|
|
||||||
hwayorm "github.com/onsonr/sonr/internal/database/hwayorm"
|
|
||||||
"github.com/onsonr/sonr/pkg/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
func RegisterHandler(g *echo.Group) {
|
|
||||||
g.GET("/", renderProfileForm)
|
|
||||||
g.POST("/profile", validateProfileForm)
|
|
||||||
g.GET("/passkey", renderPasskeyForm)
|
|
||||||
g.POST("/passkey", validatePasskeyForm)
|
|
||||||
g.GET("/vault", renderVaultStatus)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭──────────────────────────────────────────────────────╮
|
|
||||||
// │ Registration Views │
|
|
||||||
// ╰──────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
func renderProfileForm(c echo.Context) error {
|
|
||||||
params := context.CreateProfileParams{
|
|
||||||
FirstNumber: 6,
|
|
||||||
LastNumber: 3,
|
|
||||||
}
|
|
||||||
return context.Render(c, views.RegisterProfileView(params.FirstNumber, params.LastNumber))
|
|
||||||
}
|
|
||||||
|
|
||||||
func renderPasskeyForm(c echo.Context) error {
|
|
||||||
cc, err := context.GetGateway(c)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
handle := c.FormValue("handle")
|
|
||||||
origin := c.FormValue("origin")
|
|
||||||
name := c.FormValue("name")
|
|
||||||
cc.InsertProfile(context.BG(), hwayorm.InsertProfileParams{
|
|
||||||
Handle: handle,
|
|
||||||
Origin: origin,
|
|
||||||
Name: name,
|
|
||||||
})
|
|
||||||
|
|
||||||
params, err := cc.Spawn(handle, origin)
|
|
||||||
if err != nil {
|
|
||||||
return context.RenderError(c, err)
|
|
||||||
}
|
|
||||||
return context.Render(c, views.RegisterPasskeyView(params.Address, params.Handle, params.Name, params.Challenge, params.CreationBlock))
|
|
||||||
}
|
|
||||||
|
|
||||||
func renderVaultStatus(c echo.Context) error {
|
|
||||||
return context.Render(c, views.LoadingView())
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭─────────────────────────────────────────────────────────╮
|
|
||||||
// │ Validation Components │
|
|
||||||
// ╰─────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
func validateProfileForm(c echo.Context) error {
|
|
||||||
cc, err := context.GetGateway(c)
|
|
||||||
if err != nil {
|
|
||||||
return context.RenderError(c, err)
|
|
||||||
}
|
|
||||||
handle := c.FormValue("handle")
|
|
||||||
if handle == "" {
|
|
||||||
return context.Render(c, islands.InputHandleError(handle, "Please enter a 4-16 character handle"))
|
|
||||||
}
|
|
||||||
notok, err := cc.CheckHandleExists(context.BG(), handle)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if notok {
|
|
||||||
return context.Render(c, islands.InputHandleError(handle, "Handle is already taken"))
|
|
||||||
}
|
|
||||||
cc.WriteCookie(common.UserHandle, handle)
|
|
||||||
return context.Render(c, islands.InputHandleSuccess(handle))
|
|
||||||
}
|
|
||||||
|
|
||||||
func validatePasskeyForm(c echo.Context) error {
|
|
||||||
cc, err := context.GetGateway(c)
|
|
||||||
if err != nil {
|
|
||||||
return context.RenderError(c, err)
|
|
||||||
}
|
|
||||||
handle := context.GetProfileHandle(c)
|
|
||||||
origin := c.Request().Host
|
|
||||||
credentialJSON := c.FormValue("credential")
|
|
||||||
cred := &context.CredentialDescriptor{}
|
|
||||||
|
|
||||||
// Unmarshal the credential JSON
|
|
||||||
err = json.Unmarshal([]byte(credentialJSON), cred)
|
|
||||||
if err != nil {
|
|
||||||
return context.RenderError(c, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
md := cred.ToModel(handle, origin)
|
|
||||||
_, err = cc.InsertCredential(context.BG(), hwayorm.InsertCredentialParams{
|
|
||||||
Handle: md.Handle,
|
|
||||||
CredentialID: md.CredentialID,
|
|
||||||
Origin: md.Origin,
|
|
||||||
Type: md.Type,
|
|
||||||
Transports: md.Transports,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return context.RenderError(c, err)
|
|
||||||
}
|
|
||||||
return context.Render(c, views.LoadingView())
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
package islands
|
|
||||||
|
|
||||||
templ CardAccount(addr, name, handle, creationBlock string) {
|
|
||||||
<div class="profile-card min-w-[320px]">
|
|
||||||
<div class="text-white max-w-xs my-auto mx-auto bg-gradient-to-r from-cyan-600 to-cyan-300 p-4 py-5 px-5 rounded-xl">
|
|
||||||
<div class="flex justify-between">
|
|
||||||
<div>
|
|
||||||
<h2>sonr-testnet-1</h2>
|
|
||||||
<p class="text-2xl font-bold">{ handle }</p>
|
|
||||||
</div>
|
|
||||||
<div class="flex items-center opacity-60">
|
|
||||||
<sl-icon style="font-size: 52px;" library="sonr" name="sonr-fill"></sl-icon>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="mt-5 flex justify-between items-center w-52">
|
|
||||||
<span class="text-lg font-mono">{ shortenAddress(addr) }</span>
|
|
||||||
</div>
|
|
||||||
<div class="flex justify-between mt-5 w-48 ">
|
|
||||||
<div>
|
|
||||||
<h3 class="text-xs">Block Created </h3>
|
|
||||||
<p class="font-bold"><span>#</span>{ creationBlock }</p>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<h3 class="text-xs">Issued to</h3>
|
|
||||||
<p class="font-bold">{ name }</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper function to shorten address
|
|
||||||
func shortenAddress(address string) string {
|
|
||||||
if len(address) <= 20 {
|
|
||||||
return address
|
|
||||||
}
|
|
||||||
return address[:16] + "..." + address[len(address)-4:]
|
|
||||||
}
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package islands
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func CardAccount(addr, name, handle, creationBlock string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"profile-card min-w-[320px]\"><div class=\"text-white max-w-xs my-auto mx-auto bg-gradient-to-r from-cyan-600 to-cyan-300 p-4 py-5 px-5 rounded-xl\"><div class=\"flex justify-between\"><div><h2>sonr-testnet-1</h2><p class=\"text-2xl font-bold\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(handle)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/card_account.templ`, Line: 9, Col: 43}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div><div class=\"flex items-center opacity-60\"><sl-icon style=\"font-size: 52px;\" library=\"sonr\" name=\"sonr-fill\"></sl-icon></div></div><div class=\"mt-5 flex justify-between items-center w-52\"><span class=\"text-lg font-mono\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var3 string
|
|
||||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(shortenAddress(addr))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/card_account.templ`, Line: 16, Col: 58}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</span></div><div class=\"flex justify-between mt-5 w-48 \"><div><h3 class=\"text-xs\">Block Created </h3><p class=\"font-bold\"><span>#</span>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var4 string
|
|
||||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(creationBlock)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/card_account.templ`, Line: 21, Col: 55}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div><div><h3 class=\"text-xs\">Issued to</h3><p class=\"font-bold\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var5 string
|
|
||||||
templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(name)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/card_account.templ`, Line: 25, Col: 32}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div></div></div></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Helper function to shorten address
|
|
||||||
func shortenAddress(address string) string {
|
|
||||||
if len(address) <= 20 {
|
|
||||||
return address
|
|
||||||
}
|
|
||||||
return address[:16] + "..." + address[len(address)-4:]
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
package islands
|
|
||||||
|
|
||||||
type Coin struct {
|
|
||||||
Ticker string
|
|
||||||
Name string
|
|
||||||
IsDefault bool
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultCoins = []Coin{
|
|
||||||
{Ticker: "SNR", Name: "Sonr", IsDefault: true},
|
|
||||||
{Ticker: "BTC", Name: "Bitcoin", IsDefault: true},
|
|
||||||
{Ticker: "ETH", Name: "Ethereum", IsDefault: true},
|
|
||||||
{Ticker: "SOL", Name: "Solana", IsDefault: false},
|
|
||||||
{Ticker: "LTC", Name: "Litecoin", IsDefault: false},
|
|
||||||
{Ticker: "DOGE", Name: "Dogecoin", IsDefault: false},
|
|
||||||
{Ticker: "XRP", Name: "Ripple", IsDefault: false},
|
|
||||||
{Ticker: "OSMO", Name: "Osmosis", IsDefault: false},
|
|
||||||
{Ticker: "ATOM", Name: "Cosmos", IsDefault: false},
|
|
||||||
{Ticker: "STARZ", Name: "Stargaze", IsDefault: false},
|
|
||||||
{Ticker: "AKT", Name: "Akash", IsDefault: false},
|
|
||||||
{Ticker: "EVMOS", Name: "Evmos", IsDefault: false},
|
|
||||||
{Ticker: "FIL", Name: "Filecoin", IsDefault: false},
|
|
||||||
{Ticker: "AXL", Name: "Axelar", IsDefault: false},
|
|
||||||
}
|
|
||||||
|
|
||||||
templ CoinSelect() {
|
|
||||||
<sl-select
|
|
||||||
label="Accounts"
|
|
||||||
name="selected_assets"
|
|
||||||
value="SNR BTC ETH"
|
|
||||||
help-text="Select Blockchains to connect with your Vault"
|
|
||||||
multiple
|
|
||||||
class="custom-tag py-2"
|
|
||||||
>
|
|
||||||
for _, a := range defaultCoins {
|
|
||||||
@CoinOption(a)
|
|
||||||
}
|
|
||||||
</sl-select>
|
|
||||||
<script>
|
|
||||||
const select = document.querySelector('.custom-tag');
|
|
||||||
select.getTag = (option, index) => {
|
|
||||||
// Use the same icon used in the <sl-option>
|
|
||||||
const name = option.querySelector('sl-icon[slot="prefix"]').name;
|
|
||||||
|
|
||||||
// You can return a string, a Lit Template, or an HTMLElement here
|
|
||||||
return `
|
|
||||||
<sl-tag removable>
|
|
||||||
<sl-icon name="${name}" library="crypto" style="padding-inline-end: .5rem;"></sl-icon>
|
|
||||||
${option.getTextLabel()}
|
|
||||||
</sl-tag>
|
|
||||||
`;
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ CoinOption(a Coin) {
|
|
||||||
if a.IsDefault {
|
|
||||||
<sl-option value={ a.Ticker } selected disabled>
|
|
||||||
<sl-icon slot="prefix" name={ a.Ticker } library="crypto"></sl-icon>
|
|
||||||
{ a.Name }
|
|
||||||
</sl-option>
|
|
||||||
<sl-divider></sl-divider>
|
|
||||||
} else {
|
|
||||||
<sl-option value={ a.Ticker }>
|
|
||||||
<sl-icon slot="prefix" name={ a.Ticker } library="crypto"></sl-icon>
|
|
||||||
{ a.Name }
|
|
||||||
</sl-option>
|
|
||||||
<sl-divider></sl-divider>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,187 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package islands
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
type Coin struct {
|
|
||||||
Ticker string
|
|
||||||
Name string
|
|
||||||
IsDefault bool
|
|
||||||
}
|
|
||||||
|
|
||||||
var defaultCoins = []Coin{
|
|
||||||
{Ticker: "SNR", Name: "Sonr", IsDefault: true},
|
|
||||||
{Ticker: "BTC", Name: "Bitcoin", IsDefault: true},
|
|
||||||
{Ticker: "ETH", Name: "Ethereum", IsDefault: true},
|
|
||||||
{Ticker: "SOL", Name: "Solana", IsDefault: false},
|
|
||||||
{Ticker: "LTC", Name: "Litecoin", IsDefault: false},
|
|
||||||
{Ticker: "DOGE", Name: "Dogecoin", IsDefault: false},
|
|
||||||
{Ticker: "XRP", Name: "Ripple", IsDefault: false},
|
|
||||||
{Ticker: "OSMO", Name: "Osmosis", IsDefault: false},
|
|
||||||
{Ticker: "ATOM", Name: "Cosmos", IsDefault: false},
|
|
||||||
{Ticker: "STARZ", Name: "Stargaze", IsDefault: false},
|
|
||||||
{Ticker: "AKT", Name: "Akash", IsDefault: false},
|
|
||||||
{Ticker: "EVMOS", Name: "Evmos", IsDefault: false},
|
|
||||||
{Ticker: "FIL", Name: "Filecoin", IsDefault: false},
|
|
||||||
{Ticker: "AXL", Name: "Axelar", IsDefault: false},
|
|
||||||
}
|
|
||||||
|
|
||||||
func CoinSelect() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-select label=\"Accounts\" name=\"selected_assets\" value=\"SNR BTC ETH\" help-text=\"Select Blockchains to connect with your Vault\" multiple class=\"custom-tag py-2\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
for _, a := range defaultCoins {
|
|
||||||
templ_7745c5c3_Err = CoinOption(a).Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</sl-select><script>\n\t const select = document.querySelector('.custom-tag');\n select.getTag = (option, index) => {\n // Use the same icon used in the <sl-option>\n const name = option.querySelector('sl-icon[slot=\"prefix\"]').name;\n\n // You can return a string, a Lit Template, or an HTMLElement here\n return `\n <sl-tag removable>\n <sl-icon name=\"${name}\" library=\"crypto\" style=\"padding-inline-end: .5rem;\"></sl-icon>\n ${option.getTextLabel()}\n </sl-tag>\n `;\n };\n\t</script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func CoinOption(a Coin) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var2 == nil {
|
|
||||||
templ_7745c5c3_Var2 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
if a.IsDefault {
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-option value=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var3 string
|
|
||||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(a.Ticker)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/coin_select.templ`, Line: 58, Col: 29}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" selected disabled><sl-icon slot=\"prefix\" name=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var4 string
|
|
||||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(a.Ticker)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/coin_select.templ`, Line: 59, Col: 41}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" library=\"crypto\"></sl-icon> ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var5 string
|
|
||||||
templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/coin_select.templ`, Line: 60, Col: 11}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</sl-option> <sl-divider></sl-divider>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-option value=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var6 string
|
|
||||||
templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(a.Ticker)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/coin_select.templ`, Line: 64, Col: 29}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><sl-icon slot=\"prefix\" name=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var7 string
|
|
||||||
templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(a.Ticker)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/coin_select.templ`, Line: 65, Col: 41}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" library=\"crypto\"></sl-icon> ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var8 string
|
|
||||||
templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(a.Name)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/coin_select.templ`, Line: 66, Col: 11}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</sl-option> <sl-divider></sl-divider>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package islands
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
templ HumanSlider(firstNumber int, lastNumber int) {
|
|
||||||
<div hx-target="this" hx-swap="outerHTML">
|
|
||||||
<sl-range name="is_human" label={ humanLabel(firstNumber, lastNumber) } help-text="Prove you are a human." min="0" max="9" step="1" hx-post="/register/profile/is_human"></sl-range>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ HumanSliderError(firstNumber int, lastNumber int) {
|
|
||||||
<sl-range name="is_human" label={ humanLabel(firstNumber, lastNumber) } help-text="Prove you are a human." min="0" max="9" step="1"></sl-range>
|
|
||||||
<div slot="help-text">
|
|
||||||
<sl-icon name="x-lg" library="sonr"></sl-icon>
|
|
||||||
Invalid Human Sum
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ HumanSliderSuccess() {
|
|
||||||
<sl-range name="is_human" label="Success! Welcome Human." help-text="Prove you are a human." min="0" max="9" step="1" value="9" disabled></sl-range>
|
|
||||||
}
|
|
||||||
|
|
||||||
func humanLabel(firstNumber int, lastNumber int) string {
|
|
||||||
return fmt.Sprintf("What is %d + %d?", firstNumber, lastNumber)
|
|
||||||
}
|
|
||||||
@@ -1,130 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package islands
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
func HumanSlider(firstNumber int, lastNumber int) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div hx-target=\"this\" hx-swap=\"outerHTML\"><sl-range name=\"is_human\" label=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(humanLabel(firstNumber, lastNumber))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/human_slider.templ`, Line: 7, Col: 71}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" help-text=\"Prove you are a human.\" min=\"0\" max=\"9\" step=\"1\" hx-post=\"/register/profile/is_human\"></sl-range></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func HumanSliderError(firstNumber int, lastNumber int) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var3 == nil {
|
|
||||||
templ_7745c5c3_Var3 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-range name=\"is_human\" label=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var4 string
|
|
||||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(humanLabel(firstNumber, lastNumber))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/human_slider.templ`, Line: 12, Col: 70}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" help-text=\"Prove you are a human.\" min=\"0\" max=\"9\" step=\"1\"></sl-range><div slot=\"help-text\"><sl-icon name=\"x-lg\" library=\"sonr\"></sl-icon> Invalid Human Sum</div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func HumanSliderSuccess() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-range name=\"is_human\" label=\"Success! Welcome Human.\" help-text=\"Prove you are a human.\" min=\"0\" max=\"9\" step=\"1\" value=\"9\" disabled></sl-range>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func humanLabel(firstNumber int, lastNumber int) string {
|
|
||||||
return fmt.Sprintf("What is %d + %d?", firstNumber, lastNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
package islands
|
|
||||||
|
|
||||||
type HandleState string
|
|
||||||
|
|
||||||
const (
|
|
||||||
HandleStateInitial HandleState = "inital"
|
|
||||||
HandleStateValid HandleState = "valid"
|
|
||||||
HandleStateInvalid HandleState = "invalid"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s HandleState) string() string {
|
|
||||||
return string(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
templ InputHandle() {
|
|
||||||
<div hx-target="this" hx-swap="outerHTML">
|
|
||||||
<sl-input name="handle" placeholder="digitalgold" type="text" label="Handle" minlength="4" maxlength="12" required hx-post="/register/profile" hx-indicator="#handle-indicator" autofocus>
|
|
||||||
<div slot="prefix">
|
|
||||||
<sl-icon name="at-sign" library="sonr"></sl-icon>
|
|
||||||
</div>
|
|
||||||
</sl-input>
|
|
||||||
</div>
|
|
||||||
<br/>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ InputHandleError(value string, helpText string) {
|
|
||||||
<sl-input name="handle" placeholder="digitalgold" type="text" label="Handle" minlength="4" maxlength="12" required class="border-red-500" value={ value } help-text={ helpText }>
|
|
||||||
<div slot="prefix">
|
|
||||||
<sl-icon name="at-sign" library="sonr"></sl-icon>
|
|
||||||
</div>
|
|
||||||
<div slot="suffix" style="color: #B54549;">
|
|
||||||
<sl-icon name="x"></sl-icon>
|
|
||||||
</div>
|
|
||||||
</sl-input>
|
|
||||||
<br/>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ InputHandleSuccess(value string) {
|
|
||||||
<sl-input name="handle" placeholder="digitalgold" type="text" label="Handle" minlength="4" maxlength="12" required class="border-green-500" value={ value } disabled>
|
|
||||||
<div slot="prefix" style="color: #46A758;">
|
|
||||||
<sl-icon name="at-sign" library="sonr"></sl-icon>
|
|
||||||
</div>
|
|
||||||
</sl-input>
|
|
||||||
<br/>
|
|
||||||
}
|
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package islands
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
type HandleState string
|
|
||||||
|
|
||||||
const (
|
|
||||||
HandleStateInitial HandleState = "inital"
|
|
||||||
HandleStateValid HandleState = "valid"
|
|
||||||
HandleStateInvalid HandleState = "invalid"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (s HandleState) string() string {
|
|
||||||
return string(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
func InputHandle() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div hx-target=\"this\" hx-swap=\"outerHTML\"><sl-input name=\"handle\" placeholder=\"digitalgold\" type=\"text\" label=\"Handle\" minlength=\"4\" maxlength=\"12\" required hx-post=\"/register/profile\" hx-indicator=\"#handle-indicator\" autofocus><div slot=\"prefix\"><sl-icon name=\"at-sign\" library=\"sonr\"></sl-icon></div></sl-input></div><br>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func InputHandleError(value string, helpText string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var2 == nil {
|
|
||||||
templ_7745c5c3_Var2 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-input name=\"handle\" placeholder=\"digitalgold\" type=\"text\" label=\"Handle\" minlength=\"4\" maxlength=\"12\" required class=\"border-red-500\" value=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var3 string
|
|
||||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(value)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/input_handle.templ`, Line: 27, Col: 152}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" help-text=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var4 string
|
|
||||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(helpText)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/input_handle.templ`, Line: 27, Col: 175}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><div slot=\"prefix\"><sl-icon name=\"at-sign\" library=\"sonr\"></sl-icon></div><div slot=\"suffix\" style=\"color: #B54549;\"><sl-icon name=\"x\"></sl-icon></div></sl-input><br>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func InputHandleSuccess(value string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-input name=\"handle\" placeholder=\"digitalgold\" type=\"text\" label=\"Handle\" minlength=\"4\" maxlength=\"12\" required class=\"border-green-500\" value=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var6 string
|
|
||||||
templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(value)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/islands/input_handle.templ`, Line: 39, Col: 154}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" disabled><div slot=\"prefix\" style=\"color: #46A758;\"><sl-icon name=\"at-sign\" library=\"sonr\"></sl-icon></div></sl-input><br>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,97 +0,0 @@
|
|||||||
package islands
|
|
||||||
|
|
||||||
templ InputPasskey(addr string, userHandle string, challenge string) {
|
|
||||||
<sl-button style="width: 100%;" onclick={ navigatorCredentialsCreate(addr, userHandle, challenge) }>
|
|
||||||
<sl-icon slot="prefix" name="passkey" library="sonr" style="font-size: 24px;" class="text-neutral-500"></sl-icon>
|
|
||||||
Register Passkey
|
|
||||||
</sl-button>
|
|
||||||
}
|
|
||||||
|
|
||||||
script navigatorCredentialsCreate(userId string, userHandle string, challenge string) {
|
|
||||||
const publicKey = {
|
|
||||||
challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)),
|
|
||||||
rp: {
|
|
||||||
name: "Sonr.ID",
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
// Assuming that userId is ASCII-only
|
|
||||||
id: Uint8Array.from(userId, (c) => c.charCodeAt(0)),
|
|
||||||
name: userId,
|
|
||||||
displayName: userHandle,
|
|
||||||
},
|
|
||||||
pubKeyCredParams: [
|
|
||||||
{
|
|
||||||
type: "public-key",
|
|
||||||
alg: -7, // "ES256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "public-key",
|
|
||||||
alg: -257, // "RS256"
|
|
||||||
},
|
|
||||||
],
|
|
||||||
authenticatorSelection: {
|
|
||||||
userVerification: "required",
|
|
||||||
residentKey: "required",
|
|
||||||
authenticatorAttachment: "platform",
|
|
||||||
},
|
|
||||||
timeout: 60000, // 1 minute
|
|
||||||
extensions: {
|
|
||||||
payment: {
|
|
||||||
isPayment: true,
|
|
||||||
},
|
|
||||||
largeBlob: {
|
|
||||||
supported: "preferred",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Helper function to convert ArrayBuffer to Base64URL string
|
|
||||||
function arrayBufferToBase64URL(buffer) {
|
|
||||||
const bytes = new Uint8Array(buffer);
|
|
||||||
let str = '';
|
|
||||||
bytes.forEach(byte => { str += String.fromCharCode(byte) });
|
|
||||||
return btoa(str)
|
|
||||||
.replace(/\+/g, '-')
|
|
||||||
.replace(/\//g, '_')
|
|
||||||
.replace(/=/g, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
navigator.credentials
|
|
||||||
.create({ publicKey })
|
|
||||||
.then((newCredentialInfo) => {
|
|
||||||
if (!(newCredentialInfo instanceof PublicKeyCredential)) {
|
|
||||||
throw new Error('Received credential is not a PublicKeyCredential');
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = newCredentialInfo.response;
|
|
||||||
if (!(response instanceof AuthenticatorAttestationResponse)) {
|
|
||||||
throw new Error('Response is not an AuthenticatorAttestationResponse');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert the credential data to a cross-platform compatible format
|
|
||||||
const credentialJSON = {
|
|
||||||
id: newCredentialInfo.id,
|
|
||||||
rawId: arrayBufferToBase64URL(newCredentialInfo.rawId),
|
|
||||||
type: newCredentialInfo.type,
|
|
||||||
authenticatorAttachment: newCredentialInfo.authenticatorAttachment || null,
|
|
||||||
transports: Array.isArray(response.getTransports) ? response.getTransports() : [],
|
|
||||||
clientExtensionResults: newCredentialInfo.getClientExtensionResults(),
|
|
||||||
response: {
|
|
||||||
attestationObject: arrayBufferToBase64URL(response.attestationObject),
|
|
||||||
clientDataJSON: arrayBufferToBase64URL(response.clientDataJSON)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Set the form value with the stringified credential data
|
|
||||||
const credential = document.getElementById('credential-data');
|
|
||||||
credential.value = JSON.stringify(credentialJSON);
|
|
||||||
|
|
||||||
// Submit the form
|
|
||||||
const form = document.getElementById('passkey-form');
|
|
||||||
form.submit();
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.error('Passkey creation failed:', err);
|
|
||||||
alert(`Failed to create passkey: ${err.message || 'Unknown error'}`);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,148 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package islands
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func InputPasskey(addr string, userHandle string, challenge string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Err = templ.RenderScriptItems(ctx, templ_7745c5c3_Buffer, navigatorCredentialsCreate(addr, userHandle, challenge))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-button style=\"width: 100%;\" onclick=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 templ.ComponentScript = navigatorCredentialsCreate(addr, userHandle, challenge)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var2.Call)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><sl-icon slot=\"prefix\" name=\"passkey\" library=\"sonr\" style=\"font-size: 24px;\" class=\"text-neutral-500\"></sl-icon> Register Passkey</sl-button>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func navigatorCredentialsCreate(userId string, userHandle string, challenge string) templ.ComponentScript {
|
|
||||||
return templ.ComponentScript{
|
|
||||||
Name: `__templ_navigatorCredentialsCreate_63c0`,
|
|
||||||
Function: `function __templ_navigatorCredentialsCreate_63c0(userId, userHandle, challenge){const publicKey = {
|
|
||||||
challenge: Uint8Array.from(challenge, (c) => c.charCodeAt(0)),
|
|
||||||
rp: {
|
|
||||||
name: "Sonr.ID",
|
|
||||||
},
|
|
||||||
user: {
|
|
||||||
// Assuming that userId is ASCII-only
|
|
||||||
id: Uint8Array.from(userId, (c) => c.charCodeAt(0)),
|
|
||||||
name: userId,
|
|
||||||
displayName: userHandle,
|
|
||||||
},
|
|
||||||
pubKeyCredParams: [
|
|
||||||
{
|
|
||||||
type: "public-key",
|
|
||||||
alg: -7, // "ES256"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "public-key",
|
|
||||||
alg: -257, // "RS256"
|
|
||||||
},
|
|
||||||
],
|
|
||||||
authenticatorSelection: {
|
|
||||||
userVerification: "required",
|
|
||||||
residentKey: "required",
|
|
||||||
authenticatorAttachment: "platform",
|
|
||||||
},
|
|
||||||
timeout: 60000, // 1 minute
|
|
||||||
extensions: {
|
|
||||||
payment: {
|
|
||||||
isPayment: true,
|
|
||||||
},
|
|
||||||
largeBlob: {
|
|
||||||
supported: "preferred",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Helper function to convert ArrayBuffer to Base64URL string
|
|
||||||
function arrayBufferToBase64URL(buffer) {
|
|
||||||
const bytes = new Uint8Array(buffer);
|
|
||||||
let str = '';
|
|
||||||
bytes.forEach(byte => { str += String.fromCharCode(byte) });
|
|
||||||
return btoa(str)
|
|
||||||
.replace(/\+/g, '-')
|
|
||||||
.replace(/\//g, '_')
|
|
||||||
.replace(/=/g, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
navigator.credentials
|
|
||||||
.create({ publicKey })
|
|
||||||
.then((newCredentialInfo) => {
|
|
||||||
if (!(newCredentialInfo instanceof PublicKeyCredential)) {
|
|
||||||
throw new Error('Received credential is not a PublicKeyCredential');
|
|
||||||
}
|
|
||||||
|
|
||||||
const response = newCredentialInfo.response;
|
|
||||||
if (!(response instanceof AuthenticatorAttestationResponse)) {
|
|
||||||
throw new Error('Response is not an AuthenticatorAttestationResponse');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert the credential data to a cross-platform compatible format
|
|
||||||
const credentialJSON = {
|
|
||||||
id: newCredentialInfo.id,
|
|
||||||
rawId: arrayBufferToBase64URL(newCredentialInfo.rawId),
|
|
||||||
type: newCredentialInfo.type,
|
|
||||||
authenticatorAttachment: newCredentialInfo.authenticatorAttachment || null,
|
|
||||||
transports: Array.isArray(response.getTransports) ? response.getTransports() : [],
|
|
||||||
clientExtensionResults: newCredentialInfo.getClientExtensionResults(),
|
|
||||||
response: {
|
|
||||||
attestationObject: arrayBufferToBase64URL(response.attestationObject),
|
|
||||||
clientDataJSON: arrayBufferToBase64URL(response.clientDataJSON)
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Set the form value with the stringified credential data
|
|
||||||
const credential = document.getElementById('credential-data');
|
|
||||||
credential.value = JSON.stringify(credentialJSON);
|
|
||||||
|
|
||||||
// Submit the form
|
|
||||||
const form = document.getElementById('passkey-form');
|
|
||||||
form.submit();
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.error('Passkey creation failed:', err);
|
|
||||||
alert(` + "`" + `Failed to create passkey: ${err.message || 'Unknown error'}` + "`" + `);
|
|
||||||
});
|
|
||||||
}`,
|
|
||||||
Call: templ.SafeScript(`__templ_navigatorCredentialsCreate_63c0`, userId, userHandle, challenge),
|
|
||||||
CallInline: templ.SafeScriptInline(`__templ_navigatorCredentialsCreate_63c0`, userId, userHandle, challenge),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ Form(action, id string) {
|
|
||||||
<form method="GET" action={ templ.SafeURL(action) } id={ id } hx-post={ action } hx-target="#{ id }" hx-swap="outerHTML">
|
|
||||||
{ children... }
|
|
||||||
</form>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormHeader() {
|
|
||||||
<div slot="header">
|
|
||||||
<div class="w-full py-2">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormBody() {
|
|
||||||
<sl-card class="card-form max-w-lg mx-auto">
|
|
||||||
{ children... }
|
|
||||||
<style>
|
|
||||||
.card-form {
|
|
||||||
space-y: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-form [slot='header'] {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-form [slot='footer'] {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</sl-card>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormFooter() {
|
|
||||||
<div slot="footer">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormCancel() {
|
|
||||||
<sl-button href="/" outline>
|
|
||||||
<sl-icon slot="prefix" name="x-lg"></sl-icon>
|
|
||||||
Cancel
|
|
||||||
</sl-button>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormSubmit(text string) {
|
|
||||||
<sl-button type="submit">
|
|
||||||
{ text }
|
|
||||||
<sl-icon slot="suffix" name="arrow-right" library="sonr"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
}
|
|
||||||
@@ -1,265 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func Form(action, id string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<form method=\"GET\" action=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 templ.SafeURL = templ.SafeURL(action)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(string(templ_7745c5c3_Var2)))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" id=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var3 string
|
|
||||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(id)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_form.templ`, Line: 4, Col: 60}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-post=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var4 string
|
|
||||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(action)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_form.templ`, Line: 4, Col: 79}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-target=\"#{ id }\" hx-swap=\"outerHTML\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</form>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormHeader() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div slot=\"header\"><div class=\"w-full py-2\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var5.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormBody() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var6 == nil {
|
|
||||||
templ_7745c5c3_Var6 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-card class=\"card-form max-w-lg mx-auto\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var6.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<style>\n\t\t.card-form {\n\t\t\t\tspace-y: 1rem;\n\t\t}\n\n \t.card-form [slot='header'] {\n \tdisplay: flex;\n \talign-items: center;\n \t justify-content: space-between;\n\t }\n\n\t .card-form [slot='footer'] {\n \t \tdisplay: flex;\n \tjustify-content: space-between;\n \talign-items: center;\n \t}\n\t\t</style></sl-card>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormFooter() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var7 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var7 == nil {
|
|
||||||
templ_7745c5c3_Var7 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div slot=\"footer\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var7.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormCancel() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var8 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var8 == nil {
|
|
||||||
templ_7745c5c3_Var8 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-button href=\"/\" outline><sl-icon slot=\"prefix\" name=\"x-lg\"></sl-icon> Cancel</sl-button>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormSubmit(text string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var9 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var9 == nil {
|
|
||||||
templ_7745c5c3_Var9 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-button type=\"submit\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var10 string
|
|
||||||
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(text)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_form.templ`, Line: 55, Col: 8}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" <sl-icon slot=\"suffix\" name=\"arrow-right\" library=\"sonr\"></sl-icon></sl-button>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
var (
|
|
||||||
nebulaHandle = templ.NewOnceHandle()
|
|
||||||
tailwindHandle = templ.NewOnceHandle()
|
|
||||||
alpineHandle = templ.NewOnceHandle()
|
|
||||||
dexieHandle = templ.NewOnceHandle()
|
|
||||||
htmxHandle = templ.NewOnceHandle()
|
|
||||||
turnstileHandle = templ.NewOnceHandle()
|
|
||||||
)
|
|
||||||
|
|
||||||
templ Head(title string, nebulaVersion string) {
|
|
||||||
<head>
|
|
||||||
@Turnstile()
|
|
||||||
@Tailwind()
|
|
||||||
@Alpine()
|
|
||||||
@Htmx()
|
|
||||||
@Dexie()
|
|
||||||
@Nebula(nebulaVersion)
|
|
||||||
<meta charset="UTF-8"/>
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
||||||
<title>{ title }</title>
|
|
||||||
<!-- Sets the status bar style to transparent -->
|
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
|
|
||||||
<link rel="icon" type="image/png" href="https://cdn.sonr.id/favicon.png"/>
|
|
||||||
<style>
|
|
||||||
@keyframes fade-in {
|
|
||||||
from { opacity: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fade-out {
|
|
||||||
to { opacity: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes slide-from-right {
|
|
||||||
from { transform: translateX(90px); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes slide-to-left {
|
|
||||||
to { transform: translateX(-90px); }
|
|
||||||
}
|
|
||||||
|
|
||||||
.slide-it {
|
|
||||||
view-transition-name: slide-it;
|
|
||||||
}
|
|
||||||
|
|
||||||
::view-transition-old(slide-it) {
|
|
||||||
animation: 180ms cubic-bezier(0.4, 0, 1, 1) both fade-out,
|
|
||||||
600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left;
|
|
||||||
}
|
|
||||||
::view-transition-new(slide-it) {
|
|
||||||
animation: 420ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in,
|
|
||||||
600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{ children... }
|
|
||||||
</head>
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭──────────────────────────────────────────────────────────╮
|
|
||||||
// │ 3rd Party Libraries │
|
|
||||||
// ╰──────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
// Tailwind css dependencies
|
|
||||||
templ Tailwind() {
|
|
||||||
@tailwindHandle.Once() {
|
|
||||||
<script src="https://cdn.tailwindcss.com?plugins=typography,aspect-ratio,container-queries"></script>
|
|
||||||
<script src="https://kit.fontawesome.com/9909219bb5.js" crossorigin="anonymous"></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turnstile is used for cloudflare challenges
|
|
||||||
templ Turnstile() {
|
|
||||||
@turnstileHandle.Once() {
|
|
||||||
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alpine is a component that renders the Alpine.js library
|
|
||||||
templ Alpine() {
|
|
||||||
@alpineHandle.Once() {
|
|
||||||
<script src={ jsDelivrURL("alpinejs", "3.14.6", "dist/cdn.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("@alpinejs/focus", "3.14.6", "dist/cdn.min.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dexie is a component that renders the Dexie.js library
|
|
||||||
templ Dexie() {
|
|
||||||
@dexieHandle.Once() {
|
|
||||||
<script src={ jsDelivrURL("dexie", "4.0.10", "dist/dexie.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("dexie-export-import", "4.1.4", "dist/dexie-export-import.min.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Htmx is a component that renders the Htmx.js library
|
|
||||||
templ Htmx() {
|
|
||||||
@htmxHandle.Once() {
|
|
||||||
<script src={ jsDelivrURL("htmx.org", "1.9.12", "dist/htmx.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-include-vals", "2.0.0", "include-vals.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-path-params", "2.0.0", "path-params.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-alpine-morph", "2.0.0", "alpine-morph.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-sse", "2.2.2", "sse.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-ws", "2.0.2", "ws.min.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nebula is a component that renders the Nebula.js library
|
|
||||||
templ Nebula(version string) {
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
media="(prefers-color-scheme:light)"
|
|
||||||
href={ jsDelivrURL("@onsonr/nebula", version, "cdn/themes/light.css") }
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
media="(prefers-color-scheme:dark)"
|
|
||||||
href={ jsDelivrURL("@onsonr/nebula", version, "cdn/themes/dark.css") }
|
|
||||||
onload="document.documentElement.classList.add('sl-theme-dark');"
|
|
||||||
/>
|
|
||||||
@nebulaHandle.Once() {
|
|
||||||
<script type="module" src={ jsDelivrURL("@onsonr/nebula", version, "cdn/shoelace-autoloader.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭───────────────────────────────────────────────────────────╮
|
|
||||||
// │ Helper Functions │
|
|
||||||
// ╰───────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
func jsDelivrURL(pkg string, version string, path string) string {
|
|
||||||
return fmt.Sprintf("https://cdn.jsdelivr.net/npm/%s@%s/%s", pkg, version, path)
|
|
||||||
}
|
|
||||||
@@ -1,573 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
var (
|
|
||||||
nebulaHandle = templ.NewOnceHandle()
|
|
||||||
tailwindHandle = templ.NewOnceHandle()
|
|
||||||
alpineHandle = templ.NewOnceHandle()
|
|
||||||
dexieHandle = templ.NewOnceHandle()
|
|
||||||
htmxHandle = templ.NewOnceHandle()
|
|
||||||
turnstileHandle = templ.NewOnceHandle()
|
|
||||||
)
|
|
||||||
|
|
||||||
func Head(title string, nebulaVersion string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<head>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Turnstile().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Tailwind().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Alpine().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Htmx().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Dexie().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Nebula(nebulaVersion).Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<meta charset=\"UTF-8\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 25, Col: 16}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</title><!-- Sets the status bar style to transparent --><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\"><link rel=\"icon\" type=\"image/png\" href=\"https://cdn.sonr.id/favicon.png\"><style>\n \t\t@keyframes fade-in {\n \t\tfrom { opacity: 0; }\n \t\t}\n\n \t\t@keyframes fade-out {\n \t\tto { opacity: 0; }\n \t\t}\n\n \t\t@keyframes slide-from-right {\n \t\tfrom { transform: translateX(90px); }\n \t\t}\n\n \t\t@keyframes slide-to-left {\n \t\tto { transform: translateX(-90px); }\n \t\t}\n\n \t\t.slide-it {\n \t\tview-transition-name: slide-it;\n \t\t}\n\n \t\t::view-transition-old(slide-it) {\n \t\tanimation: 180ms cubic-bezier(0.4, 0, 1, 1) both fade-out,\n \t\t600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left;\n \t\t}\n \t\t::view-transition-new(slide-it) {\n \t\tanimation: 420ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in,\n \t\t600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right;\n \t\t}\n\t\t</style>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</head>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭──────────────────────────────────────────────────────────╮
|
|
||||||
// │ 3rd Party Libraries │
|
|
||||||
// ╰──────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
// Tailwind css dependencies
|
|
||||||
func Tailwind() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var3 == nil {
|
|
||||||
templ_7745c5c3_Var3 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"https://cdn.tailwindcss.com?plugins=typography,aspect-ratio,container-queries\"></script> <script src=\"https://kit.fontawesome.com/9909219bb5.js\" crossorigin=\"anonymous\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = tailwindHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turnstile is used for cloudflare challenges
|
|
||||||
func Turnstile() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"https://challenges.cloudflare.com/turnstile/v0/api.js\" async defer></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = turnstileHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var6), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alpine is a component that renders the Alpine.js library
|
|
||||||
func Alpine() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var7 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var7 == nil {
|
|
||||||
templ_7745c5c3_Var7 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var8 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var9 string
|
|
||||||
templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("alpinejs", "3.14.6", "dist/cdn.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 86, Col: 68}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var10 string
|
|
||||||
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@alpinejs/focus", "3.14.6", "dist/cdn.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 87, Col: 75}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = alpineHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var8), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dexie is a component that renders the Dexie.js library
|
|
||||||
func Dexie() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var11 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var11 == nil {
|
|
||||||
templ_7745c5c3_Var11 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var12 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var13 string
|
|
||||||
templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("dexie", "4.0.10", "dist/dexie.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 94, Col: 67}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var14 string
|
|
||||||
templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("dexie-export-import", "4.1.4", "dist/dexie-export-import.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 95, Col: 94}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = dexieHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var12), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Htmx is a component that renders the Htmx.js library
|
|
||||||
func Htmx() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var15 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var15 == nil {
|
|
||||||
templ_7745c5c3_Var15 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var16 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var17 string
|
|
||||||
templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx.org", "1.9.12", "dist/htmx.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 102, Col: 69}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var18 string
|
|
||||||
templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-include-vals", "2.0.0", "include-vals.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 103, Col: 84}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var19 string
|
|
||||||
templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-path-params", "2.0.0", "path-params.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 104, Col: 82}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var20 string
|
|
||||||
templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-alpine-morph", "2.0.0", "alpine-morph.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 105, Col: 84}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var21 string
|
|
||||||
templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-sse", "2.2.2", "sse.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 106, Col: 66}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var22 string
|
|
||||||
templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-ws", "2.0.2", "ws.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 107, Col: 64}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = htmxHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var16), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nebula is a component that renders the Nebula.js library
|
|
||||||
func Nebula(version string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var23 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var23 == nil {
|
|
||||||
templ_7745c5c3_Var23 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<link rel=\"stylesheet\" media=\"(prefers-color-scheme:light)\" href=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var24 string
|
|
||||||
templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@onsonr/nebula", version, "cdn/themes/light.css"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 116, Col: 71}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><link rel=\"stylesheet\" media=\"(prefers-color-scheme:dark)\" href=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var25 string
|
|
||||||
templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@onsonr/nebula", version, "cdn/themes/dark.css"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 121, Col: 70}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" onload=\"document.documentElement.classList.add('sl-theme-dark');\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var26 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script type=\"module\" src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var27 string
|
|
||||||
templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@onsonr/nebula", version, "cdn/shoelace-autoloader.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_head.templ`, Line: 125, Col: 98}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = nebulaHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var26), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭───────────────────────────────────────────────────────────╮
|
|
||||||
// │ Helper Functions │
|
|
||||||
// ╰───────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
func jsDelivrURL(pkg string, version string, path string) string {
|
|
||||||
return fmt.Sprintf("https://cdn.jsdelivr.net/npm/%s@%s/%s", pkg, version, path)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ HeroTitle(title string, subtitle string) {
|
|
||||||
<div class="flex flex-col items-center justify-center h-full w-full gap-2.5">
|
|
||||||
<h1 class="text-2xl md:text-3xl lg:text-4xl font-bold">
|
|
||||||
{ title }
|
|
||||||
</h1>
|
|
||||||
<p class="text-md md:text-lg lg:text-xl font-medium text-gray-500">
|
|
||||||
{ subtitle }
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ HeroStart() {
|
|
||||||
<div class="pt-1.5 mb-3 flex flex-col items-center justify-center h-full">
|
|
||||||
<sl-button size="large" hx-target="#container" hx-get="/register" hx-push-url="/register" type="button">
|
|
||||||
<sl-icon slot="prefix" library="sonr" name="sonr"></sl-icon>
|
|
||||||
Create Vault
|
|
||||||
<sl-icon slot="suffix" library="sonr" name="arrow-right"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ HeroSocials() {
|
|
||||||
<div class="pt-1.5 flex flex-row items-center justify-center h-full gap-3">
|
|
||||||
<sl-button circle outline href="https://sonr.io">
|
|
||||||
<sl-icon name="home" library="sonr" label="Home"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
<sl-button circle outline href="https://onsonr.dev">
|
|
||||||
<sl-icon name="docs" library="sonr" label="Docs"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
<sl-button circle outline href="https://github.com/onsonr/sonr">
|
|
||||||
<sl-icon name="social-github" library="sonr" label="Open Source"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func HeroTitle(title string, subtitle string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"flex flex-col items-center justify-center h-full w-full gap-2.5\"><h1 class=\"text-2xl md:text-3xl lg:text-4xl font-bold\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_hero.templ`, Line: 6, Col: 10}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</h1><p class=\"text-md md:text-lg lg:text-xl font-medium text-gray-500\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var3 string
|
|
||||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(subtitle)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_hero.templ`, Line: 9, Col: 13}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func HeroStart() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var4 == nil {
|
|
||||||
templ_7745c5c3_Var4 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"pt-1.5 mb-3 flex flex-col items-center justify-center h-full\"><sl-button size=\"large\" hx-target=\"#container\" hx-get=\"/register\" hx-push-url=\"/register\" type=\"button\"><sl-icon slot=\"prefix\" library=\"sonr\" name=\"sonr\"></sl-icon> Create Vault <sl-icon slot=\"suffix\" library=\"sonr\" name=\"arrow-right\"></sl-icon></sl-button></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func HeroSocials() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"pt-1.5 flex flex-row items-center justify-center h-full gap-3\"><sl-button circle outline href=\"https://sonr.io\"><sl-icon name=\"home\" library=\"sonr\" label=\"Home\"></sl-icon></sl-button> <sl-button circle outline href=\"https://onsonr.dev\"><sl-icon name=\"docs\" library=\"sonr\" label=\"Docs\"></sl-icon></sl-button> <sl-button circle outline href=\"https://github.com/onsonr/sonr\"><sl-icon name=\"social-github\" library=\"sonr\" label=\"Open Source\"></sl-icon></sl-button></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ LayoutContainer() {
|
|
||||||
<div id="container" class="flex fixed inset-0 z-[99] w-screen min-h-screen">
|
|
||||||
<div class="relative flex flex-wrap items-center w-full min-h-full px-4 py-6 sm:px-6 md:px-8">
|
|
||||||
<div class="relative w-full max-w-screen-lg mx-auto">
|
|
||||||
<div class="flex flex-col items-center justify-center min-h-full gap-4">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Columns is a component that renders a responsive flex container that stacks on mobile
|
|
||||||
templ LayoutColumns() {
|
|
||||||
<div class="flex flex-col h-full w-full gap-4 md:gap-6 md:flex-row md:flex-wrap">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rows is a component that renders a responsive flex container that wraps on mobile
|
|
||||||
templ LayoutRows() {
|
|
||||||
<div class="flex flex-col w-full gap-3 sm:flex-row sm:flex-wrap sm:gap-4">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ LayoutSeparator(text string) {
|
|
||||||
<div class="relative py-6">
|
|
||||||
<div class="absolute inset-0 flex items-center"><span class="w-full border-t"></span></div>
|
|
||||||
<div class="relative flex justify-center text-xs uppercase">
|
|
||||||
<span class="px-2 text-neutral-500">{ text }</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Layout is a component that renders the general layout of the application
|
|
||||||
templ LayoutView(title string) {
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
@Head(title, "0.0.11")
|
|
||||||
<body class="flex items-center justify-center h-full lg:p-24 md:16 p-4 no-scrollbar">
|
|
||||||
<main class="flex-row items-center justify-center mx-auto w-fit max-w-screen-lg gap-y-3">
|
|
||||||
{ children... }
|
|
||||||
</main>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
}
|
|
||||||
|
|
||||||
func Clsx(attrs ...templ.Attributes) templ.Attributes {
|
|
||||||
merged := templ.Attributes{}
|
|
||||||
for _, attr := range attrs {
|
|
||||||
for k, v := range attr {
|
|
||||||
merged[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return merged
|
|
||||||
}
|
|
||||||
@@ -1,222 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func LayoutContainer() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div id=\"container\" class=\"flex fixed inset-0 z-[99] w-screen min-h-screen\"><div class=\"relative flex flex-wrap items-center w-full min-h-full px-4 py-6 sm:px-6 md:px-8\"><div class=\"relative w-full max-w-screen-lg mx-auto\"><div class=\"flex flex-col items-center justify-center min-h-full gap-4\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div></div></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Columns is a component that renders a responsive flex container that stacks on mobile
|
|
||||||
func LayoutColumns() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var2 == nil {
|
|
||||||
templ_7745c5c3_Var2 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"flex flex-col h-full w-full gap-4 md:gap-6 md:flex-row md:flex-wrap\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var2.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rows is a component that renders a responsive flex container that wraps on mobile
|
|
||||||
func LayoutRows() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var3 == nil {
|
|
||||||
templ_7745c5c3_Var3 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"flex flex-col w-full gap-3 sm:flex-row sm:flex-wrap sm:gap-4\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var3.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func LayoutSeparator(text string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var4 == nil {
|
|
||||||
templ_7745c5c3_Var4 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"relative py-6\"><div class=\"absolute inset-0 flex items-center\"><span class=\"w-full border-t\"></span></div><div class=\"relative flex justify-center text-xs uppercase\"><span class=\"px-2 text-neutral-500\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var5 string
|
|
||||||
templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(text)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/base_layout.templ`, Line: 33, Col: 45}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</span></div></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Layout is a component that renders the general layout of the application
|
|
||||||
func LayoutView(title string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var6 == nil {
|
|
||||||
templ_7745c5c3_Var6 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<!doctype html><html lang=\"en\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Head(title, "0.0.11").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<body class=\"flex items-center justify-center h-full lg:p-24 md:16 p-4 no-scrollbar\"><main class=\"flex-row items-center justify-center mx-auto w-fit max-w-screen-lg gap-y-3\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var6.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</main></body></html>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func Clsx(attrs ...templ.Attributes) templ.Attributes {
|
|
||||||
merged := templ.Attributes{}
|
|
||||||
for _, attr := range attrs {
|
|
||||||
for k, v := range attr {
|
|
||||||
merged[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return merged
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ ErrorView(err string) {
|
|
||||||
@LayoutView("Error | Sonr.ID") {
|
|
||||||
@LayoutContainer() {
|
|
||||||
@HeroTitle("Uh oh!", "Something went wrong.")
|
|
||||||
<div class="pt-3 flex flex-col items-center justify-center h-full">
|
|
||||||
<p class="text-red-500">
|
|
||||||
{ err }
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func ErrorView(err string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = HeroTitle("Uh oh!", "Something went wrong.").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" <div class=\"pt-3 flex flex-col items-center justify-center h-full\"><p class=\"text-red-500\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var4 string
|
|
||||||
templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(err)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/gateway/views/view_errors.templ`, Line: 9, Col: 10}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutContainer().Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutView("Error | Sonr.ID").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ InitialView() {
|
|
||||||
@LayoutView("Sonr.ID") {
|
|
||||||
@LayoutContainer() {
|
|
||||||
@HeroTitle("Sonr.ID", "The decentralized identity layer for the web.")
|
|
||||||
@HeroStart()
|
|
||||||
@HeroSocials()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
templ ReturningView() {
|
|
||||||
@LayoutView("Login | Sonr.ID") {
|
|
||||||
@LayoutContainer() {
|
|
||||||
@HeroTitle("Welcome Back!", "Continue with your existing Sonr.ID.")
|
|
||||||
<div class="pt-3 flex flex-col items-center justify-center h-full">
|
|
||||||
<sl-button hx-target="#container" hx-get="/register" type="button">
|
|
||||||
<sl-icon slot="prefix" library="sonr" name="sonr"></sl-icon>
|
|
||||||
Log back in
|
|
||||||
<sl-icon slot="suffix" library="sonr" name="arrow-right"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func InitialView() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = HeroTitle("Sonr.ID", "The decentralized identity layer for the web.").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = HeroStart().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = HeroSocials().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutContainer().Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutView("Sonr.ID").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReturningView() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var4 == nil {
|
|
||||||
templ_7745c5c3_Var4 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = HeroTitle("Welcome Back!", "Continue with your existing Sonr.ID.").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" <div class=\"pt-3 flex flex-col items-center justify-center h-full\"><sl-button hx-target=\"#container\" hx-get=\"/register\" type=\"button\"><sl-icon slot=\"prefix\" library=\"sonr\" name=\"sonr\"></sl-icon> Log back in <sl-icon slot=\"suffix\" library=\"sonr\" name=\"arrow-right\"></sl-icon></sl-button></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutContainer().Render(templ.WithChildren(ctx, templ_7745c5c3_Var6), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutView("Login | Sonr.ID").Render(templ.WithChildren(ctx, templ_7745c5c3_Var5), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ LoadingView() {
|
|
||||||
@LayoutView("Loading... | Sonr.ID") {
|
|
||||||
@LayoutContainer() {
|
|
||||||
@HeroTitle("Loading Vault", "This will be used to login to your vault.")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func LoadingView() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = HeroTitle("Loading Vault", "This will be used to login to your vault.").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutContainer().Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutView("Loading... | Sonr.ID").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
import "github.com/onsonr/sonr/app/gateway/islands"
|
|
||||||
|
|
||||||
templ RegisterProfileView(firstNumber int, lastNumber int) {
|
|
||||||
@LayoutView("New Profile | Sonr.ID") {
|
|
||||||
@LayoutContainer() {
|
|
||||||
@HeroTitle("Basic Info", "Tell us a little about yourself.")
|
|
||||||
@Form("/register/passkey", "create-profile") {
|
|
||||||
@FormBody() {
|
|
||||||
@FormHeader() {
|
|
||||||
<div class="w-full py-2">
|
|
||||||
<sl-avatar shape="circle" size="large" src="https://avatars.githubusercontent.com/u/101929?v=4"></sl-avatar>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@islands.InputHandle()
|
|
||||||
@islands.HumanSlider(firstNumber, lastNumber)
|
|
||||||
@FormFooter() {
|
|
||||||
@FormCancel()
|
|
||||||
@FormSubmit("Next")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
templ RegisterPasskeyView(address string, handle string, name string, challenge string, creationBlock string) {
|
|
||||||
@LayoutView("Register | Sonr.ID") {
|
|
||||||
@LayoutContainer() {
|
|
||||||
@HeroTitle("Link a PassKey", "This will be used to login to your vault.")
|
|
||||||
@Form("/register/finish", "passkey-form") {
|
|
||||||
<input type="hidden" name="credential" id="credential-data" required/>
|
|
||||||
@FormBody() {
|
|
||||||
@FormHeader() {
|
|
||||||
@islands.CardAccount(address, name, handle, creationBlock)
|
|
||||||
}
|
|
||||||
@islands.CoinSelect()
|
|
||||||
@FormFooter() {
|
|
||||||
@islands.InputPasskey(address, handle, challenge)
|
|
||||||
@FormCancel()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,363 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
import "github.com/onsonr/sonr/app/gateway/islands"
|
|
||||||
|
|
||||||
func RegisterProfileView(firstNumber int, lastNumber int) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var2 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = HeroTitle("Basic Info", "Tell us a little about yourself.").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var4 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"w-full py-2\"><sl-avatar shape=\"circle\" size=\"large\" src=\"https://avatars.githubusercontent.com/u/101929?v=4\"></sl-avatar></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = FormHeader().Render(templ.WithChildren(ctx, templ_7745c5c3_Var6), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = islands.InputHandle().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = islands.HumanSlider(firstNumber, lastNumber).Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var7 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = FormCancel().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = FormSubmit("Next").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = FormFooter().Render(templ.WithChildren(ctx, templ_7745c5c3_Var7), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = FormBody().Render(templ.WithChildren(ctx, templ_7745c5c3_Var5), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = Form("/register/passkey", "create-profile").Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutContainer().Render(templ.WithChildren(ctx, templ_7745c5c3_Var3), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutView("New Profile | Sonr.ID").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func RegisterPasskeyView(address string, handle string, name string, challenge string, creationBlock string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var8 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var8 == nil {
|
|
||||||
templ_7745c5c3_Var8 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var9 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var10 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = HeroTitle("Link a PassKey", "This will be used to login to your vault.").Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var11 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<input type=\"hidden\" name=\"credential\" id=\"credential-data\" required>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var12 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var13 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = islands.CardAccount(address, name, handle, creationBlock).Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = FormHeader().Render(templ.WithChildren(ctx, templ_7745c5c3_Var13), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = islands.CoinSelect().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var14 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Err = islands.InputPasskey(address, handle, challenge).Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = FormCancel().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = FormFooter().Render(templ.WithChildren(ctx, templ_7745c5c3_Var14), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = FormBody().Render(templ.WithChildren(ctx, templ_7745c5c3_Var12), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = Form("/register/finish", "passkey-form").Render(templ.WithChildren(ctx, templ_7745c5c3_Var11), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutContainer().Render(templ.WithChildren(ctx, templ_7745c5c3_Var10), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = LayoutView("Register | Sonr.ID").Render(templ.WithChildren(ctx, templ_7745c5c3_Var9), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
//go:build js && wasm
|
|
||||||
// +build js,wasm
|
|
||||||
|
|
||||||
package context
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/base64"
|
|
||||||
"encoding/json"
|
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func WASMMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
|
|
||||||
return func(c echo.Context) error {
|
|
||||||
// Extract WASM context from headers
|
|
||||||
if wasmCtx := c.Request().Header.Get("X-Wasm-Context"); wasmCtx != "" {
|
|
||||||
if ctx, err := DecodeWasmContext(wasmCtx); err == nil {
|
|
||||||
c.Set("wasm_context", ctx)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return next(c)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// decodeWasmContext decodes the WASM context from a base64 encoded string
|
|
||||||
func DecodeWasmContext(ctx string) (map[string]any, error) {
|
|
||||||
decoded, err := base64.StdEncoding.DecodeString(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var ctxData map[string]any
|
|
||||||
err = json.Unmarshal(decoded, &ctxData)
|
|
||||||
return ctxData, err
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
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
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package handlers
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
package handlers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func RenderIndex(c echo.Context) error {
|
|
||||||
return c.Render(http.StatusOK, "index.templ", nil)
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package handlers
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package handlers
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
package handlers
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
package handlers
|
|
||||||
|
|
||||||
import "github.com/labstack/echo/v4"
|
|
||||||
|
|
||||||
func HandleConnect(c echo.Context) error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
//go:build js && wasm
|
|
||||||
|
|
||||||
package vault
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/labstack/echo/v4"
|
|
||||||
echomiddleware "github.com/labstack/echo/v4/middleware"
|
|
||||||
"github.com/onsonr/sonr/app/vault/context"
|
|
||||||
"github.com/onsonr/sonr/internal/config/motr"
|
|
||||||
"github.com/onsonr/sonr/internal/database/motrorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Vault = *echo.Echo
|
|
||||||
|
|
||||||
// New returns a new Vault instance
|
|
||||||
func New(config *motr.Config, dbq *motrorm.Queries) (Vault, error) {
|
|
||||||
e := echo.New()
|
|
||||||
// Override default behaviors
|
|
||||||
e.IPExtractor = echo.ExtractIPDirect()
|
|
||||||
e.HTTPErrorHandler = handleError()
|
|
||||||
|
|
||||||
// Built-in middleware
|
|
||||||
e.Use(echomiddleware.Logger())
|
|
||||||
e.Use(echomiddleware.Recover())
|
|
||||||
e.Use(context.WASMMiddleware)
|
|
||||||
registerRoutes(e)
|
|
||||||
return e, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func handleError() echo.HTTPErrorHandler {
|
|
||||||
return func(err error, c echo.Context) {
|
|
||||||
if he, ok := err.(*echo.HTTPError); ok {
|
|
||||||
// Log the error if needed
|
|
||||||
c.Logger().Errorf("Error: %v", he.Message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// RegisterRoutes registers the Decentralized Web Node API routes.
|
|
||||||
func registerRoutes(e *echo.Echo) {
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ Form(action, id string) {
|
|
||||||
<form hx-post={ action } hx-target="#{ id }" hx-swap="outerHTML">
|
|
||||||
{ children... }
|
|
||||||
</form>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormHeader() {
|
|
||||||
<div slot="header">
|
|
||||||
<div class="w-full py-2">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormBody() {
|
|
||||||
<sl-card class="card-form max-w-lg mx-auto">
|
|
||||||
{ children... }
|
|
||||||
<style>
|
|
||||||
.card-form {
|
|
||||||
space-y: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-form [slot='header'] {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card-form [slot='footer'] {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</sl-card>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormFooter() {
|
|
||||||
<div slot="footer">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormCancel() {
|
|
||||||
<sl-button href="/" outline>
|
|
||||||
<sl-icon slot="prefix" name="x-lg"></sl-icon>
|
|
||||||
Cancel
|
|
||||||
</sl-button>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ FormSubmit(text string) {
|
|
||||||
<sl-button type="submit">
|
|
||||||
{ text }
|
|
||||||
<sl-icon slot="suffix" name="arrow-right" library="sonr"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
}
|
|
||||||
@@ -1,243 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func Form(action, id string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<form hx-post=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(action)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_form.templ`, Line: 4, Col: 23}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" hx-target=\"#{ id }\" hx-swap=\"outerHTML\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</form>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormHeader() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var3 == nil {
|
|
||||||
templ_7745c5c3_Var3 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div slot=\"header\"><div class=\"w-full py-2\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var3.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormBody() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var4 == nil {
|
|
||||||
templ_7745c5c3_Var4 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-card class=\"card-form max-w-lg mx-auto\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var4.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<style>\n\t\t.card-form {\n\t\t\t\tspace-y: 1rem;\n\t\t}\n\n \t.card-form [slot='header'] {\n \tdisplay: flex;\n \talign-items: center;\n \t justify-content: space-between;\n\t }\n\n\t .card-form [slot='footer'] {\n \t \tdisplay: flex;\n \tjustify-content: space-between;\n \talign-items: center;\n \t}\n\t\t</style></sl-card>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormFooter() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div slot=\"footer\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var5.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormCancel() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var6 == nil {
|
|
||||||
templ_7745c5c3_Var6 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-button href=\"/\" outline><sl-icon slot=\"prefix\" name=\"x-lg\"></sl-icon> Cancel</sl-button>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func FormSubmit(text string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var7 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var7 == nil {
|
|
||||||
templ_7745c5c3_Var7 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<sl-button type=\"submit\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var8 string
|
|
||||||
templ_7745c5c3_Var8, templ_7745c5c3_Err = templ.JoinStringErrs(text)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_form.templ`, Line: 55, Col: 8}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var8))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" <sl-icon slot=\"suffix\" name=\"arrow-right\" library=\"sonr\"></sl-icon></sl-button>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
var (
|
|
||||||
nebulaHandle = templ.NewOnceHandle()
|
|
||||||
tailwindHandle = templ.NewOnceHandle()
|
|
||||||
alpineHandle = templ.NewOnceHandle()
|
|
||||||
dexieHandle = templ.NewOnceHandle()
|
|
||||||
htmxHandle = templ.NewOnceHandle()
|
|
||||||
turnstileHandle = templ.NewOnceHandle()
|
|
||||||
)
|
|
||||||
|
|
||||||
templ Head(title string, nebulaVersion string) {
|
|
||||||
<head>
|
|
||||||
@Turnstile()
|
|
||||||
@Tailwind()
|
|
||||||
@Alpine()
|
|
||||||
@Htmx()
|
|
||||||
@Dexie()
|
|
||||||
@Nebula(nebulaVersion)
|
|
||||||
<meta charset="UTF-8"/>
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
||||||
<title>{ title }</title>
|
|
||||||
<!-- Sets the status bar style to transparent -->
|
|
||||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
|
|
||||||
<link rel="icon" type="image/png" href="https://cdn.sonr.id/favicon.png"/>
|
|
||||||
<style>
|
|
||||||
@keyframes fade-in {
|
|
||||||
from { opacity: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes fade-out {
|
|
||||||
to { opacity: 0; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes slide-from-right {
|
|
||||||
from { transform: translateX(90px); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes slide-to-left {
|
|
||||||
to { transform: translateX(-90px); }
|
|
||||||
}
|
|
||||||
|
|
||||||
.slide-it {
|
|
||||||
view-transition-name: slide-it;
|
|
||||||
}
|
|
||||||
|
|
||||||
::view-transition-old(slide-it) {
|
|
||||||
animation: 180ms cubic-bezier(0.4, 0, 1, 1) both fade-out,
|
|
||||||
600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left;
|
|
||||||
}
|
|
||||||
::view-transition-new(slide-it) {
|
|
||||||
animation: 420ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in,
|
|
||||||
600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
{ children... }
|
|
||||||
</head>
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭──────────────────────────────────────────────────────────╮
|
|
||||||
// │ 3rd Party Libraries │
|
|
||||||
// ╰──────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
// Tailwind css dependencies
|
|
||||||
templ Tailwind() {
|
|
||||||
@tailwindHandle.Once() {
|
|
||||||
<script src="https://cdn.tailwindcss.com?plugins=typography,aspect-ratio,container-queries"></script>
|
|
||||||
<script src="https://kit.fontawesome.com/9909219bb5.js" crossorigin="anonymous"></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turnstile is used for cloudflare challenges
|
|
||||||
templ Turnstile() {
|
|
||||||
@turnstileHandle.Once() {
|
|
||||||
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alpine is a component that renders the Alpine.js library
|
|
||||||
templ Alpine() {
|
|
||||||
@alpineHandle.Once() {
|
|
||||||
<script src={ jsDelivrURL("alpinejs", "3.14.6", "dist/cdn.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("@alpinejs/focus", "3.14.6", "dist/cdn.min.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dexie is a component that renders the Dexie.js library
|
|
||||||
templ Dexie() {
|
|
||||||
@dexieHandle.Once() {
|
|
||||||
<script src={ jsDelivrURL("dexie", "4.0.10", "dist/dexie.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("dexie-export-import", "4.1.4", "dist/dexie-export-import.min.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Htmx is a component that renders the Htmx.js library
|
|
||||||
templ Htmx() {
|
|
||||||
@htmxHandle.Once() {
|
|
||||||
<script src={ jsDelivrURL("htmx.org", "1.9.12", "dist/htmx.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-include-vals", "2.0.0", "include-vals.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-path-params", "2.0.0", "path-params.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-alpine-morph", "2.0.0", "alpine-morph.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-sse", "2.2.2", "sse.min.js") }></script>
|
|
||||||
<script src={ jsDelivrURL("htmx-ext-ws", "2.0.2", "ws.min.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nebula is a component that renders the Nebula.js library
|
|
||||||
templ Nebula(version string) {
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
media="(prefers-color-scheme:light)"
|
|
||||||
href={ jsDelivrURL("@onsonr/nebula", version, "cdn/themes/light.css") }
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="stylesheet"
|
|
||||||
media="(prefers-color-scheme:dark)"
|
|
||||||
href={ jsDelivrURL("@onsonr/nebula", version, "cdn/themes/dark.css") }
|
|
||||||
onload="document.documentElement.classList.add('sl-theme-dark');"
|
|
||||||
/>
|
|
||||||
@nebulaHandle.Once() {
|
|
||||||
<script type="module" src={ jsDelivrURL("@onsonr/nebula", version, "cdn/shoelace-autoloader.js") }></script>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭───────────────────────────────────────────────────────────╮
|
|
||||||
// │ Helper Functions │
|
|
||||||
// ╰───────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
func jsDelivrURL(pkg string, version string, path string) string {
|
|
||||||
return fmt.Sprintf("https://cdn.jsdelivr.net/npm/%s@%s/%s", pkg, version, path)
|
|
||||||
}
|
|
||||||
@@ -1,573 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
var (
|
|
||||||
nebulaHandle = templ.NewOnceHandle()
|
|
||||||
tailwindHandle = templ.NewOnceHandle()
|
|
||||||
alpineHandle = templ.NewOnceHandle()
|
|
||||||
dexieHandle = templ.NewOnceHandle()
|
|
||||||
htmxHandle = templ.NewOnceHandle()
|
|
||||||
turnstileHandle = templ.NewOnceHandle()
|
|
||||||
)
|
|
||||||
|
|
||||||
func Head(title string, nebulaVersion string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<head>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Turnstile().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Tailwind().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Alpine().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Htmx().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Dexie().Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = Nebula(nebulaVersion).Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<meta charset=\"UTF-8\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 25, Col: 16}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</title><!-- Sets the status bar style to transparent --><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\"><link rel=\"icon\" type=\"image/png\" href=\"https://cdn.sonr.id/favicon.png\"><style>\n \t\t@keyframes fade-in {\n \t\tfrom { opacity: 0; }\n \t\t}\n\n \t\t@keyframes fade-out {\n \t\tto { opacity: 0; }\n \t\t}\n\n \t\t@keyframes slide-from-right {\n \t\tfrom { transform: translateX(90px); }\n \t\t}\n\n \t\t@keyframes slide-to-left {\n \t\tto { transform: translateX(-90px); }\n \t\t}\n\n \t\t.slide-it {\n \t\tview-transition-name: slide-it;\n \t\t}\n\n \t\t::view-transition-old(slide-it) {\n \t\tanimation: 180ms cubic-bezier(0.4, 0, 1, 1) both fade-out,\n \t\t600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-to-left;\n \t\t}\n \t\t::view-transition-new(slide-it) {\n \t\tanimation: 420ms cubic-bezier(0, 0, 0.2, 1) 90ms both fade-in,\n \t\t600ms cubic-bezier(0.4, 0, 0.2, 1) both slide-from-right;\n \t\t}\n\t\t</style>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</head>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭──────────────────────────────────────────────────────────╮
|
|
||||||
// │ 3rd Party Libraries │
|
|
||||||
// ╰──────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
// Tailwind css dependencies
|
|
||||||
func Tailwind() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var3 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var3 == nil {
|
|
||||||
templ_7745c5c3_Var3 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"https://cdn.tailwindcss.com?plugins=typography,aspect-ratio,container-queries\"></script> <script src=\"https://kit.fontawesome.com/9909219bb5.js\" crossorigin=\"anonymous\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = tailwindHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var4), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Turnstile is used for cloudflare challenges
|
|
||||||
func Turnstile() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var6 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"https://challenges.cloudflare.com/turnstile/v0/api.js\" async defer></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = turnstileHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var6), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Alpine is a component that renders the Alpine.js library
|
|
||||||
func Alpine() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var7 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var7 == nil {
|
|
||||||
templ_7745c5c3_Var7 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var8 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var9 string
|
|
||||||
templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("alpinejs", "3.14.6", "dist/cdn.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 86, Col: 68}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var10 string
|
|
||||||
templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@alpinejs/focus", "3.14.6", "dist/cdn.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 87, Col: 75}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = alpineHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var8), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dexie is a component that renders the Dexie.js library
|
|
||||||
func Dexie() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var11 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var11 == nil {
|
|
||||||
templ_7745c5c3_Var11 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var12 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var13 string
|
|
||||||
templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("dexie", "4.0.10", "dist/dexie.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 94, Col: 67}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var14 string
|
|
||||||
templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("dexie-export-import", "4.1.4", "dist/dexie-export-import.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 95, Col: 94}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = dexieHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var12), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Htmx is a component that renders the Htmx.js library
|
|
||||||
func Htmx() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var15 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var15 == nil {
|
|
||||||
templ_7745c5c3_Var15 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
templ_7745c5c3_Var16 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var17 string
|
|
||||||
templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx.org", "1.9.12", "dist/htmx.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 102, Col: 69}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var18 string
|
|
||||||
templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-include-vals", "2.0.0", "include-vals.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 103, Col: 84}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var19 string
|
|
||||||
templ_7745c5c3_Var19, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-path-params", "2.0.0", "path-params.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 104, Col: 82}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var19))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var20 string
|
|
||||||
templ_7745c5c3_Var20, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-alpine-morph", "2.0.0", "alpine-morph.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 105, Col: 84}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var20))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var21 string
|
|
||||||
templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-sse", "2.2.2", "sse.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 106, Col: 66}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script> <script src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var22 string
|
|
||||||
templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("htmx-ext-ws", "2.0.2", "ws.min.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 107, Col: 64}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var22))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = htmxHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var16), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Nebula is a component that renders the Nebula.js library
|
|
||||||
func Nebula(version string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var23 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var23 == nil {
|
|
||||||
templ_7745c5c3_Var23 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<link rel=\"stylesheet\" media=\"(prefers-color-scheme:light)\" href=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var24 string
|
|
||||||
templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@onsonr/nebula", version, "cdn/themes/light.css"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 116, Col: 71}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"><link rel=\"stylesheet\" media=\"(prefers-color-scheme:dark)\" href=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var25 string
|
|
||||||
templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@onsonr/nebula", version, "cdn/themes/dark.css"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 121, Col: 70}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\" onload=\"document.documentElement.classList.add('sl-theme-dark');\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Var26 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<script type=\"module\" src=\"")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var27 string
|
|
||||||
templ_7745c5c3_Var27, templ_7745c5c3_Err = templ.JoinStringErrs(jsDelivrURL("@onsonr/nebula", version, "cdn/shoelace-autoloader.js"))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_head.templ`, Line: 125, Col: 98}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var27))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("\"></script>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
templ_7745c5c3_Err = nebulaHandle.Once().Render(templ.WithChildren(ctx, templ_7745c5c3_Var26), templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ╭───────────────────────────────────────────────────────────╮
|
|
||||||
// │ Helper Functions │
|
|
||||||
// ╰───────────────────────────────────────────────────────────╯
|
|
||||||
|
|
||||||
func jsDelivrURL(pkg string, version string, path string) string {
|
|
||||||
return fmt.Sprintf("https://cdn.jsdelivr.net/npm/%s@%s/%s", pkg, version, path)
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ HeroTitle(title string, subtitle string) {
|
|
||||||
<div class="flex flex-col items-center justify-center h-full w-full gap-2.5">
|
|
||||||
<h1 class="text-2xl md:text-3xl lg:text-4xl font-bold">
|
|
||||||
{ title }
|
|
||||||
</h1>
|
|
||||||
<p class="text-md md:text-lg lg:text-xl font-medium text-gray-500">
|
|
||||||
{ subtitle }
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ HeroStart() {
|
|
||||||
<div class="pt-1.5 mb-3 flex flex-col items-center justify-center h-full">
|
|
||||||
<sl-button size="large" hx-target="#container" hx-get="/register" hx-push-url="/register" type="button">
|
|
||||||
<sl-icon slot="prefix" library="sonr" name="sonr"></sl-icon>
|
|
||||||
Create Vault
|
|
||||||
<sl-icon slot="suffix" library="sonr" name="arrow-right"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ HeroSocials() {
|
|
||||||
<div class="pt-1.5 flex flex-row items-center justify-center h-full gap-3">
|
|
||||||
<sl-button circle outline href="https://sonr.io">
|
|
||||||
<sl-icon name="home" library="sonr" label="Home"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
<sl-button circle outline href="https://onsonr.dev">
|
|
||||||
<sl-icon name="docs" library="sonr" label="Docs"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
<sl-button circle outline href="https://github.com/onsonr/sonr">
|
|
||||||
<sl-icon name="social-github" library="sonr" label="Open Source"></sl-icon>
|
|
||||||
</sl-button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
@@ -1,124 +0,0 @@
|
|||||||
// Code generated by templ - DO NOT EDIT.
|
|
||||||
|
|
||||||
// templ: version: v0.2.793
|
|
||||||
package views
|
|
||||||
|
|
||||||
//lint:file-ignore SA4006 This context is only used if a nested component is present.
|
|
||||||
|
|
||||||
import "github.com/a-h/templ"
|
|
||||||
import templruntime "github.com/a-h/templ/runtime"
|
|
||||||
|
|
||||||
func HeroTitle(title string, subtitle string) templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var1 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var1 == nil {
|
|
||||||
templ_7745c5c3_Var1 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"flex flex-col items-center justify-center h-full w-full gap-2.5\"><h1 class=\"text-2xl md:text-3xl lg:text-4xl font-bold\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var2 string
|
|
||||||
templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_hero.templ`, Line: 6, Col: 10}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</h1><p class=\"text-md md:text-lg lg:text-xl font-medium text-gray-500\">")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
var templ_7745c5c3_Var3 string
|
|
||||||
templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(subtitle)
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ.Error{Err: templ_7745c5c3_Err, FileName: `app/vault/views/base_hero.templ`, Line: 9, Col: 13}
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("</p></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func HeroStart() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var4 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var4 == nil {
|
|
||||||
templ_7745c5c3_Var4 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"pt-1.5 mb-3 flex flex-col items-center justify-center h-full\"><sl-button size=\"large\" hx-target=\"#container\" hx-get=\"/register\" hx-push-url=\"/register\" type=\"button\"><sl-icon slot=\"prefix\" library=\"sonr\" name=\"sonr\"></sl-icon> Create Vault <sl-icon slot=\"suffix\" library=\"sonr\" name=\"arrow-right\"></sl-icon></sl-button></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func HeroSocials() templ.Component {
|
|
||||||
return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) {
|
|
||||||
templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context
|
|
||||||
if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil {
|
|
||||||
return templ_7745c5c3_CtxErr
|
|
||||||
}
|
|
||||||
templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W)
|
|
||||||
if !templ_7745c5c3_IsBuffer {
|
|
||||||
defer func() {
|
|
||||||
templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer)
|
|
||||||
if templ_7745c5c3_Err == nil {
|
|
||||||
templ_7745c5c3_Err = templ_7745c5c3_BufErr
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
ctx = templ.InitializeContext(ctx)
|
|
||||||
templ_7745c5c3_Var5 := templ.GetChildren(ctx)
|
|
||||||
if templ_7745c5c3_Var5 == nil {
|
|
||||||
templ_7745c5c3_Var5 = templ.NopComponent
|
|
||||||
}
|
|
||||||
ctx = templ.ClearChildren(ctx)
|
|
||||||
_, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("<div class=\"pt-1.5 flex flex-row items-center justify-center h-full gap-3\"><sl-button circle outline href=\"https://sonr.io\"><sl-icon name=\"home\" library=\"sonr\" label=\"Home\"></sl-icon></sl-button> <sl-button circle outline href=\"https://onsonr.dev\"><sl-icon name=\"docs\" library=\"sonr\" label=\"Docs\"></sl-icon></sl-button> <sl-button circle outline href=\"https://github.com/onsonr/sonr\"><sl-icon name=\"social-github\" library=\"sonr\" label=\"Open Source\"></sl-icon></sl-button></div>")
|
|
||||||
if templ_7745c5c3_Err != nil {
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
}
|
|
||||||
return templ_7745c5c3_Err
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var _ = templruntime.GeneratedTemplate
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
package views
|
|
||||||
|
|
||||||
templ LayoutContainer() {
|
|
||||||
<div id="container" class="flex fixed inset-0 z-[99] w-screen min-h-screen">
|
|
||||||
<div class="relative flex flex-wrap items-center w-full min-h-full px-4 py-6 sm:px-6 md:px-8">
|
|
||||||
<div class="relative w-full max-w-screen-lg mx-auto">
|
|
||||||
<div class="flex flex-col items-center justify-center min-h-full gap-4">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Columns is a component that renders a responsive flex container that stacks on mobile
|
|
||||||
templ LayoutColumns() {
|
|
||||||
<div class="flex flex-col h-full w-full gap-4 md:gap-6 md:flex-row md:flex-wrap">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rows is a component that renders a responsive flex container that wraps on mobile
|
|
||||||
templ LayoutRows() {
|
|
||||||
<div class="flex flex-col w-full gap-3 sm:flex-row sm:flex-wrap sm:gap-4">
|
|
||||||
{ children... }
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
templ LayoutSeparator(text string) {
|
|
||||||
<div class="relative py-6">
|
|
||||||
<div class="absolute inset-0 flex items-center"><span class="w-full border-t"></span></div>
|
|
||||||
<div class="relative flex justify-center text-xs uppercase">
|
|
||||||
<span class="px-2 text-neutral-500">{ text }</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
// Layout is a component that renders the general layout of the application
|
|
||||||
templ LayoutView(title string) {
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
@Head(title, "0.0.11")
|
|
||||||
<body class="flex items-center justify-center h-full lg:p-24 md:16 p-4 no-scrollbar">
|
|
||||||
<main class="flex-row items-center justify-center mx-auto w-fit max-w-screen-lg gap-y-3">
|
|
||||||
{ children... }
|
|
||||||
</main>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
}
|
|
||||||
|
|
||||||
func Clsx(attrs ...templ.Attributes) templ.Attributes {
|
|
||||||
merged := templ.Attributes{}
|
|
||||||
for _, attr := range attrs {
|
|
||||||
for k, v := range attr {
|
|
||||||
merged[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return merged
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user