on master help sign in
bridge/src/lib/useLocalHosting.js
51 lines 1.2 kB history raw
1import { useState, useEffect, useMemo } from 'react';
2import { Just } from 'folktale/maybe';
3import * as ob from 'urbit-ob';
5import { usePointCursor } from 'store/pointCursor';
7const DOMAIN = 'arvo.network';
9const STATE = {
10 UNKNOWN: 'UNKNOWN',
11 MISSING: 'MISSING',
12 RUNNING: 'RUNNING',
13};
15export default function useLocalHosting() {
16 const [status, setStatus] = useState(STATE.UNKNOWN);
18 const { pointCursor } = usePointCursor();
20 useEffect(() => {
21 const updateStatus = async point => {
22 const patp = ob.patp(point).slice(1);
23 try {
24 const { who } = await fetch(
25 `https://${patp}.${DOMAIN}/who.json`
26 ).then(r => r.json());
27 if (who === patp) {
28 setStatus(STATE.RUNNING);
29 } else {
30 setStatus(STATE.MISSING);
31 }
32 } catch (e) {
33 setStatus(STATE.MISSING);
34 }
35 };
36 if (Just.hasInstance(pointCursor)) {
37 updateStatus(pointCursor.value);
38 }
39 }, [pointCursor]);
41 const url = useMemo(
42 () =>
43 pointCursor.value &&
44 `https://${ob.patp(pointCursor.value).slice(1)}.${DOMAIN}`,
45 [pointCursor]
46 );
48 const running = useMemo(() => status === STATE.RUNNING, [status]);
50 return { running, url };