initial production release 🎉

This commit is contained in:
Andras
2021-03-24 22:11:14 +01:00
commit dbe82b3e7c
101 changed files with 12479 additions and 0 deletions

220
src/store.js Normal file
View File

@@ -0,0 +1,220 @@
import { writable, derived, readable } from 'svelte/store'
const sessionStore = {
token: window.localStorage.getItem('token') || null,
githubAppToken: null
}
function waitAtLeast (time, promise) {
const timeoutPromise = new Promise((resolve) => {
setTimeout(resolve, time)
})
return Promise.all([promise, timeoutPromise]).then((values) => values[0])
};
export const fetch = writable(
async (
url,
{ method, body, ...customConfig } = { body: null, method: null }
) => {
let headers = { 'Content-type': 'application/json; charset=UTF-8' }
if (method === 'DELETE') {
delete headers['Content-type']
}
const isGithub = url.match(/api.github.com/)
if (isGithub) {
headers = Object.assign(headers, {
Authorization: `token ${sessionStore.githubAppToken}`
})
} else {
headers = Object.assign(headers, {
Authorization: `Bearer ${sessionStore.token}`
})
}
const config = {
cache: 'no-cache',
method: method || (body ? 'POST' : 'GET'),
...customConfig,
headers: {
...headers,
...customConfig.headers
}
}
if (body) {
config.body = JSON.stringify(body)
}
const response = await waitAtLeast(350, window.fetch(url, config))
if (response.status >= 200 && response.status <= 299) {
if (response.headers.get('content-type').match(/application\/json/)) {
return await response.json()
} else if (response.headers.get('content-type').match(/text\/plain/)) {
return await response.text()
} else if (response.headers.get('content-type').match(/multipart\/form-data/)) {
return await response.formData()
} else {
return await response.blob()
}
} else {
/* eslint-disable */
if (response.status === 401) {
return Promise.reject({
code: response.status,
error: 'Unauthorized'
})
} else if (response.status >= 500) {
const error = (await response.json()).message
return Promise.reject({
code: response.status,
error: error || 'Oops, something is not okay. Are you okay?'
})
} else {
return Promise.reject({
code: response.status,
error: response.statusText
})
}
/* eslint-enable */
}
}
)
export const session = writable(sessionStore)
export const loggedIn = derived(session, ($session) => {
return $session.token
})
export const savedBranch = writable()
export const dateOptions = readable({
year: 'numeric',
month: 'short',
day: '2-digit',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false
})
export const deployments = writable({})
export const initConf = writable({})
export const application = writable({
github: {
installation: {
id: null
},
app: {
id: null
}
},
repository: {
id: null,
organization: 'new',
name: 'start',
branch: null
},
general: {
deployId: null,
nickname: null,
workdir: null
},
build: {
pack: 'static',
directory: null,
command: {
build: null,
installation: null
},
container: {
name: null,
tag: null
}
},
publish: {
directory: null,
domain: null,
path: '/',
port: null,
secrets: []
}
})
export const initialApplication = {
github: {
installation: {
id: null
},
app: {
id: null
}
},
repository: {
id: null,
organization: 'new',
name: 'start',
branch: null
},
general: {
deployId: null,
nickname: null,
workdir: null
},
build: {
pack: 'static',
directory: null,
command: {
build: null,
installation: null
},
container: {
name: null,
tag: null
}
},
publish: {
directory: null,
domain: null,
path: '/',
port: null,
secrets: []
}
}
export const initialDatabase = {
config: {
general: {
workdir: null,
deployId: null,
nickname: null,
type: null
},
database: {
username: null,
passwords: [],
defaultDatabaseName: null
},
deploy: {
name: null
}
},
envs: {}
}
export const database = writable({
config: {
general: {
workdir: null,
deployId: null,
nickname: null,
type: null
},
database: {
username: null,
passwords: [],
defaultDatabaseName: null
},
deploy: {
name: null
}
},
envs: {}
})
export const dbInprogress = writable(false)