| import axios from 'axios' |
| import { getOauthConfig } from '../../constants/oauth.js' |
| import { getOAuthHeaders, prepareApiRequest } from '../../utils/teleport/api.js' |
|
|
| export type AdminRequestType = 'limit_increase' | 'seat_upgrade' |
|
|
| export type AdminRequestStatus = 'pending' | 'approved' | 'dismissed' |
|
|
| export type AdminRequestSeatUpgradeDetails = { |
| message?: string | null |
| current_seat_tier?: string | null |
| } |
|
|
| export type AdminRequestCreateParams = |
| | { |
| request_type: 'limit_increase' |
| details: null |
| } |
| | { |
| request_type: 'seat_upgrade' |
| details: AdminRequestSeatUpgradeDetails |
| } |
|
|
| export type AdminRequest = { |
| uuid: string |
| status: AdminRequestStatus |
| requester_uuid?: string | null |
| created_at: string |
| } & ( |
| | { |
| request_type: 'limit_increase' |
| details: null |
| } |
| | { |
| request_type: 'seat_upgrade' |
| details: AdminRequestSeatUpgradeDetails |
| } |
| ) |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| export async function createAdminRequest( |
| params: AdminRequestCreateParams, |
| ): Promise<AdminRequest> { |
| const { accessToken, orgUUID } = await prepareApiRequest() |
|
|
| const headers = { |
| ...getOAuthHeaders(accessToken), |
| 'x-organization-uuid': orgUUID, |
| } |
|
|
| const url = `${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/admin_requests` |
|
|
| const response = await axios.post<AdminRequest>(url, params, { headers }) |
|
|
| return response.data |
| } |
|
|
| |
| |
| |
| |
| |
| export async function getMyAdminRequests( |
| requestType: AdminRequestType, |
| statuses: AdminRequestStatus[], |
| ): Promise<AdminRequest[] | null> { |
| const { accessToken, orgUUID } = await prepareApiRequest() |
|
|
| const headers = { |
| ...getOAuthHeaders(accessToken), |
| 'x-organization-uuid': orgUUID, |
| } |
|
|
| let url = `${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/admin_requests/me?request_type=${requestType}` |
| for (const status of statuses) { |
| url += `&statuses=${status}` |
| } |
|
|
| const response = await axios.get<AdminRequest[] | null>(url, { |
| headers, |
| }) |
|
|
| return response.data |
| } |
|
|
| type AdminRequestEligibilityResponse = { |
| request_type: AdminRequestType |
| is_allowed: boolean |
| } |
|
|
| |
| |
| |
| export async function checkAdminRequestEligibility( |
| requestType: AdminRequestType, |
| ): Promise<AdminRequestEligibilityResponse | null> { |
| const { accessToken, orgUUID } = await prepareApiRequest() |
|
|
| const headers = { |
| ...getOAuthHeaders(accessToken), |
| 'x-organization-uuid': orgUUID, |
| } |
|
|
| const url = `${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/admin_requests/eligibility?request_type=${requestType}` |
|
|
| const response = await axios.get<AdminRequestEligibilityResponse>(url, { |
| headers, |
| }) |
|
|
| return response.data |
| } |
|
|