feat(front): init

This commit is contained in:
ulitsaRaskolnikova 2026-02-09 16:06:36 +03:00
parent ba6ee5a491
commit 6cda80f234
191 changed files with 11857 additions and 1 deletions

View File

@ -19,7 +19,7 @@ dependencies {
api("io.jsonwebtoken:jjwt-impl:0.12.3")
api("io.jsonwebtoken:jjwt-jackson:0.12.3")
api("org.springframework.boot:spring-boot-starter-web")
compileOnly("org.springframework:spring-web")
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")

View File

@ -1,6 +1,19 @@
name: is-coursework
services:
frontend:
build:
context: ./domains-frontend
dockerfile: Dockerfile
container_name: frontend
ports:
- "3000:3000"
depends_on:
- api-gateway
- exdns
networks:
- domain-registrar-network
api-gateway:
build:
context: .

View File

@ -0,0 +1,4 @@
node_modules
dist
.git
*.md

View File

@ -0,0 +1,4 @@
# Lock files
package-lock.json
pnpm-lock.yaml
yarn.lock

View File

@ -0,0 +1,6 @@
{
"trailingComma": "es5",
"tabWidth": 2,
"semi": true,
"singleQuote": true
}

View File

@ -0,0 +1,18 @@
FROM node:20-alpine AS build
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@latest --activate
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 3000
CMD ["nginx", "-g", "daemon off;"]

View File

@ -0,0 +1,25 @@
server {
listen 3000;
server_name localhost;
root /usr/share/nginx/html;
index index.html;
location /api/ {
proxy_pass http://api-gateway:8080/api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /exdns/ {
proxy_pass http://exdns:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
try_files $uri $uri/ /index.html;
}
}

View File

@ -0,0 +1,48 @@
import { defineConfig } from 'orval';
export default defineConfig({
auth: {
// input: 'src/api/specs/auth-openapi.json',
input: 'http://localhost:8080/api/auth/v3/api-docs',
output: {
client: 'axios-functions',
target: 'src/api/services/auth.ts',
schemas: 'src/api/models/auth',
override: {
mutator: {
path: './src/api/apiClient.ts',
name: 'customInstance',
},
},
},
},
domainOrder: {
// input: 'src/api/specs/domain-order-openapi.json',
input: 'http://localhost:8080/api/domains/v3/api-docs',
output: {
client: 'axios-functions',
target: 'src/api/services/domain-order.ts',
schemas: 'src/api/models/domain-order',
override: {
mutator: {
path: './src/api/apiClientDomains.ts',
name: 'customInstance',
},
},
},
},
exdns: {
input: 'src/api/specs/exdns.json',
output: {
client: 'axios-functions',
target: 'src/api/services/exdns.ts',
schemas: 'src/api/models/exdns',
override: {
mutator: {
path: './src/api/apiClientExdns.ts',
name: 'customInstance',
},
},
},
},
});

View File

@ -0,0 +1,40 @@
{
"name": "domains-frontend",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"build": "rsbuild build",
"dev": "rsbuild dev --open",
"format": "prettier --write .",
"preview": "rsbuild preview",
"genapi": "orval --config orval.config.ts"
},
"dependencies": {
"@chakra-ui/react": "^3.30.0",
"@emotion/react": "^11.14.0",
"@fontsource-variable/jost": "^5.2.8",
"@fontsource/golos-text": "^5.2.8",
"@simplewebauthn/browser": "^13.2.2",
"axios": "^1.13.2",
"dayjs": "^1.11.19",
"lucide-react": "^0.562.0",
"mobx": "^6.15.0",
"mobx-react-lite": "^4.1.1",
"next-themes": "^0.4.6",
"react": "^19.2.3",
"react-dom": "^19.2.3",
"react-hook-form": "^7.70.0",
"react-icons": "^5.5.0",
"react-router": "^7.12.0"
},
"devDependencies": {
"@rsbuild/core": "^1.7.1",
"@rsbuild/plugin-react": "^1.4.2",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"orval": "^7.17.2",
"prettier": "^3.7.3",
"typescript": "^5.9.3"
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,10 @@
import { defineConfig } from '@rsbuild/core';
import { pluginReact } from '@rsbuild/plugin-react';
// Docs: https://rsbuild.rs/config/
export default defineConfig({
plugins: [pluginReact()],
html: {
title: 'Хрофорс Домены',
},
});

View File

@ -0,0 +1,8 @@
import { BrowserRouter } from 'react-router';
import router from './router';
const App = () => {
return <BrowserRouter>{router()}</BrowserRouter>;
};
export default App;

View File

@ -0,0 +1,4 @@
export const AUTH_URL = '/api/auth';
export const DOMAIN_ORDER_URL = '/api/domains';
export const EXDNS_URL = '/exdns';
export const EXDNS_TOKEN = 'changeme';

View File

@ -0,0 +1,109 @@
import Axios, { type AxiosRequestConfig } from 'axios';
import { getAccessToken, getRefreshToken, setTokens } from '~/utils/authTokens';
import { AUTH_URL } from './Constants';
const AUTH_HEADER = 'Authorization';
export const AXIOS_INSTANCE = Axios.create({
baseURL: AUTH_URL,
});
const refreshClient = Axios.create({
baseURL: AUTH_URL,
});
const isRefreshRequest = (url?: string) => url?.includes('/auth/refresh');
const applyAccessToken = (config: AxiosRequestConfig, accessToken?: string) => {
if (!accessToken) return;
if (isRefreshRequest(config.url)) return;
const headers = config.headers ?? {};
if (
typeof (headers as { set?: (k: string, v: string) => void }).set ===
'function'
) {
(headers as { set: (k: string, v: string) => void }).set(
AUTH_HEADER,
`Bearer ${accessToken}`
);
} else {
(headers as Record<string, string>)[AUTH_HEADER] = `Bearer ${accessToken}`;
}
config.headers = headers;
};
const refreshAccessToken = async () => {
const refreshToken = getRefreshToken();
if (!refreshToken) {
return null;
}
const { data } = await refreshClient.post('/auth/refresh', {
refreshToken,
});
const accessToken = data?.data?.accessToken;
const nextRefreshToken = data?.data?.refreshToken ?? refreshToken;
if (!accessToken) {
return null;
}
setTokens({ access: accessToken, refresh: nextRefreshToken });
return accessToken;
};
AXIOS_INSTANCE.interceptors.request.use((config) => {
applyAccessToken(config, getAccessToken());
return config;
});
let refreshPromise: Promise<string | null> | null = null;
AXIOS_INSTANCE.interceptors.response.use(
(response) => response,
async (error) => {
const status = error?.response?.status;
const originalConfig = error?.config as
| (AxiosRequestConfig & { _retry?: boolean })
| undefined;
if (!originalConfig || status !== 403 || originalConfig._retry) {
return Promise.reject(error);
}
if (isRefreshRequest(originalConfig.url)) {
return Promise.reject(error);
}
originalConfig._retry = true;
if (!refreshPromise) {
refreshPromise = refreshAccessToken().finally(() => {
refreshPromise = null;
});
}
const accessToken = await refreshPromise;
if (!accessToken) {
return Promise.reject(error);
}
applyAccessToken(originalConfig, accessToken);
return AXIOS_INSTANCE(originalConfig);
}
);
export const customInstance = <T>(
config: AxiosRequestConfig,
options?: AxiosRequestConfig
): Promise<T> => {
const promise = AXIOS_INSTANCE({
...config,
...options,
}).then(({ data }) => data);
return promise;
};

View File

@ -0,0 +1,109 @@
import Axios, { type AxiosRequestConfig } from 'axios';
import { getAccessToken, getRefreshToken, setTokens } from '~/utils/authTokens';
import { DOMAIN_ORDER_URL } from './Constants';
const AUTH_HEADER = 'Authorization';
export const AXIOS_INSTANCE = Axios.create({
baseURL: DOMAIN_ORDER_URL,
});
const refreshClient = Axios.create({
baseURL: DOMAIN_ORDER_URL,
});
const isRefreshRequest = (url?: string) => url?.includes('/auth/refresh');
const applyAccessToken = (config: AxiosRequestConfig, accessToken?: string) => {
if (!accessToken) return;
if (isRefreshRequest(config.url)) return;
const headers = config.headers ?? {};
if (
typeof (headers as { set?: (k: string, v: string) => void }).set ===
'function'
) {
(headers as { set: (k: string, v: string) => void }).set(
AUTH_HEADER,
`Bearer ${accessToken}`
);
} else {
(headers as Record<string, string>)[AUTH_HEADER] = `Bearer ${accessToken}`;
}
config.headers = headers;
};
const refreshAccessToken = async () => {
const refreshToken = getRefreshToken();
if (!refreshToken) {
return null;
}
const { data } = await refreshClient.post('/auth/refresh', {
refreshToken,
});
const accessToken = data?.data?.accessToken;
const nextRefreshToken = data?.data?.refreshToken ?? refreshToken;
if (!accessToken) {
return null;
}
setTokens({ access: accessToken, refresh: nextRefreshToken });
return accessToken;
};
AXIOS_INSTANCE.interceptors.request.use((config) => {
applyAccessToken(config, getAccessToken());
return config;
});
let refreshPromise: Promise<string | null> | null = null;
AXIOS_INSTANCE.interceptors.response.use(
(response) => response,
async (error) => {
const status = error?.response?.status;
const originalConfig = error?.config as
| (AxiosRequestConfig & { _retry?: boolean })
| undefined;
if (!originalConfig || status !== 403 || originalConfig._retry) {
return Promise.reject(error);
}
if (isRefreshRequest(originalConfig.url)) {
return Promise.reject(error);
}
originalConfig._retry = true;
if (!refreshPromise) {
refreshPromise = refreshAccessToken().finally(() => {
refreshPromise = null;
});
}
const accessToken = await refreshPromise;
if (!accessToken) {
return Promise.reject(error);
}
applyAccessToken(originalConfig, accessToken);
return AXIOS_INSTANCE(originalConfig);
}
);
export const customInstance = <T>(
config: AxiosRequestConfig,
options?: AxiosRequestConfig
): Promise<T> => {
const promise = AXIOS_INSTANCE({
...config,
...options,
}).then(({ data }) => data);
return promise;
};

View File

@ -0,0 +1,43 @@
import Axios, { type AxiosRequestConfig } from 'axios';
import { EXDNS_TOKEN, EXDNS_URL } from './Constants';
const AUTH_HEADER = 'authentication';
export const AXIOS_INSTANCE = Axios.create({
baseURL: EXDNS_URL,
});
const applyToken = (config: AxiosRequestConfig) => {
if (!EXDNS_TOKEN) return;
const headers = config.headers ?? {};
if (
typeof (headers as { set?: (k: string, v: string) => void }).set ===
'function'
) {
(headers as { set: (k: string, v: string) => void }).set(
AUTH_HEADER,
`Bearer ${EXDNS_TOKEN}`
);
} else {
(headers as Record<string, string>)[AUTH_HEADER] = `Bearer ${EXDNS_TOKEN}`;
}
config.headers = headers;
};
AXIOS_INSTANCE.interceptors.request.use((config) => {
applyToken(config);
return config;
});
export const customInstance = <T>(
config: AxiosRequestConfig,
options?: AxiosRequestConfig
): Promise<T> => {
const promise = AXIOS_INSTANCE({
...config,
...options,
}).then(({ data }) => data);
return promise;
};

View File

@ -0,0 +1,5 @@
export interface DomainQuery {
fqdn: string;
price: number;
free: boolean;
}

View File

@ -0,0 +1,13 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { ApiErrorDetails } from './apiErrorDetails';
export interface ApiError {
code?: string;
message?: string;
details?: ApiErrorDetails;
}

View File

@ -0,0 +1,8 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type ApiErrorDetails = { [key: string]: { [key: string]: unknown } };

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { ApiError } from './apiError';
export interface ApiResponseBoolean {
success?: boolean;
data?: boolean;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { LoginResponse } from './loginResponse';
import type { ApiError } from './apiError';
export interface ApiResponseLoginResponse {
success?: boolean;
data?: LoginResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { ApiError } from './apiError';
export interface ApiResponseString {
success?: boolean;
data?: string;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { TwoFactorSetupResponse } from './twoFactorSetupResponse';
import type { ApiError } from './apiError';
export interface ApiResponseTwoFactorSetupResponse {
success?: boolean;
data?: TwoFactorSetupResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { UserResponse } from './userResponse';
import type { ApiError } from './apiError';
export interface ApiResponseUserResponse {
success?: boolean;
data?: UserResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface Enable2FAWithSecretRequest {
secret: string;
/** @pattern ^\d{6}$ */
code: string;
}

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Auth Service API
* OpenAPI spec version: 1.0.0
*/
export type GetAuthVerifyEmailParams = {
token: string;
};

View File

@ -0,0 +1,25 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export * from './apiError';
export * from './apiErrorDetails';
export * from './apiResponseBoolean';
export * from './apiResponseLoginResponse';
export * from './apiResponseString';
export * from './apiResponseTwoFactorSetupResponse';
export * from './apiResponseUserResponse';
export * from './enable2FAWithSecretRequest';
export * from './getAuthVerifyEmailParams';
export * from './loginRequest';
export * from './loginResponse';
export * from './postAuthResendVerificationParams';
export * from './refreshTokenRequest';
export * from './registerRequest';
export * from './resendVerificationEmailParams';
export * from './twoFactorSetupResponse';
export * from './userResponse';
export * from './verifyEmailParams';

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface LoginRequest {
email: string;
password: string;
totpCode?: string;
}

View File

@ -0,0 +1,13 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface LoginResponse {
userId?: string;
accessToken?: string;
refreshToken?: string;
email?: string;
}

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Auth Service API
* OpenAPI spec version: 1.0.0
*/
export type PostAuthResendVerificationParams = {
email: string;
};

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface RefreshTokenRequest {
refreshToken: string;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface RegisterRequest {
email: string;
/**
* @minLength 8
* @maxLength 2147483647
*/
password: string;
}

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type ResendVerificationEmailParams = {
email: string;
};

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface TwoFactorSetupResponse {
secret?: string;
qrCodeUrl?: string;
manualEntryKey?: string;
}

View File

@ -0,0 +1,13 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface UserResponse {
id?: string;
email?: string;
createdAt?: string;
updatedAt?: string;
}

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type VerifyEmailParams = {
token: string;
};

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { AddCartItemRequestAction } from './addCartItemRequestAction';
import type { AddCartItemRequestTerm } from './addCartItemRequestTerm';
export interface AddCartItemRequest {
action: AddCartItemRequestAction;
term: AddCartItemRequestTerm;
fqdn: string;
price: number;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type AddCartItemRequestAction =
(typeof AddCartItemRequestAction)[keyof typeof AddCartItemRequestAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const AddCartItemRequestAction = {
register: 'register',
renew: 'renew',
} as const;

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type AddCartItemRequestTerm =
(typeof AddCartItemRequestTerm)[keyof typeof AddCartItemRequestTerm];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const AddCartItemRequestTerm = {
monthly: 'monthly',
yearly: 'yearly',
} as const;

View File

@ -0,0 +1,13 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { ApiErrorDetails } from './apiErrorDetails';
export interface ApiError {
code?: string;
message?: string;
details?: ApiErrorDetails;
}

View File

@ -0,0 +1,8 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type ApiErrorDetails = { [key: string]: { [key: string]: unknown } };

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { CartItemResponse } from './cartItemResponse';
import type { ApiError } from './apiError';
export interface ApiResponseCartItemResponse {
success?: boolean;
data?: CartItemResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { CartResponse } from './cartResponse';
import type { ApiError } from './apiError';
export interface ApiResponseCartResponse {
success?: boolean;
data?: CartResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { DnsRecordResponse } from './dnsRecordResponse';
import type { ApiError } from './apiError';
export interface ApiResponseDnsRecordResponse {
success?: boolean;
data?: DnsRecordResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
import type { DomainExpiryAlertResponse } from './domainExpiryAlertResponse';
import type { ApiError } from './apiError';
export interface ApiResponseDomainExpiryAlertResponse {
success?: boolean;
data?: DomainExpiryAlertResponse;
/** @nullable */
message?: string | null;
/** @nullable */
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { DomainResponse } from './domainResponse';
import type { ApiError } from './apiError';
export interface ApiResponseDomainResponse {
success?: boolean;
data?: DomainResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { DnsRecordResponse } from './dnsRecordResponse';
import type { ApiError } from './apiError';
export interface ApiResponseListDnsRecordResponse {
success?: boolean;
data?: DnsRecordResponse[];
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { DomainSearchResult } from './domainSearchResult';
import type { ApiError } from './apiError';
export interface ApiResponseListDomainSearchResult {
success?: boolean;
data?: DomainSearchResult[];
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
import type { MonitoringDashboardResponse } from './monitoringDashboardResponse';
import type { ApiError } from './apiError';
export interface ApiResponseMonitoringDashboardResponse {
success?: boolean;
data?: MonitoringDashboardResponse;
/** @nullable */
message?: string | null;
/** @nullable */
error?: ApiError;
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
import type { NotificationPreferencesResponse } from './notificationPreferencesResponse';
import type { ApiError } from './apiError';
export interface ApiResponseNotificationPreferencesResponse {
success?: boolean;
data?: NotificationPreferencesResponse;
/** @nullable */
message?: string | null;
/** @nullable */
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { NsDelegationResponse } from './nsDelegationResponse';
import type { ApiError } from './apiError';
export interface ApiResponseNsDelegationResponse {
success?: boolean;
data?: NsDelegationResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { OrderResponse } from './orderResponse';
import type { ApiError } from './apiError';
export interface ApiResponseOrderResponse {
success?: boolean;
data?: OrderResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
import type { PageDomainExpiryMonitoringResponse } from './pageDomainExpiryMonitoringResponse';
import type { ApiError } from './apiError';
export interface ApiResponsePageDomainExpiryMonitoringResponse {
success?: boolean;
data?: PageDomainExpiryMonitoringResponse;
/** @nullable */
message?: string | null;
/** @nullable */
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { PageDomainResponse } from './pageDomainResponse';
import type { ApiError } from './apiError';
export interface ApiResponsePageDomainResponse {
success?: boolean;
data?: PageDomainResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { PageOrderResponse } from './pageOrderResponse';
import type { ApiError } from './apiError';
export interface ApiResponsePageOrderResponse {
success?: boolean;
data?: PageOrderResponse;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { PageZone } from './pageZone';
import type { ApiError } from './apiError';
export interface ApiResponsePageZone {
success?: boolean;
data?: PageZone;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { ApiError } from './apiError';
export interface ApiResponseString {
success?: boolean;
data?: string;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { ApiResponseVoidData } from './apiResponseVoidData';
import type { ApiError } from './apiError';
export interface ApiResponseVoid {
success?: boolean;
data?: ApiResponseVoidData;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,8 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type ApiResponseVoidData = { [key: string]: unknown };

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { Zone } from './zone';
import type { ApiError } from './apiError';
export interface ApiResponseZone {
success?: boolean;
data?: Zone;
message?: string;
error?: ApiError;
}

View File

@ -0,0 +1,18 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { CartItemResponseAction } from './cartItemResponseAction';
import type { CartItemResponseTerm } from './cartItemResponseTerm';
export interface CartItemResponse {
id?: string;
action?: CartItemResponseAction;
term?: CartItemResponseTerm;
fqdn?: string;
price?: number;
createdAt?: string;
updatedAt?: string;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type CartItemResponseAction =
(typeof CartItemResponseAction)[keyof typeof CartItemResponseAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const CartItemResponseAction = {
register: 'register',
renew: 'renew',
} as const;

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type CartItemResponseTerm =
(typeof CartItemResponseTerm)[keyof typeof CartItemResponseTerm];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const CartItemResponseTerm = {
monthly: 'monthly',
yearly: 'yearly',
} as const;

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { CartItemResponse } from './cartItemResponse';
export interface CartResponse {
id?: string;
userId?: string;
items?: CartItemResponse[];
createdAt?: string;
updatedAt?: string;
}

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateARecordRequest {
domainId: string;
name: string;
/** @pattern ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ */
ipv4Address: string;
ttl: number;
}

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateAaaaRecordRequest {
domainId: string;
name: string;
/** @pattern ^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::1$|^::$ */
ipv6Address: string;
ttl: number;
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateCaaRecordRequest {
domainId: string;
name: string;
/** @pattern ^[0-9]$ */
flags: string;
/** @pattern ^(issue|issuewild|iodef)$ */
tag: string;
value: string;
ttl: number;
}

View File

@ -0,0 +1,13 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateCnameRecordRequest {
domainId: string;
name: string;
canonicalName: string;
ttl: number;
}

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateDomainRequest {
fqdn: string;
zoneId: string;
expiresAt: string;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateMxRecordRequest {
domainId: string;
name: string;
mailExchange: string;
/** @minimum 0 */
priority: number;
ttl: number;
}

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateOrderRequest {
cartItemIds: string[];
}

View File

@ -0,0 +1,25 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateSrvRecordRequest {
domainId: string;
serviceName: string;
target: string;
/** @minimum 0 */
priority: number;
/**
* @minimum 0
* @maximum 65535
*/
weight: number;
/**
* @minimum 1
* @maximum 65535
*/
port: number;
ttl: number;
}

View File

@ -0,0 +1,13 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateTxtRecordRequest {
domainId: string;
name: string;
textValue: string;
ttl: number;
}

View File

@ -0,0 +1,11 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface CreateZoneRequest {
name: string;
price: number;
}

View File

@ -0,0 +1,20 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface DnsRecordResponse {
id?: string;
domainId?: string;
recordType?: string;
name?: string;
value?: string;
ttl?: number;
priority?: number;
weight?: number;
port?: number;
flags?: string;
tag?: string;
}

View File

@ -0,0 +1,11 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
import type { ExpiryAlertPreference } from './expiryAlertPreference';
export interface DomainExpiryAlertResponse {
alerts?: ExpiryAlertPreference[];
}

View File

@ -0,0 +1,18 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
export interface DomainExpiryMonitoringResponse {
domainId?: string;
fqdn?: string;
expiresAt?: string;
/** @nullable */
activatedAt?: string | null;
daysUntilExpiry?: number;
alertSent?: boolean;
/** @nullable */
lastAlertSentAt?: string | null;
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface DomainResponse {
id?: string;
fqdn?: string;
zoneId?: string;
zoneName?: string;
activatedAt?: string;
expiresAt?: string;
createdAt?: string;
updatedAt?: string;
}

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface DomainSearchResult {
fqdn?: string;
free?: boolean;
price?: number;
}

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
export interface ExpiryAlertPreference {
id?: string;
daysBefore?: number;
enabled?: boolean;
}

View File

@ -0,0 +1,11 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { Pageable } from './pageable';
export type GetAllDomainsParams = {
pageable: Pageable;
};

View File

@ -0,0 +1,11 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { Pageable } from './pageable';
export type GetAllZonesParams = {
pageable: Pageable;
};

View File

@ -0,0 +1,18 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Domain Order Service API
* OpenAPI spec version: 1.0.0
*/
export type GetDomainsParams = {
/**
* @minimum 0
*/
page?: number;
/**
* @minimum 1
*/
size?: number;
sort?: string[];
};

View File

@ -0,0 +1,10 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Domain Order Service API
* OpenAPI spec version: 1.0.0
*/
export type GetDomainsSearchParams = {
query: string;
};

View File

@ -0,0 +1,18 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
export type GetNotificationsExpiryMonitoringDomainsParams = {
/**
* @minimum 0
*/
page?: number;
/**
* @minimum 1
*/
size?: number;
sort?: string[];
};

View File

@ -0,0 +1,11 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { Pageable } from './pageable';
export type GetOrdersParams = {
pageable: Pageable;
};

View File

@ -0,0 +1,18 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Domain Order Service API
* OpenAPI spec version: 1.0.0
*/
export type GetZonesParams = {
/**
* @minimum 0
*/
page?: number;
/**
* @minimum 1
*/
size?: number;
sort?: string[];
};

View File

@ -0,0 +1,91 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export * from './addCartItemRequest';
export * from './addCartItemRequestAction';
export * from './addCartItemRequestTerm';
export * from './apiError';
export * from './apiErrorDetails';
export * from './apiResponseCartItemResponse';
export * from './apiResponseCartResponse';
export * from './apiResponseDnsRecordResponse';
export * from './apiResponseDomainExpiryAlertResponse';
export * from './apiResponseDomainResponse';
export * from './apiResponseListDnsRecordResponse';
export * from './apiResponseListDomainSearchResult';
export * from './apiResponseMonitoringDashboardResponse';
export * from './apiResponseNotificationPreferencesResponse';
export * from './apiResponseNsDelegationResponse';
export * from './apiResponseOrderResponse';
export * from './apiResponsePageDomainExpiryMonitoringResponse';
export * from './apiResponsePageDomainResponse';
export * from './apiResponsePageOrderResponse';
export * from './apiResponsePageZone';
export * from './apiResponseString';
export * from './apiResponseVoid';
export * from './apiResponseVoidData';
export * from './apiResponseZone';
export * from './cartItemResponse';
export * from './cartItemResponseAction';
export * from './cartItemResponseTerm';
export * from './cartResponse';
export * from './createARecordRequest';
export * from './createAaaaRecordRequest';
export * from './createCaaRecordRequest';
export * from './createCnameRecordRequest';
export * from './createDomainRequest';
export * from './createMxRecordRequest';
export * from './createOrderRequest';
export * from './createSrvRecordRequest';
export * from './createTxtRecordRequest';
export * from './createZoneRequest';
export * from './dnsRecordResponse';
export * from './domainExpiryAlertResponse';
export * from './domainExpiryMonitoringResponse';
export * from './domainResponse';
export * from './domainSearchResult';
export * from './expiryAlertPreference';
export * from './getAllDomainsParams';
export * from './getAllZonesParams';
export * from './getDomainsParams';
export * from './getDomainsSearchParams';
export * from './getNotificationsExpiryMonitoringDomainsParams';
export * from './getOrdersParams';
export * from './getZonesParams';
export * from './itemAction';
export * from './itemTerm';
export * from './monitoringDashboardResponse';
export * from './notificationPreferencesResponse';
export * from './notificationType';
export * from './nsDelegationRequest';
export * from './nsDelegationResponse';
export * from './orderItemResponse';
export * from './orderItemResponseAction';
export * from './orderItemResponseTerm';
export * from './orderResponse';
export * from './orderResponseStatus';
export * from './orderStatus';
export * from './pageDomainExpiryMonitoringResponse';
export * from './pageDomainResponse';
export * from './pageOrderResponse';
export * from './pageZone';
export * from './pageable';
export * from './pageableObject';
export * from './putOrdersIdStatusParams';
export * from './searchDomainsParams';
export * from './sendNotificationRequest';
export * from './sendNotificationRequestParameters';
export * from './sortObject';
export * from './updateDnsRecordRequest';
export * from './updateDomainRequest';
export * from './updateExpiryAlertsRequest';
export * from './updateNotificationPreferencesRequest';
export * from './updateOrderStatusParams';
export * from './updateOrderStatusStatus';
export * from './updateZoneRequest';
export * from './userIdHeaderParameter';
export * from './zone';

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Domain Order Service API
* OpenAPI spec version: 1.0.0
*/
export type ItemAction = (typeof ItemAction)[keyof typeof ItemAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ItemAction = {
register: 'register',
renew: 'renew',
} as const;

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Domain Order Service API
* OpenAPI spec version: 1.0.0
*/
export type ItemTerm = (typeof ItemTerm)[keyof typeof ItemTerm];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ItemTerm = {
monthly: 'monthly',
yearly: 'yearly',
} as const;

View File

@ -0,0 +1,16 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
export interface MonitoringDashboardResponse {
domainsExpiringIn30Days?: number;
domainsExpiringIn14Days?: number;
domainsExpiringIn7Days?: number;
domainsExpiringIn3Days?: number;
domainsExpiringIn1Day?: number;
expiredDomains?: number;
totalActiveDomains?: number;
}

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
import type { ExpiryAlertPreference } from './expiryAlertPreference';
export interface NotificationPreferencesResponse {
expiryAlerts?: ExpiryAlertPreference[];
orderNotificationsEnabled?: boolean;
paymentNotificationsEnabled?: boolean;
domainActivationNotificationsEnabled?: boolean;
}

View File

@ -0,0 +1,18 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* Notification Service API
* OpenAPI spec version: 1.0.0
*/
export type NotificationType =
(typeof NotificationType)[keyof typeof NotificationType];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const NotificationType = {
ORDER_CREATED: 'ORDER_CREATED',
PAYMENT_APPROVED: 'PAYMENT_APPROVED',
DOMAIN_ACTIVATED: 'DOMAIN_ACTIVATED',
DOMAIN_EXPIRING_SOON: 'DOMAIN_EXPIRING_SOON',
DOMAIN_EXPIRED: 'DOMAIN_EXPIRED',
} as const;

View File

@ -0,0 +1,14 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface NsDelegationRequest {
/**
* @minItems 1
* @maxItems 10
*/
nsServers: string[];
}

View File

@ -0,0 +1,12 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export interface NsDelegationResponse {
domainId?: string;
isDelegated?: boolean;
nsServers?: string[];
}

View File

@ -0,0 +1,17 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { OrderItemResponseAction } from './orderItemResponseAction';
import type { OrderItemResponseTerm } from './orderItemResponseTerm';
export interface OrderItemResponse {
id?: string;
action?: OrderItemResponseAction;
term?: OrderItemResponseTerm;
domainId?: string;
createdAt?: string;
updatedAt?: string;
}

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type OrderItemResponseAction =
(typeof OrderItemResponseAction)[keyof typeof OrderItemResponseAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const OrderItemResponseAction = {
register: 'register',
renew: 'renew',
} as const;

View File

@ -0,0 +1,15 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
export type OrderItemResponseTerm =
(typeof OrderItemResponseTerm)[keyof typeof OrderItemResponseTerm];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const OrderItemResponseTerm = {
monthly: 'monthly',
yearly: 'yearly',
} as const;

View File

@ -0,0 +1,19 @@
/**
* Generated by orval v7.17.2 🍺
* Do not edit manually.
* OpenAPI definition
* OpenAPI spec version: v0
*/
import type { OrderResponseStatus } from './orderResponseStatus';
import type { OrderItemResponse } from './orderItemResponse';
export interface OrderResponse {
id?: string;
userId?: string;
status?: OrderResponseStatus;
totalAmount?: number;
items?: OrderItemResponse[];
createdAt?: string;
paidAt?: string;
updatedAt?: string;
}

Some files were not shown because too many files have changed in this diff Show More