TODO _headers file place.wisp.settings lexicon as a lexiconal way of configuring this
ERROR
cli/.gitignore
ERROR
cli/.gitignore
Failed to calculate interdiff for this file.
REVERTED
cli/Cargo.lock
REVERTED
cli/Cargo.lock
ERROR
cli/Cargo.toml
ERROR
cli/Cargo.toml
Failed to calculate interdiff for this file.
ERROR
cli/src/cid.rs
ERROR
cli/src/cid.rs
Failed to calculate interdiff for this file.
NEW
README.md
NEW
README.md
···+The hosting service supports Netlify-style `_redirects` files for managing URLs. Place a `_redirects` file in your site root to enable:
NEW
hosting-service/EXAMPLE.md
NEW
hosting-service/EXAMPLE.md
···-This document demonstrates how HTML path rewriting works when serving sites via the `/s/:identifier/:site/*` route.-When you create a static site with absolute paths like `/style.css` or `/images/logo.png`, these paths work fine when served from the root domain. However, when served from a subdirectory like `/s/alice.bsky.social/mysite/`, these absolute paths break because they resolve to the server root instead of the site root.-The hosting service automatically rewrites absolute paths in HTML files to work correctly in the subdirectory context.-srcset="/s/alice.bsky.social/mysite/images/hero.jpg 1x, /s/alice.bsky.social/mysite/images/hero@2x.jpg 2x"-If you're using relative paths already (like `./style.css` or `../images/logo.png`), they'll work without any rewriting.
···
NEW
hosting-service/example-_redirects
NEW
hosting-service/example-_redirects
···
···
NEW
hosting-service/src/lib/redirects.test.ts
NEW
hosting-service/src/lib/redirects.test.ts
···
···
NEW
hosting-service/src/lib/redirects.ts
NEW
hosting-service/src/lib/redirects.ts
···
···+if ([200, 301, 302].includes(rule.status) && context?.queryParams && !targetPath.includes('?')) {
NEW
hosting-service/src/server.ts
NEW
hosting-service/src/server.ts
···import { logger, observabilityMiddleware, observabilityErrorHandler, logCollector, errorTracker, metricsCollector } from './lib/observability';import { fileCache, metadataCache, rewrittenHtmlCache, getCacheKey, type FileMetadata } from './lib/cache';·····················
···import { logger, observabilityMiddleware, observabilityErrorHandler, logCollector, errorTracker, metricsCollector } from './lib/observability';import { fileCache, metadataCache, rewrittenHtmlCache, getCacheKey, type FileMetadata } from './lib/cache';+import { loadRedirectRules, matchRedirectRule, parseCookies, parseQueryString, type RedirectRule } from './lib/redirects';······+async function serveFileInternalWithRewrite(did: string, rkey: string, filePath: string, basePath: string) {···············
NEW
cli/src/download.rs
NEW
cli/src/download.rs
···
···+pub async fn download_blob(pds_url: &Url, blob_ref: &BlobRef<'_>, did: &str) -> miette::Result<Bytes> {+pub fn decompress_blob(data: &[u8], is_base64: bool, is_gzipped: bool) -> miette::Result<Vec<u8>> {
NEW
cli/src/main.rs
NEW
cli/src/main.rs
···use jacquard::client::{Agent, FileAuthStore, AgentSessionExt, MemoryCredentialSession, AgentSession};···
···use jacquard::client::{Agent, FileAuthStore, AgentSessionExt, MemoryCredentialSession, AgentSession};···
NEW
cli/src/metadata.rs
NEW
cli/src/metadata.rs
···
···
NEW
cli/src/pull.rs
NEW
cli/src/pull.rs
···
···+let file_count = fs_record.file_count.map(|c| c.to_string()).unwrap_or_else(|| "?".to_string());+let output_name = output_dir.file_name().unwrap_or_else(|| std::ffi::OsStr::new("site")).to_string_lossy();
NEW
cli/src/serve.rs
NEW
cli/src/serve.rs
···
···+fn watch_firehose(state: ServerState) -> std::pin::Pin<Box<dyn std::future::Future<Output = miette::Result<()>> + Send>> {
NEW
.gitmodules
NEW
.gitmodules
NEW
cli/jacquard
NEW
cli/jacquard
···
···
NEW
crates.nix
NEW
crates.nix
·········
·········
NEW
flake.nix
NEW
flake.nix
···
···+packages.wisp-cli-x86_64-linux = mkRenamedPackage "wisp-cli-x86_64-linux" crateOutputs.packages.release;+packages.wisp-cli-aarch64-linux = mkRenamedPackage "wisp-cli-aarch64-linux" crateOutputs.allTargets."aarch64-unknown-linux-gnu".packages.release;+packages.wisp-cli-x86_64-windows = mkRenamedPackage "wisp-cli-x86_64-windows.exe" crateOutputs.allTargets."x86_64-pc-windows-gnu".packages.release;+packages.wisp-cli-aarch64-darwin = mkRenamedPackage "wisp-cli-aarch64-darwin" crateOutputs.allTargets."aarch64-apple-darwin".packages.release;