diff --git a/apps/landing/src/lib/fetcher.ts b/apps/landing/src/lib/fetcher.ts new file mode 100644 index 0000000..f01c78f --- /dev/null +++ b/apps/landing/src/lib/fetcher.ts @@ -0,0 +1,6 @@ +import type { paths } from '@/openapi-types'; +import createClient from 'openapi-fetch'; + +export const fetcher = createClient({ + baseUrl: process.env.NEXT_PUBLIC_API_URL ?? 'https://api.imphnen.dev', +}); diff --git a/apps/landing/src/lib/rpc.ts b/apps/landing/src/lib/rpc.ts new file mode 100644 index 0000000..b045826 --- /dev/null +++ b/apps/landing/src/lib/rpc.ts @@ -0,0 +1,8 @@ +import type { paths } from '@/openapi-types'; +import createFetchClient from 'openapi-fetch'; +import createClient from 'openapi-react-query'; + +const fetchClient = createFetchClient({ + baseUrl: process.env.NEXT_PUBLIC_API_URL ?? 'https://api.imphnen.dev', +}); +export const rpc = createClient(fetchClient); diff --git a/apps/landing/src/openapi-types.ts b/apps/landing/src/openapi-types.ts new file mode 100644 index 0000000..8b0ed89 --- /dev/null +++ b/apps/landing/src/openapi-types.ts @@ -0,0 +1,2109 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/v1/auth/forgot": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_forgot_password"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_login"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/new-password": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_new_password"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_refresh_token"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/register": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_register"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/send-otp": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_resend_otp"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/auth/verify-email": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_verify_email"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/cms/landing/events": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_event_list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/cms/landing/events/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_event"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/cms/landing/events/delete/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["delete_event"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/cms/landing/events/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_event_by_id"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/cms/landing/events/update/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch: operations["patch_update_event"]; + trace?: never; + }; + "/v1/gacha/claims/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_gacha_claim"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/claims/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_detail_gacha_claim"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/items": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_gacha_item_list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/items/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_gacha_item"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/items/delete/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["delete_gacha_item"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/items/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_gacha_item_by_id"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/items/update/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["put_update_gacha_item"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/rolls/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_gacha_roll"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/rolls/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_detail_gacha_roll"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/gacha/rolls/execute": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_execute_gacha_roll"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/permissions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_permission_list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/permissions/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_permission"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/permissions/delete/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["delete_permission"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/permissions/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_permission_by_id"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/permissions/update/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["put_update_permission"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/roles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_role_list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/roles/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_role"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/roles/delete/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["delete_role"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/roles/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_role_by_id"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/roles/update/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["put_update_role"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_user_list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/activate/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["patch_user_active_status"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post: operations["post_create_user"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/delete/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete: operations["delete_user"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/detail/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_user_by_id"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get: operations["get_user_me"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/update/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["put_update_user_me"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/update/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put: operations["put_update_user"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + AuthLoginRequestDto: { + email: string; + password: string; + }; + AuthLoginResponsetDto: { + token: components["schemas"]["TokenDto"]; + user: components["schemas"]["UsersDetailItemDto"]; + }; + AuthNewPasswordRequestDto: { + password: string; + token: string; + }; + AuthRefreshTokenRequestDto: { + refresh_token: string; + }; + AuthRegisterRequestDto: { + email: string; + fullname: string; + password: string; + phone_number: string; + }; + AuthResendOtpRequestDto: { + email: string; + }; + AuthVerifyEmailRequestDto: { + email: string; + /** Format: int32 */ + otp: number; + }; + EventsCreateRequestDto: { + description: string; + detail_link: string; + /** @example 2025-09-20T13:00:00Z */ + end_date: string; + is_online: boolean; + location?: string | null; + name: string; + /** Format: double */ + price: number; + /** @example 2025-09-20T13:00:00Z */ + start_date: string; + }; + EventsDetailItemDto: { + created_at: string; + description: string; + detail_link: string; + end_date: string; + id: string; + is_online: boolean; + location?: string | null; + name: string; + /** Format: double */ + price: number; + start_date: string; + updated_at: string; + }; + EventsListItemDto: { + created_at: string; + description: string; + detail_link: string; + end_date: string; + id: string; + is_deleted: boolean; + is_online: boolean; + location?: string | null; + name: string; + /** Format: double */ + price: number; + start_date: string; + }; + EventsUpdateRequestDto: { + description: string; + detail_link: string; + /** @example 2025-09-20T13:00:00Z */ + end_date: string; + is_online: boolean; + location?: string | null; + name: string; + /** Format: double */ + price: number; + /** @example 2025-09-20T13:00:00Z */ + start_date: string; + }; + GachaClaimItemDto: { + created_at?: string | null; + id: string; + is_deleted: boolean; + item: components["schemas"]["GachaItemDto"]; + updated_at?: string | null; + user: components["schemas"]["UsersDetailItemDto"]; + }; + GachaClaimRequestDto: { + item_id: string; + user_id: string; + }; + GachaItemDto: { + created_at?: string | null; + id: string; + is_deleted: boolean; + name: string; + updated_at?: string | null; + }; + GachaItemRequestDto: { + image_url: string; + name: string; + }; + GachaRollItemDto: { + created_at?: string | null; + id: string; + is_deleted: boolean; + item: components["schemas"]["GachaItemDto"]; + /** Format: int32 */ + quantity: number; + updated_at?: string | null; + /** Format: float */ + weight: number; + }; + GachaRollRequestDto: { + item_id: string; + /** Format: int32 */ + quantity: number; + /** Format: float */ + weight: number; + }; + MessageResponseDto: { + message: string; + version: string; + }; + MetaRequestDto: { + filter?: string | null; + filter_by?: string | null; + order?: string | null; + /** Format: int64 */ + page?: number | null; + /** Format: int64 */ + per_page?: number | null; + search?: string | null; + sort_by?: string | null; + }; + MetaResponseDto: { + /** Format: int64 */ + page?: number | null; + /** Format: int64 */ + per_page?: number | null; + /** Format: int64 */ + total?: number | null; + }; + PermissionsItemDto: { + created_at?: string | null; + id: string; + name: string; + updated_at?: string | null; + }; + PermissionsRequestDto: { + name: string; + }; + ResponseListSuccessDto_Vec_EventsListItemDto: { + data: { + created_at: string; + description: string; + detail_link: string; + end_date: string; + id: string; + is_deleted: boolean; + is_online: boolean; + location?: string | null; + name: string; + /** Format: double */ + price: number; + start_date: string; + }[]; + meta?: null | components["schemas"]["MetaResponseDto"]; + }; + ResponseListSuccessDto_Vec_GachaItemDto: { + data: { + created_at?: string | null; + id: string; + is_deleted: boolean; + name: string; + updated_at?: string | null; + }[]; + meta?: null | components["schemas"]["MetaResponseDto"]; + }; + ResponseListSuccessDto_Vec_PermissionsItemDto: { + data: { + created_at?: string | null; + id: string; + name: string; + updated_at?: string | null; + }[]; + meta?: null | components["schemas"]["MetaResponseDto"]; + }; + ResponseListSuccessDto_Vec_RolesListItemDto: { + data: { + created_at?: string | null; + id: string; + name: string; + permissions_count: number; + updated_at?: string | null; + }[]; + meta?: null | components["schemas"]["MetaResponseDto"]; + }; + ResponseListSuccessDto_Vec_UsersListItemDto: { + data: { + avatar?: string | null; + created_at: string; + email: string; + fullname: string; + id: string; + is_active: boolean; + phone_number: string; + role: string; + updated_at: string; + }[]; + meta?: null | components["schemas"]["MetaResponseDto"]; + }; + ResponseSuccessDto_AuthLoginResponsetDto: { + data: { + token: components["schemas"]["TokenDto"]; + user: components["schemas"]["UsersDetailItemDto"]; + }; + }; + ResponseSuccessDto_EventsDetailItemDto: { + data: { + created_at: string; + description: string; + detail_link: string; + end_date: string; + id: string; + is_online: boolean; + location?: string | null; + name: string; + /** Format: double */ + price: number; + start_date: string; + updated_at: string; + }; + }; + ResponseSuccessDto_GachaClaimItemDto: { + data: { + created_at?: string | null; + id: string; + is_deleted: boolean; + item: components["schemas"]["GachaItemDto"]; + updated_at?: string | null; + user: components["schemas"]["UsersDetailItemDto"]; + }; + }; + ResponseSuccessDto_GachaItemDto: { + data: { + created_at?: string | null; + id: string; + is_deleted: boolean; + name: string; + updated_at?: string | null; + }; + }; + ResponseSuccessDto_GachaRollItemDto: { + data: { + created_at?: string | null; + id: string; + is_deleted: boolean; + item: components["schemas"]["GachaItemDto"]; + /** Format: int32 */ + quantity: number; + updated_at?: string | null; + /** Format: float */ + weight: number; + }; + }; + ResponseSuccessDto_PermissionsItemDto: { + data: { + created_at?: string | null; + id: string; + name: string; + updated_at?: string | null; + }; + }; + ResponseSuccessDto_RolesDetailItemDto: { + data: { + created_at?: string | null; + id: string; + is_deleted: boolean; + name: string; + permissions: components["schemas"]["PermissionsItemDto"][]; + updated_at?: string | null; + }; + }; + ResponseSuccessDto_TokenDto: { + data: { + access_token: string; + refresh_token: string; + }; + }; + ResponseSuccessDto_UsersDetailItemDto: { + data: { + avatar?: string | null; + birthdate?: string | null; + created_at: string; + email: string; + fullname: string; + gender?: string | null; + id: string; + is_active: boolean; + phone_number: string; + role: components["schemas"]["RolesDetailItemDto"]; + updated_at: string; + }; + }; + RolesDetailItemDto: { + created_at?: string | null; + id: string; + is_deleted: boolean; + name: string; + permissions: components["schemas"]["PermissionsItemDto"][]; + updated_at?: string | null; + }; + RolesListItemDto: { + created_at?: string | null; + id: string; + name: string; + permissions_count: number; + updated_at?: string | null; + }; + RolesRequestCreateDto: { + name: string; + permissions: string[]; + }; + RolesRequestUpdateDto: { + name?: string | null; + overwrite?: boolean | null; + permissions?: string[] | null; + }; + TokenDto: { + access_token: string; + refresh_token: string; + }; + UsersActiveInactiveRequestDto: { + is_active: boolean; + }; + UsersCreateRequestDto: { + email: string; + fullname: string; + is_active: boolean; + password: string; + phone_number: string; + role_id: string; + }; + UsersDetailItemDto: { + avatar?: string | null; + birthdate?: string | null; + created_at: string; + email: string; + fullname: string; + gender?: string | null; + id: string; + is_active: boolean; + phone_number: string; + role: components["schemas"]["RolesDetailItemDto"]; + updated_at: string; + }; + UsersListItemDto: { + avatar?: string | null; + created_at: string; + email: string; + fullname: string; + id: string; + is_active: boolean; + phone_number: string; + role: string; + updated_at: string; + }; + UsersUpdateRequestDto: { + avatar?: string | null; + birthdate?: string | null; + email: string; + fullname: string; + gender?: string | null; + is_active: boolean; + phone_number: string; + role_id: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + post_forgot_password: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthResendOtpRequestDto"]; + }; + }; + responses: { + /** @description Forgot password request successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + /** @description Forgot password request failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_login: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthLoginRequestDto"]; + }; + }; + responses: { + /** @description Login successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_AuthLoginResponsetDto"]; + }; + }; + /** @description Login failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_new_password: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthNewPasswordRequestDto"]; + }; + }; + responses: { + /** @description New password request successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + /** @description New password request failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_refresh_token: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthRefreshTokenRequestDto"]; + }; + }; + responses: { + /** @description Refresh token request successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + /** @description Refresh token request failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_register: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthRegisterRequestDto"]; + }; + }; + responses: { + /** @description Register successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + /** @description Register failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_resend_otp: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthResendOtpRequestDto"]; + }; + }; + responses: { + /** @description Resend otp successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + /** @description Resend otp failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_verify_email: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["AuthVerifyEmailRequestDto"]; + }; + }; + responses: { + /** @description Verify email successful */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + /** @description Verify email failed */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_event_list: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Items per page */ + per_page?: number; + /** @description Search keyword */ + search?: string; + /** @description Sort by field */ + sort_by?: string; + /** @description Order ASC or DESC */ + order?: string; + /** @description Filter value */ + filter?: string; + /** @description Field to filter by */ + filter_by?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get event list */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseListSuccessDto_Vec_EventsListItemDto"]; + }; + }; + }; + }; + post_create_event: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["EventsCreateRequestDto"]; + }; + }; + responses: { + /** @description Create new event */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + delete_event: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Event ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Soft delete event */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_event_by_id: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Event ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get event by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_EventsDetailItemDto"]; + }; + }; + }; + }; + patch_update_event: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Event ID */ + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["EventsUpdateRequestDto"]; + }; + }; + responses: { + /** @description Update event */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_create_gacha_claim: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["GachaClaimRequestDto"]; + }; + }; + responses: { + /** @description Create new gacha claim */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_detail_gacha_claim: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Gacha Claim ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get Gacha Claim by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_GachaClaimItemDto"]; + }; + }; + }; + }; + get_gacha_item_list: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Items per page */ + per_page?: number; + /** @description Search keyword */ + search?: string; + /** @description Sort by field */ + sort_by?: string; + /** @description Order ASC or DESC */ + order?: string; + /** @description Filter value */ + filter?: string; + /** @description Field to filter by */ + filter_by?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get gacha item list */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseListSuccessDto_Vec_GachaItemDto"]; + }; + }; + }; + }; + post_create_gacha_item: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["GachaItemRequestDto"]; + }; + }; + responses: { + /** @description Create gacha item */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + delete_gacha_item: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Delete gacha item */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_gacha_item_by_id: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Gacha Item ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get gacha item by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_GachaItemDto"]; + }; + }; + }; + }; + put_update_gacha_item: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["GachaItemRequestDto"]; + }; + }; + responses: { + /** @description Update gacha item */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_create_gacha_roll: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["GachaRollRequestDto"]; + }; + }; + responses: { + /** @description Create new gacha roll */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_detail_gacha_roll: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Gacha Roll ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get Gacha Roll by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_GachaRollItemDto"]; + }; + }; + }; + }; + post_execute_gacha_roll: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Execute and get 1 gacha result */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_GachaRollItemDto"]; + }; + }; + }; + }; + get_permission_list: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Items per page */ + per_page?: number; + /** @description Search keyword */ + search?: string; + /** @description Sort by field */ + sort_by?: string; + /** @description Order ASC or DESC */ + order?: string; + /** @description Filter value */ + filter?: string; + /** @description Field to filter by */ + filter_by?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get permission list */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseListSuccessDto_Vec_PermissionsItemDto"]; + }; + }; + }; + }; + post_create_permission: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionsRequestDto"]; + }; + }; + responses: { + /** @description Create new permission */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + delete_permission: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Delete permission */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_permission_by_id: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Permission ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get permission by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_PermissionsItemDto"]; + }; + }; + }; + }; + put_update_permission: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PermissionsRequestDto"]; + }; + }; + responses: { + /** @description Update permission */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_role_list: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Items per page */ + per_page?: number; + /** @description Search keyword */ + search?: string; + /** @description Sort by field */ + sort_by?: string; + /** @description Order ASC or DESC */ + order?: string; + /** @description Filter value */ + filter?: string; + /** @description Field to filter by */ + filter_by?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get role list */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseListSuccessDto_Vec_RolesListItemDto"]; + }; + }; + }; + }; + post_create_role: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RolesRequestCreateDto"]; + }; + }; + responses: { + /** @description Create new role */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + delete_role: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Delete role */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_role_by_id: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Role ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get role by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_RolesDetailItemDto"]; + }; + }; + }; + }; + put_update_role: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["RolesRequestUpdateDto"]; + }; + }; + responses: { + /** @description Update role */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_user_list: { + parameters: { + query?: { + /** @description Page number */ + page?: number; + /** @description Items per page */ + per_page?: number; + /** @description Search keyword */ + search?: string; + /** @description Sort by field */ + sort_by?: string; + /** @description Order ASC or DESC */ + order?: string; + /** @description Filter value */ + filter?: string; + /** @description Field to filter by */ + filter_by?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get user list */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseListSuccessDto_Vec_UsersListItemDto"]; + }; + }; + }; + }; + patch_user_active_status: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UsersActiveInactiveRequestDto"]; + }; + }; + responses: { + /** @description Set user active/inactive */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + post_create_user: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UsersCreateRequestDto"]; + }; + }; + responses: { + /** @description Create new user */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + delete_user: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Soft delete user */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + get_user_by_id: { + parameters: { + query?: never; + header?: never; + path: { + /** @description User ID */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get user by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_UsersDetailItemDto"]; + }; + }; + }; + }; + get_user_me: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Get user by ID */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ResponseSuccessDto_UsersDetailItemDto"]; + }; + }; + }; + }; + put_update_user_me: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UsersUpdateRequestDto"]; + }; + }; + responses: { + /** @description Update user me */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; + put_update_user: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UsersUpdateRequestDto"]; + }; + }; + responses: { + /** @description Update user */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MessageResponseDto"]; + }; + }; + }; + }; +} diff --git a/package-lock.json b/package-lock.json index fdbd228..aa37d5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "@hookform/resolvers": "^5.0.1", "@iconify/react": "^6.0.0", "@radix-ui/react-slot": "^1.2.0", + "@redocly/ajv": "^8.11.2", "@tanstack/react-query": "^5.74.4", "@tanstack/react-store": "^0.7.0", "@tanstack/react-table": "^8.21.2", @@ -24,6 +25,8 @@ "js-cookie": "^3.0.5", "next": "~15.2.4", "next-themes": "^0.4.6", + "openapi-fetch": "^0.14.0", + "openapi-react-query": "^0.5.0", "react": "^19.1.0", "react-dom": "^19.1.0", "react-hook-form": "^7.56.4", @@ -90,6 +93,7 @@ "jiti": "2.4.2", "jsdom": "~22.1.0", "nx": "20.8.1", + "openapi-typescript": "^7.8.0", "postcss": "^8.5.3", "prettier": "^2.6.2", "serve": "^14.2.4", @@ -7627,6 +7631,111 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "license": "MIT" }, + "node_modules/@redocly/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@redocly/config": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", + "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.3.tgz", + "integrity": "sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.22.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@rollup/pluginutils": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", @@ -14825,6 +14934,13 @@ "url": "https://github.com/chalk/chalk-template?sponsor=1" } }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, "node_modules/char-regex": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", @@ -18394,7 +18510,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-fifo": { @@ -20438,6 +20553,19 @@ "node": ">=8" } }, + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -22808,6 +22936,16 @@ "node": ">=14" } }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -26121,6 +26259,99 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/openapi-fetch": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/openapi-fetch/-/openapi-fetch-0.14.0.tgz", + "integrity": "sha512-PshIdm1NgdLvb05zp8LqRQMNSKzIlPkyMxYFxwyHR+UlKD4t2nUjkDhNxeRbhRSEd3x5EUNh2w5sJYwkhOH4fg==", + "license": "MIT", + "dependencies": { + "openapi-typescript-helpers": "^0.0.15" + } + }, + "node_modules/openapi-react-query": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/openapi-react-query/-/openapi-react-query-0.5.0.tgz", + "integrity": "sha512-VtyqiamsbWsdSWtXmj/fAR+m9nNxztsof6h8ZIsjRj8c8UR/x9AIwHwd60IqwgymmFwo7qfSJQ1ZzMJrtqjQVg==", + "license": "MIT", + "dependencies": { + "openapi-typescript-helpers": "^0.0.15" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.25.0", + "openapi-fetch": "^0.14.0" + } + }, + "node_modules/openapi-typescript": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.8.0.tgz", + "integrity": "sha512-1EeVWmDzi16A+siQlo/SwSGIT7HwaFAVjvMA7/jG5HMLSnrUOzPL7uSTRZZa4v/LCRxHTApHKtNY6glApEoiUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.34.3", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.0.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "node_modules/openapi-typescript-helpers": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz", + "integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==", + "license": "MIT" + }, + "node_modules/openapi-typescript/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-typescript/node_modules/supports-color": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", + "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/openapi-typescript/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", @@ -26864,6 +27095,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/polished": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", @@ -28404,7 +28645,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -32768,6 +33008,12 @@ "punycode": "^2.1.0" } }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "license": "MIT" + }, "node_modules/url-join": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", @@ -34639,6 +34885,13 @@ "node": ">= 14" } }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index 7bf87ec..d9dc304 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "landing:dev": "nx serve landing", "landing:build": "nx build landing", "landing:prod": "cd ./dist/apps/landing && npx next start", + "landing:openapi": "npx openapi-typescript https://api.imphnen.dev/openapi.json -o ./apps/landing/src/openapi-types.ts", "ui:test": "nx test ui", "ui:build": "nx build ui", "ui:storybook": "nx storybook ui" @@ -28,6 +29,7 @@ "@hookform/resolvers": "^5.0.1", "@iconify/react": "^6.0.0", "@radix-ui/react-slot": "^1.2.0", + "@redocly/ajv": "^8.11.2", "@tanstack/react-query": "^5.74.4", "@tanstack/react-store": "^0.7.0", "@tanstack/react-table": "^8.21.2", @@ -39,6 +41,8 @@ "js-cookie": "^3.0.5", "next": "~15.2.4", "next-themes": "^0.4.6", + "openapi-fetch": "^0.14.0", + "openapi-react-query": "^0.5.0", "react": "^19.1.0", "react-dom": "^19.1.0", "react-hook-form": "^7.56.4", @@ -105,6 +109,7 @@ "jiti": "2.4.2", "jsdom": "~22.1.0", "nx": "20.8.1", + "openapi-typescript": "^7.8.0", "postcss": "^8.5.3", "prettier": "^2.6.2", "serve": "^14.2.4",