[INIT] Initial Project Structure
Some checks failed
Deploy Edge / deploy-edge (push) Failing after 2s
S3 Repo Backup / s3-repo-backup (push) Failing after 2s

This commit is contained in:
Dunemask 2024-08-24 12:41:04 -06:00
commit 0fc5f05b6a
105 changed files with 10448 additions and 0 deletions

9
lib/types/ApiRequests.ts Normal file
View file

@ -0,0 +1,9 @@
import { Policy } from "@lib/Policies";
import { AuthorizedTokenRequest } from "@dunemask/vix/express";
import { Project, User } from "@prisma/client";
export interface UserRequest extends AuthorizedTokenRequest {
user: User;
policies: Policy[];
project: Project;
}

View file

@ -0,0 +1,5 @@
export type { CAuthContract } from "./contracts/auth.contracts";
export type { CDatabaseContract } from "./contracts/database.contracts";
export type { CUserContract } from "./contracts/user.contracts";
export type { CProjectContract } from "./contracts/project.contracts";
export type { CKeyPairContract } from "./contracts/keypair.contracts";

View file

@ -0,0 +1,40 @@
import { ContractTypeDefinitions, defineContractExport, defineContracts } from "@dunemask/vix/util";
import * as y from "yup";
import { DatabaseContractRes } from "./database.contracts";
// ======================================= Re-used Contracts -======================================
const Credentials = y.object({
user: DatabaseContractRes.User.required(),
policies: y.array(y.string()).required(),
});
// ====================================== Responses Contracts ======================================
export const AuthContractRes = defineContractExport("CAuthContractRes", {
Credentials,
LoginCredentials: y
.object({
token: y.string().required(),
})
.concat(Credentials),
});
// ======================================= Request Contracts =======================================
export const AuthContractReq = defineContractExport("CAuthContractReq", {
Login: y.object({
identity: y.string().required(),
password: y.string().required(),
}),
});
// ===================================== Combined Declarations =====================================
export const AuthContract = defineContractExport("CAuthContract", { ...AuthContractRes, ...AuthContractReq });
// ======================================= Type Declarations =======================================
export type CAuthContractRes = ContractTypeDefinitions<typeof AuthContractRes>;
export type CAuthContractReq = ContractTypeDefinitions<typeof AuthContractReq>;
export type CAuthContract = ContractTypeDefinitions<typeof AuthContract>;

View file

@ -0,0 +1,35 @@
import { ContractTypeDefinitions, defineContractExport, defineContracts } from "@dunemask/vix/util";
import * as y from "yup";
const antiRequired = y.string().test("insecure-exposure", "Insecure Exposure", (value) => !value);
// ====================================== Reused Contracts ======================================
// ====================================== Response Contracts ======================================
export const DatabaseContractRes = defineContractExport("CDatabaseContractRes", {
User: y.object({
username: y.string().required(),
email: y.string().nullable(),
hash: antiRequired,
rolePolicyId: y.string().required(),
}),
Project: y.object({
id: y.string().required(),
slug: y.string().required(),
parentProject: y.string().required(),
name: y.string().nullable(),
}),
});
// ====================================== Request Contracts ======================================
export const DatabaseContractReq = defineContractExport("CDatabaseContractReq", {});
// ====================================== Combined Declarations ======================================
export const DatabaseContract = defineContractExport("CDatabaseContract", { ...DatabaseContractRes, ...DatabaseContractReq });
// ====================================== Type Declarations ======================================
export type CDatabaseContractRes = ContractTypeDefinitions<typeof DatabaseContractRes>;
export type CDatabaseContractReq = ContractTypeDefinitions<typeof DatabaseContractReq>;
export type CDatabaseContract = ContractTypeDefinitions<typeof DatabaseContract>;

View file

