forked from baron/baron-sso
322 lines
6.7 KiB
TypeScript
322 lines
6.7 KiB
TypeScript
import apiClient from "./apiClient";
|
|
|
|
export type AuditLog = {
|
|
event_id: string;
|
|
timestamp: string;
|
|
user_id: string;
|
|
event_type: string;
|
|
status: string;
|
|
ip_address: string;
|
|
user_agent: string;
|
|
device_id?: string;
|
|
details?: string;
|
|
};
|
|
|
|
export type AuditLogListResponse = {
|
|
items: AuditLog[];
|
|
limit: number;
|
|
cursor?: string;
|
|
next_cursor?: string;
|
|
};
|
|
|
|
export type TenantSummary = {
|
|
id: string;
|
|
name: string;
|
|
slug: string;
|
|
description: string;
|
|
status: string;
|
|
domains?: string[];
|
|
config?: Record<string, any>;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type TenantCreateRequest = {
|
|
name: string;
|
|
slug?: string;
|
|
description?: string;
|
|
status?: string;
|
|
domains?: string[];
|
|
config?: Record<string, any>;
|
|
};
|
|
|
|
export type TenantListResponse = {
|
|
items: TenantSummary[];
|
|
limit: number;
|
|
offset: number;
|
|
total: number;
|
|
};
|
|
|
|
export type TenantUpdateRequest = {
|
|
name?: string;
|
|
slug?: string;
|
|
description?: string;
|
|
status?: string;
|
|
domains?: string[];
|
|
config?: Record<string, any>;
|
|
};
|
|
|
|
export type ApiKeySummary = {
|
|
id: string;
|
|
name: string;
|
|
client_id: string;
|
|
scopes: string[];
|
|
status: string;
|
|
lastUsedAt?: string;
|
|
createdAt: string;
|
|
};
|
|
|
|
export type ApiKeyListResponse = {
|
|
items: ApiKeySummary[];
|
|
total: number;
|
|
};
|
|
|
|
export type RoleSummary = {
|
|
id: string;
|
|
name: string;
|
|
description: string;
|
|
permissions: string[];
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type RoleListResponse = {
|
|
items: RoleSummary[];
|
|
total: number;
|
|
};
|
|
|
|
export async function fetchAuditLogs(limit = 50, cursor?: string) {
|
|
const { data } = await apiClient.get<AuditLogListResponse>("/v1/audit", {
|
|
params: { limit, cursor },
|
|
});
|
|
return data;
|
|
}
|
|
|
|
export async function fetchTenants(limit = 50, offset = 0) {
|
|
const { data } = await apiClient.get<TenantListResponse>(
|
|
"/v1/admin/tenants",
|
|
{
|
|
params: { limit, offset },
|
|
},
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function fetchTenant(tenantId: string) {
|
|
const { data } = await apiClient.get<TenantSummary>(
|
|
`/v1/admin/tenants/${tenantId}`,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function createTenant(payload: TenantCreateRequest) {
|
|
const { data } = await apiClient.post<TenantSummary>(
|
|
"/v1/admin/tenants",
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function updateTenant(
|
|
tenantId: string,
|
|
payload: TenantUpdateRequest,
|
|
) {
|
|
const { data } = await apiClient.put<TenantSummary>(
|
|
`/v1/admin/tenants/${tenantId}`,
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function deleteTenant(tenantId: string) {
|
|
await apiClient.delete(`/v1/admin/tenants/${tenantId}`);
|
|
}
|
|
|
|
export async function approveTenant(tenantId: string) {
|
|
const { data } = await apiClient.post<TenantSummary>(
|
|
`/v1/admin/tenants/${tenantId}/approve`,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
// API Key Management (M2M)
|
|
export type ApiKeyCreateRequest = {
|
|
name: string;
|
|
scopes: string[];
|
|
};
|
|
|
|
export type ApiKeyCreateResponse = {
|
|
apiKey: ApiKeySummary;
|
|
clientSecret: string;
|
|
};
|
|
|
|
export async function fetchApiKeys(limit = 50, offset = 0) {
|
|
const { data } = await apiClient.get<ApiKeyListResponse>(
|
|
"/v1/admin/api-keys",
|
|
{
|
|
params: { limit, offset },
|
|
},
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function createApiKey(payload: ApiKeyCreateRequest) {
|
|
const { data } = await apiClient.post<ApiKeyCreateResponse>(
|
|
"/v1/admin/api-keys",
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function deleteApiKey(apiKeyId: string) {
|
|
await apiClient.delete(`/v1/admin/api-keys/${apiKeyId}`);
|
|
}
|
|
|
|
// User Management
|
|
export type UserSummary = {
|
|
id: string;
|
|
email: string;
|
|
name: string;
|
|
phone?: string;
|
|
role: string;
|
|
status: string;
|
|
companyCode?: string;
|
|
tenant?: TenantSummary;
|
|
metadata?: Record<string, any>;
|
|
department?: string;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type UserListResponse = {
|
|
items: UserSummary[];
|
|
limit: number;
|
|
offset: number;
|
|
total: number;
|
|
};
|
|
|
|
export type UserCreateRequest = {
|
|
email: string;
|
|
password?: string;
|
|
name: string;
|
|
phone?: string;
|
|
role?: string;
|
|
companyCode?: string;
|
|
department?: string;
|
|
};
|
|
|
|
export type UserCreateResponse = UserSummary & {
|
|
initialPassword?: string;
|
|
};
|
|
|
|
export type UserUpdateRequest = {
|
|
password?: string;
|
|
name?: string;
|
|
phone?: string;
|
|
role?: string;
|
|
status?: string;
|
|
companyCode?: string;
|
|
department?: string;
|
|
};
|
|
|
|
export async function fetchUsers(limit = 50, offset = 0, search?: string) {
|
|
const { data } = await apiClient.get<UserListResponse>("/v1/admin/users", {
|
|
params: { limit, offset, search },
|
|
});
|
|
return data;
|
|
}
|
|
|
|
export async function fetchUser(userId: string) {
|
|
const { data } = await apiClient.get<UserSummary>(
|
|
`/v1/admin/users/${userId}`,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function createUser(payload: UserCreateRequest) {
|
|
const { data } = await apiClient.post<UserCreateResponse>(
|
|
"/v1/admin/users",
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function updateUser(userId: string, payload: UserUpdateRequest) {
|
|
const { data } = await apiClient.put<UserSummary>(
|
|
`/v1/admin/users/${userId}`,
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function deleteUser(userId: string) {
|
|
await apiClient.delete(`/v1/admin/users/${userId}`);
|
|
}
|
|
|
|
// Relying Party Management
|
|
export type RelyingParty = {
|
|
clientId: string;
|
|
tenantId: string;
|
|
name: string;
|
|
description: string;
|
|
createdAt: string;
|
|
updatedAt: string;
|
|
};
|
|
|
|
export type HydraClientReq = {
|
|
client_id?: string;
|
|
client_name: string;
|
|
client_secret?: string;
|
|
redirect_uris: string[];
|
|
scope?: string;
|
|
token_endpoint_auth_method?: string;
|
|
grant_types?: string[];
|
|
response_types?: string[];
|
|
metadata?: Record<string, any>;
|
|
};
|
|
|
|
export async function fetchRelyingParties(tenantId: string) {
|
|
const { data } = await apiClient.get<RelyingParty[]>(
|
|
`/v1/admin/tenants/${tenantId}/relying-parties`,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function fetchAllRelyingParties() {
|
|
const { data } = await apiClient.get<RelyingParty[]>(
|
|
"/v1/admin/relying-parties",
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function createRelyingParty(
|
|
tenantId: string,
|
|
payload: HydraClientReq,
|
|
) {
|
|
const { data } = await apiClient.post<RelyingParty>(
|
|
`/v1/admin/tenants/${tenantId}/relying-parties`,
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function fetchRelyingParty(id: string) {
|
|
const { data } = await apiClient.get<{
|
|
relyingParty: RelyingParty;
|
|
oauth2Config: HydraClientReq;
|
|
}>(`/v1/admin/relying-parties/${id}`);
|
|
return data;
|
|
}
|
|
|
|
export async function updateRelyingParty(id: string, payload: HydraClientReq) {
|
|
const { data } = await apiClient.put<RelyingParty>(
|
|
`/v1/admin/relying-parties/${id}`,
|
|
payload,
|
|
);
|
|
return data;
|
|
}
|
|
|
|
export async function deleteRelyingParty(id: string) {
|
|
await apiClient.delete(`/v1/admin/relying-parties/${id}`);
|
|
}
|