build config changes
All checks were successful
Galvanic Corrosion Cross-Compile / build (push) Successful in 1m50s

* Commit hash shipped with builds
* Post & pre-build events
* Objective fixes
* Orientation challenge filler
* Custom Rooms base
    - Currently cannot save rooms (CDN not set up)
* Moved root path to path.ts
* Room cloning
* Rewrote instances - the whole thing
* Relationships are still untested
* Charades Words
* AG Room fetch
* Private room matchmaking
* Socket fixes
This commit is contained in:
2025-05-12 09:07:59 -04:00
parent 6a249ef813
commit 83440a9245
96 changed files with 1201 additions and 436 deletions

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -0,0 +1,34 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
import { APIUtils } from "../../apiutils.ts";
import { getWords } from "../../data/content/activities.ts";
export const route = APIUtils.createRouter("/activities");
const rateLimit = new APIUtils.RateLimiter();
const words = getWords();
route.router.get('/charades/v1/words',
rateLimit.middle(),
(_rq, rs) => {
rs.json(words);
},
);

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
@@ -16,6 +16,7 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
import { APIUtils } from "../../apiutils.ts";
import { ObjectiveType } from "../../data/objectives.ts";
import { AuthType } from "../../data/users.ts";
export const route = APIUtils.createRouter('/checklist');
@@ -25,6 +26,171 @@ route.router.get('/v1/current',
APIUtils.Authentication,
APIUtils.AuthenticationType(AuthType.Game),
APIUtils.emptyArrayResponse
(_rq, rs) => {
rs.json([
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
},
{
Order: 1,
Objective: ObjectiveType.CompleteAnyDaily,
Count: 1,
CreditAmount: -1
}
]);
},
);

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
@@ -36,6 +36,17 @@ route.router.get('/v1/myprogress',
);
route.router.post('/v1/updateobjective',
APIUtils.Authentication,
APIUtils.AuthenticationType(AuthType.Game),
(_rq, rs) => {
rs.sendStatus(200);
},
)
interface ClearGroupRequestBody {
Group: number
}

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
@@ -57,7 +57,7 @@ route.router.post('/v1/bulk',
express.urlencoded({ extended: true }),
APIUtils.validateRequestBody(reputationBulkSchema),
async (rq: express.Request<NoBody, {}, ReputationBulkBody>, rs: express.Response) => {
async (rq: express.Request<NoBody, NoBody, ReputationBulkBody>, rs: express.Response) => {
if (typeof rq.body.Ids == 'object') {
const reputations = rq.body.Ids
.map(id => parseInt(id)).filter(id => !isNaN(id)) // parse as int[] and filter out non-numbers

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
@@ -68,7 +68,7 @@ route.router.post('/v1/progression/bulk',
express.urlencoded({ extended: true }),
APIUtils.validateRequestBody(progressionBulkSchema),
async (rq: express.Request<NoBody, {}, ProgressionBulkBody>, rs: express.Response) => {
async (rq: express.Request<NoBody, NoBody, ProgressionBulkBody>, rs: express.Response) => {
if (typeof rq.body.Ids == 'object') {
const progressions = rq.body.Ids
.map(id => parseInt(id)).filter(id => !isNaN(id)) // filter out non-numbers

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
@@ -15,11 +15,13 @@ GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
import { APIUtils } from "../../apiutils.ts";
import { z } from "zod";
import { APIUtils, NoBody } from "../../apiutils.ts";
import Rooms from "../../data/content/rooms.ts";
import { RoomDataTypes } from "../../data/content/rooms/DataTypes.ts";
import { AuthType } from "../../data/users.ts";
import express from "express";
import { RoomFactory } from "../../data/content/rooms/RoomFactory.ts";
export const route = APIUtils.createRouter("/rooms");
@@ -54,7 +56,19 @@ route.router.get('/v2/myrooms',
APIUtils.Authentication,
APIUtils.AuthenticationType(AuthType.Game),
APIUtils.emptyArrayResponse
async (_rq, rs) => {
const ids = await rs.locals.profile.Rooms.getOwnedRoomIds();
if (ids.length == 0) {
rs.json([]);
return;
}
const roomFactoriesPreInit = ids.map(id => new RoomFactory({ id: id }));
const roomFactories = (await Promise.all(roomFactoriesPreInit.map(factory => factory.init()))).filter(val => val !== null);
const detailsPromises = (await Promise.all(roomFactories.map(factory => factory.export())));
rs.json(detailsPromises.map(roomDetails => roomDetails.Room));
},
);
@@ -119,8 +133,58 @@ route.router.post('/v1/roomRolePermissions',
APIUtils.Authentication,
APIUtils.AuthenticationType(AuthType.Game),
(rq, rs) => {
(_rq, rs) => {
rs.sendStatus(200);
},
);
route.router.get('/v1/agRoomIds',
APIUtils.Authentication,
APIUtils.AuthenticationType(AuthType.Game),
async (_rq, rs) => {
const rooms = await Rooms.getAllBuiltinRoomGenerations();
rs.json(rooms.map(det => det.Room.RoomId));
},
);
const CloneRoomSchema = z.object({
Name: z.string(),
RoomId: z.number()
});
interface CloneRoomBody {
Name: string,
RoomId: number
}
route.router.post('/v1/clone',
APIUtils.Authentication,
APIUtils.AuthenticationType(AuthType.Game),
express.json(),
APIUtils.validateRequestBody(CloneRoomSchema),
async (rq: express.Request<NoBody, NoBody, CloneRoomBody>, rs: express.Response) => {
const room = await Rooms.cloneRoom(rq.body.RoomId, rq.body.Name, rs.locals.profile);
const masterRoomFactory = await new RoomFactory({ id: rq.body.RoomId }).init();
rs.json({
Result: room.result,
RoomDetails: room.result == RoomDataTypes.CreateModifyRoomStatus.Success ? await room.factory?.export() : await masterRoomFactory?.export()
});
if (
room.result == RoomDataTypes.CreateModifyRoomStatus.Success
&& room.factory
) rs.locals.profile.Rooms.addOwnedRoomId(room.factory.RoomId);
},
);

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
@@ -18,7 +18,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */
import { APIUtils } from "../../apiutils.ts";
import express from "express";
import { AuthType } from "../../data/users.ts";
import { CurrencyType, StorefrontBalanceType } from "../../data/content/storefronts.ts";
import { StorefrontBalanceType } from "../../data/content/storefronts.ts";
export const route = APIUtils.createRouter('/storefronts');

View File

@@ -1,6 +1,6 @@
/* Galvanic Corrosion - Rec Room custom server for communities.
<https://gitea.proxnet.dev/zombieb/galvanic-corrosion>
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
Copyright (C) 2025 @zombieb (Discord / proxnet Gitea)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published