@ -0,0 +1,31 @@
import { ContractTypeDefinitions, defineContractExport, defineContracts } from "@dunemask/vix/util";
import { KeyPairType } from "@prisma/client";
import * as y from "yup";
const antiRequired = y.string().test("insecure-exposure", "Insecure Exposure", (value) => !!value);
// ====================================== Reused Contracts ======================================
// ====================================== Response Contracts ======================================
export const KeyPairContractRes = defineContractExport("CKeyPairContractRes", {});
// ====================================== Request Contracts ======================================
export const KeyPairContractReq = defineContractExport("CKeyPairContractReq", {
Create: y.object({
projectId: y.string().required(),
usage: y.string().oneOf(Object.values(KeyPairType)).required(),
encryptedPublicKey: y.string().required(),
encryptedPrivateKey: y.string().required(),
name: y.string().nullable(),
}),
});
// ====================================== Combined Declarations ======================================
export const KeyPairContract = defineContractExport("CKeyPairContract", { ...KeyPairContractRes, ...KeyPairContractReq });
// ====================================== Type Declarations ======================================
export type CKeyPairContractRes = ContractTypeDefinitions<typeof KeyPairContractRes>;
export type CKeyPairContractReq = ContractTypeDefinitions<typeof KeyPairContractReq>;
export type CKeyPairContract = ContractTypeDefinitions<typeof KeyPairContract>;

View file

@ -0,0 +1,36 @@
import { ContractTypeDefinitions, defineContractExport, defineContracts } from "@dunemask/vix/util";
import * as y from "yup";
import { DatabaseContract } from "./database.contracts";
// ====================================== Reused Contracts ======================================
// ====================================== Response Contracts ======================================
export const ProjectContractRes = defineContractExport("CProjectContractRes", {
CreateResponse: y.object({
project: DatabaseContract.Project,
user: DatabaseContract.User,
publicKey: y.string().required(),
}),
});
// ====================================== Request Contracts ======================================
export const ProjectContractReq = defineContractExport("CProjectContractReq", {
ProjectParams: y.object({
project: y.string().required(),
}),
Create: y.object({
slug: y.string().required(),
name: y.string().nullable(),
}),
});
// ====================================== Combined Declarations ======================================
export const ProjectContract = defineContractExport("CProjectContract", { ...ProjectContractRes, ...ProjectContractReq });
// ====================================== Type Declarations ======================================
export type CProjectContractRes = ContractTypeDefinitions<typeof ProjectContractRes>;
export type CProjectContractReq = ContractTypeDefinitions<typeof ProjectContractReq>;
export type CProjectContract = ContractTypeDefinitions<typeof ProjectContract>;

View file

@ -0,0 +1,34 @@
import { ContractTypeDefinitions, defineContractExport, defineContracts } from "@dunemask/vix/util";
import { AuthorityType } from "@prisma/client";
import * as y from "yup";
const antiRequired = y.string().test("insecure-exposure", "Insecure Exposure", (value) => !value);
// ====================================== Reused Contracts ======================================
// ====================================== Response Contracts ======================================
export const RolePolicyContractRes = defineContractExport("CRolePolicyContractRes", {});
// ====================================== Request Contracts ======================================
export const RolePolicyContractReq = defineContractExport("CRolePolicyContractReq", {
Create: y.object({
authority: y.string().required(),
authorityType: y.string().oneOf(Object.values(AuthorityType)),
projectId: y.string().required(),
name: y.string().required(),
policies: y.array(y.string().required()).required(),
}),
});
// ====================================== Combined Declarations ======================================
export const RolePolicyContract = defineContractExport("CRolePolicyContract", {
...RolePolicyContractRes,
...RolePolicyContractReq,
});
// ====================================== Type Declarations ======================================
export type CRolePolicyContractRes = ContractTypeDefinitions<typeof RolePolicyContractRes>;
export type CRolePolicyContractReq = ContractTypeDefinitions<typeof RolePolicyContractReq>;
export type CRolePolicyContract = ContractTypeDefinitions<typeof RolePolicyContract>;

View file

@ -0,0 +1,29 @@
import { ContractTypeDefinitions, defineContractExport } from "@dunemask/vix/util";
import * as y from "yup";
// ====================================== Reused Contracts ======================================
// ====================================== Response Contracts ======================================
export const UserContractRes = defineContractExport("CUserContractRes", {});
// ====================================== Request Contracts ======================================
export const UserContractReq = defineContractExport("CUserContractReq", {
Create: y.object({
projectId: y.string().required(),
username: y.string().required(),
email: y.string(),
hash: y.string().required(),
rolePolicyId: y.string().required(),
}),
});
// ====================================== Combined Declarations ======================================
export const UserContract = defineContractExport("CUserContract", { ...UserContractRes, ...UserContractReq });
// ====================================== Type Declarations ======================================
export type CUserContractRes = ContractTypeDefinitions<typeof UserContractRes>;
export type CUserContractReq = ContractTypeDefinitions<typeof UserContractReq>;
export type CUserContract = ContractTypeDefinitions<typeof UserContract>;