diff --git a/Cargo.lock b/Cargo.lock index 7586cbc572..c684e2770c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1313,6 +1313,7 @@ dependencies = [ "env_logger", "executable-path", "hex", + "http", "integer-cbrt", "integer-sqrt", "jsonrpc", @@ -1330,6 +1331,7 @@ dependencies = [ "reqwest", "tempfile", "tokio", + "tower-http", "unindent", ] diff --git a/Cargo.toml b/Cargo.toml index acd82ca4fe..00704adb03 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ derive_more = "0.99.17" dirs = "4.0.0" env_logger = "0.9.0" executable-path = "1.0.0" +http = "0.2.6" integer-cbrt = "0.1.2" integer-sqrt = "0.1.5" jsonrpc = "0.12.1" @@ -28,6 +29,7 @@ ord-lmdb-zero = "0.4.5" rayon = "1.5.1" redb = { version = "0.0.5", optional = true } tokio = { version = "1.17.0", features = ["rt-multi-thread"] } +tower-http = { version = "0.2.5", features = ["cors"] } [dev-dependencies] criterion = "0.3.5" diff --git a/docs/.prettierrc b/docs/.prettierrc new file mode 100644 index 0000000000..0a725205c8 --- /dev/null +++ b/docs/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true +} diff --git a/docs/index.html b/docs/index.html index 935979fcf2..9c96cd8875 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1,17 @@ -

THERE WILL ONLY EVER BE 2,099,999,997,690,000 ORDINALS

+ + + + Ordinals + + +

THERE WILL ONLY EVER BE 2,099,999,997,690,000 ORDINALS

+

List

+
+ + + +
+
+ + + diff --git a/docs/index.js b/docs/index.js new file mode 100644 index 0000000000..f4a5164f07 --- /dev/null +++ b/docs/index.js @@ -0,0 +1,30 @@ +async function list(outpoint) { + document.getElementById('result').innerHTML = ''; + + try { + const response = await fetch( + `http://api.ordinals.com:8000/list/${outpoint}` + ); + + if (!response.ok) { + const text = await response.text(); + document.getElementById( + 'result' + ).innerHTML = `${response.statusText}: ${text}`; + return; + } + + const ranges = await response.json(); + + document.getElementById('result').innerHTML = ranges + .map((range) => `[${range[0]}, ${range[1]})
`) + .join(''); + } catch (error) { + document.getElementById('result').innerHTML = `Exception: ${error}`; + } +} + +document.getElementById('form').addEventListener('submit', (e) => { + e.preventDefault(); + list(document.getElementById('outpoint').value); +}); diff --git a/src/main.rs b/src/main.rs index 970597c113..da0c9cb45a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,6 +38,7 @@ use { time::{Duration, Instant}, }, tokio::runtime::Runtime, + tower_http::cors::{Any, CorsLayer}, }; #[cfg(feature = "redb")] diff --git a/src/subcommand/server.rs b/src/subcommand/server.rs index 89f2d6d47f..64c6057a68 100644 --- a/src/subcommand/server.rs +++ b/src/subcommand/server.rs @@ -16,9 +16,17 @@ impl Server { let app = Router::new() .route("/list/:outpoint", get(Self::list)) .route("/status", get(Self::status)) - .layer(extract::Extension(Arc::new(Mutex::new(index)))); - - let addr = (self.address, self.port).to_socket_addrs()?.next().unwrap(); + .layer(extract::Extension(Arc::new(Mutex::new(index)))) + .layer( + CorsLayer::new() + .allow_methods([http::Method::GET]) + .allow_origin(Any), + ); + + let addr = (self.address, self.port) + .to_socket_addrs()? + .next() + .ok_or_else(|| anyhow!("Failed to get socket addrs"))?; let handle = Handle::new();