@@ -1,244 +0,0 @@
1−import { useState, useCallback, useMemo } from 'react';
2−import { Nothing } from 'folktale/maybe';
3−import * as ob from 'urbit-ob';
5−import { getVaneName, getVaneNumber } from 'lib/hosting';
6−import SolarisClient from 'lib/SolarisClient';
8−import { usePointCursor } from 'store/pointCursor';
17−function useHostingStore(url, domain, disabled) {
18− const client = new SolarisClient(url);
20− const { pointCursor } = usePointCursor();
22− const [bootProgress, setBootProgress] = useState(0);
23− const [bootMessage, setBootMessage] = useState('Assembling Urbit');
24− const [startTime] = useState(Date.now());
26− const [status, _setStatus] = useState(STATE.UNKNOWN);
27− const setStatus = useCallback(
34− const [sysEvents, setSysEvents] = useState([]);
35− const [newEvents, setNewEvents] = useState([]);
36− const [runEvents, setRunEvents] = useState([]);
38− const [error, _setError] = useState();
39− const setError = useCallback(
43− setStatus(STATE.UNKNOWN);
44− console.error(error);
47− [_setError, setStatus]
50− const unknown = status === STATE.UNKNOWN;
51− const missing = status === STATE.MISSING;
52− const running = status === STATE.RUNNING;
53− const pending = status === STATE.PENDING;
57− const resetEvents = useCallback(() => {
61− }, [setSysEvents, setNewEvents, setRunEvents]);
63− const newSource = useCallback(
64− (url, retry = 0) => {
65− let source = new EventSource(url);
67− source.addEventListener('sys', event => {
68− const sysEvent = JSON.parse(event.data);
69− const time = new Date(sysEvent.object.firstTimestamp).getTime();
70− if (time > startTime) {
71− setSysEvents(previous => [...previous, sysEvent]);
75− source.addEventListener('new', event => {
76− if (event.data !== '') {
77− setNewEvents(previous => [...previous, event.data]);
79− if (event.data === '1-b') {
80− setBootMessage('Compiling Hoon');
81− setBootProgress(0.2);
82− } else if (event.data === '1-c') {
83− setBootProgress(0.25);
84− } else if (event.data === '%arvo-assembly') {
85− setBootMessage('Compiling Urbit OS');
86− setBootProgress(0.3);
87− } else if (event.data.startsWith('[%vane %')) {
88− const vane = getVaneName(event.data.slice(8, 9));
89− setBootMessage(`Compiling vane: ${vane}`);
90− setBootProgress(0.3 + 0.05 * getVaneNumber(event.data.slice(8, 9)));
91− } else if (event.data === 'pier: boot complete') {
92− setBootMessage('Ship starting');
93− setBootProgress(0.85);
97− source.addEventListener('run', event => {
98− if (event.data === 'goad: recompiling all apps') {
99− setBootProgress(1.0);
100− setBootMessage('Ship Launched');
103− if (event.data !== '') {
104− setRunEvents(previous => [...previous, event.data]);
108− source.addEventListener(
111− if (source.readyState === EventSource.CLOSED) {
113− newSource(url, retry + 1);
122− [setError, startTime, syncStatus]
125− const getEvents = useCallback(() => {
127− if (Nothing.hasInstance(pointCursor) || disabled) {
130− const patp = ob.patp(pointCursor.value);
131− setError(undefined);
135− const url = client.getShipsByPatpUrl(patp) + '/events';
140− }, [setError, disabled, resetEvents, client, pointCursor, newSource]);
142− syncStatus = useCallback(async () => {
144− if (Nothing.hasInstance(pointCursor) || disabled) {
147− const patp = ob.patp(pointCursor.value);
148− setError(undefined);
152− const response = await client.getShipsByPatp(patp);
154− if (response.status === 404) {
155− setStatus(STATE.MISSING);
156− } else if (!response.ok) {
157− setError(response.statusText);
159− const ship = await response.json();
161− if (ship.status === 'Pending') {
162− setStatus(STATE.PENDING);
164− } else if (ship.status === 'Running') {
165− setStatus(STATE.RUNNING);
183− const hostedShipUrl = useMemo(
184− () => `http://${ob.patp(pointCursor.getOrElse('')).slice(1)}.${domain}`,
185− [pointCursor, domain]
188− const create = useCallback(
191− if (Nothing.hasInstance(pointCursor) || disabled) {
194− const patp = ob.patp(pointCursor.value).slice(1);
195− setError(undefined);
197− setStatus(STATE.PENDING);
198− setBootProgress(0.1);
200− const response = await client.postShips({
208− setError(response.statusText);
216− [pointCursor, setError, setStatus, client, getEvents, disabled]
244−export default useHostingStore;