[INIT] Initial Project Structure
This commit is contained in:
commit
0fc5f05b6a
105 changed files with 10448 additions and 0 deletions
9
lib/types/ApiRequests.ts
Normal file
9
lib/types/ApiRequests.ts
Normal 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;
|
||||
}
|
5
lib/types/ContractTypes.ts
Normal file
5
lib/types/ContractTypes.ts
Normal 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";
|
40
lib/types/contracts/auth.contracts.ts
Normal file
40
lib/types/contracts/auth.contracts.ts
Normal 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>;
|
35
lib/types/contracts/database.contracts.ts
Normal file
35
lib/types/contracts/database.contracts.ts
Normal 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>;
|
31
lib/types/contracts/keypair.contracts.ts
Normal file
31
lib/types/contracts/keypair.contracts.ts
Normal 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>;
|
36
lib/types/contracts/project.contracts.ts
Normal file
36
lib/types/contracts/project.contracts.ts
Normal 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>;
|
34
lib/types/contracts/role-policy.contracts.ts
Normal file
34
lib/types/contracts/role-policy.contracts.ts
Normal 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>;
|
29
lib/types/contracts/user.contracts.ts
Normal file
29
lib/types/contracts/user.contracts.ts
Normal 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>;
|
Loading…
Add table
Add a link
Reference in a new issue