mirror of
https://github.com/nestriness/nestri.git
synced 2025-12-11 00:05:36 +02:00
## Description - [x] Adds support for AWS SSO, which makes us (the team) able to use SST and update the components independently - [x] Splits the webpage into the landing page (Qwik), and Astro (the console) in charge of playing. This allows us to pass in Environment Variables to the console - ~Migrates the docs from Nuxt to Nextjs, and connects them to SST. This allows us to use Fumadocs _citation needed_ that's much more beautiful, and supports OpenApi~ - Cloudflare pages with github integration is not working on our new CF account. So we will have to push the pages deployment manually with Github actions - [x] Moves the current set up from my personal CF and AWS accounts to dedicated Nestri accounts - ## Related Issues <!-- List any related issues (e.g., "Closes #123", "Fixes #456") --> ## Type of Change - [ ] Bug fix (non-breaking change) - [x] New feature (non-breaking change) - [ ] Breaking change (fix or feature that changes existing functionality) - [x] Documentation update - [ ] Other (please describe): ## Checklist - [x] I have updated relevant documentation - [x] My code follows the project's coding style - [x] My changes generate no new warnings/errors ## Notes for Reviewers <!-- Point out areas you'd like reviewers to focus on, questions you have, or decisions that need discussion --> Please approve my PR 🥹 ## Screenshots/Demo <!-- If applicable, add screenshots or a GIF demo of your changes (especially for UI changes) --> ## Additional Context <!-- Add any other context about the pull request here -->
232 lines
7.2 KiB
TypeScript
232 lines
7.2 KiB
TypeScript
// import { z } from "zod"
|
|
// import { fn } from "../utils";
|
|
// import { Games } from "../game"
|
|
// import { Common } from "../common";
|
|
// import { Examples } from "../examples";
|
|
// import { useCurrentUser } from "../actor";
|
|
// import databaseClient from "../database"
|
|
// import { id as createID } from "@instantdb/admin";
|
|
// import { groupBy, map, pipe, values } from "remeda"
|
|
// export module Machines {
|
|
// export const Info = z
|
|
// .object({
|
|
// id: z.string().openapi({
|
|
// description: Common.IdDescription,
|
|
// example: Examples.Machine.id,
|
|
// }),
|
|
// hostname: z.string().openapi({
|
|
// description: "The Linux hostname that identifies this machine",
|
|
// example: Examples.Machine.hostname,
|
|
// }),
|
|
// fingerprint: z.string().openapi({
|
|
// description: "A unique identifier derived from the machine's Linux machine ID.",
|
|
// example: Examples.Machine.fingerprint,
|
|
// }),
|
|
// createdAt: z.string().or(z.number()).openapi({
|
|
// description: "Represents a machine running on the Nestri network, containing its identifying information and metadata.",
|
|
// example: Examples.Machine.createdAt,
|
|
// })
|
|
// })
|
|
// .openapi({
|
|
// ref: "Machine",
|
|
// description: "Represents a physical or virtual machine connected to the Nestri network..",
|
|
// example: Examples.Machine,
|
|
// });
|
|
|
|
// export type Info = z.infer<typeof Info>;
|
|
|
|
// export const create = fn(Info.pick({ fingerprint: true, hostname: true }), async (input) => {
|
|
// const id = createID()
|
|
// const now = new Date().toISOString()
|
|
// const db = databaseClient()
|
|
// await db.transact(
|
|
// db.tx.machines[id]!.update({
|
|
// fingerprint: input.fingerprint,
|
|
// hostname: input.hostname,
|
|
// createdAt: now,
|
|
// //Just in case it had been previously deleted
|
|
// deletedAt: undefined
|
|
// })
|
|
// )
|
|
|
|
// return id
|
|
// })
|
|
|
|
// // export const fromID = fn(z.string(), async (id) => {
|
|
// const db = databaseClient()
|
|
|
|
// const query = {
|
|
// machines: {
|
|
// $: {
|
|
// where: {
|
|
// id: id,
|
|
// deletedAt: { $isNull: true }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// const res = await db.query(query)
|
|
// const machines = res.machines
|
|
|
|
// if (machines && machines.length > 0) {
|
|
// const result = pipe(
|
|
// machines,
|
|
// groupBy(x => x.id),
|
|
// values(),
|
|
// map((group): Info => ({
|
|
// id: group[0].id,
|
|
// fingerprint: group[0].fingerprint,
|
|
// hostname: group[0].hostname,
|
|
// createdAt: group[0].createdAt
|
|
// }))
|
|
// )
|
|
// return result
|
|
// }
|
|
|
|
// return null
|
|
// })
|
|
|
|
// export const installedGames = fn(z.string(), async (id) => {
|
|
// const db = databaseClient()
|
|
|
|
// const query = {
|
|
// machines: {
|
|
// $: {
|
|
// where: {
|
|
// id: id,
|
|
// deletedAt: { $isNull: true }
|
|
// }
|
|
// },
|
|
// games: {}
|
|
// }
|
|
// }
|
|
|
|
// const res = await db.query(query)
|
|
// const machines = res.machines
|
|
|
|
// if (machines && machines.length > 0) {
|
|
// const games = machines[0]?.games as any
|
|
// if (games.length > 0) {
|
|
// return games as Games.Info[]
|
|
// }
|
|
// return null
|
|
// }
|
|
|
|
// return null
|
|
// })
|
|
|
|
// export const fromFingerprint = fn(z.string(), async (input) => {
|
|
// const db = databaseClient()
|
|
|
|
// const query = {
|
|
// machines: {
|
|
// $: {
|
|
// where: {
|
|
// fingerprint: input,
|
|
// deletedAt: { $isNull: true }
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// const res = await db.query(query)
|
|
|
|
// const machines = res.machines
|
|
|
|
// if (machines.length > 0) {
|
|
// const result = pipe(
|
|
// machines,
|
|
// groupBy(x => x.id),
|
|
// values(),
|
|
// map((group): Info => ({
|
|
// id: group[0].id,
|
|
// fingerprint: group[0].fingerprint,
|
|
// hostname: group[0].hostname,
|
|
// createdAt: group[0].createdAt
|
|
// }))
|
|
// )
|
|
// return result[0]
|
|
// }
|
|
|
|
// return null
|
|
// })
|
|
|
|
// export const list = async () => {
|
|
// const user = useCurrentUser()
|
|
// const db = databaseClient()
|
|
|
|
// const query = {
|
|
// $users: {
|
|
// $: { where: { id: user.id } },
|
|
// machines: {
|
|
// $: {
|
|
// where: {
|
|
// deletedAt: { $isNull: true }
|
|
// }
|
|
// }
|
|
// }
|
|
// },
|
|
// }
|
|
|
|
// const res = await db.query(query)
|
|
|
|
// const machines = res.$users[0]?.machines
|
|
// if (machines && machines.length > 0) {
|
|
// const result = pipe(
|
|
// machines,
|
|
// groupBy(x => x.id),
|
|
// values(),
|
|
// map((group): Info => ({
|
|
// id: group[0].id,
|
|
// fingerprint: group[0].fingerprint,
|
|
// hostname: group[0].hostname,
|
|
// createdAt: group[0].createdAt
|
|
// }))
|
|
// )
|
|
// return result
|
|
// }
|
|
// return null
|
|
// }
|
|
|
|
// export const linkToCurrentUser = fn(z.string(), async (id) => {
|
|
// const user = useCurrentUser()
|
|
// const db = databaseClient()
|
|
|
|
// await db.transact(db.tx.machines[id]!.link({ owner: user.id }))
|
|
|
|
// return "ok"
|
|
// })
|
|
|
|
// export const unLinkFromCurrentUser = fn(z.string(), async (id) => {
|
|
// const user = useCurrentUser()
|
|
// const db = databaseClient()
|
|
// const now = new Date().toISOString()
|
|
|
|
// const query = {
|
|
// $users: {
|
|
// $: { where: { id: user.id } },
|
|
// machines: {
|
|
// $: {
|
|
// where: {
|
|
// id,
|
|
// deletedAt: { $isNull: true }
|
|
// }
|
|
// }
|
|
// }
|
|
// },
|
|
// }
|
|
|
|
// const res = await db.query(query)
|
|
// const machines = res.$users[0]?.machines
|
|
// if (machines && machines.length > 0) {
|
|
// const machine = machines[0] as Info
|
|
// await db.transact(db.tx.machines[machine.id]!.update({ deletedAt: now }))
|
|
|
|
// return "ok"
|
|
// }
|
|
|
|
// return null
|
|
// })
|
|
|
|
// }
|