feat(web): add federation API client methods for rotation, peer update, and permanent delete
This commit is contained in:
@@ -59,6 +59,21 @@ export class RateLimitError extends Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface FederationPeer {
|
||||||
|
id: string;
|
||||||
|
origin: string;
|
||||||
|
instanceName: string | null;
|
||||||
|
status: string;
|
||||||
|
lastSeenAt: number | null;
|
||||||
|
lastFailureAt: number | null;
|
||||||
|
consecutiveFailures: number | null;
|
||||||
|
lastSyncedAt: number | null;
|
||||||
|
createdAt: number;
|
||||||
|
secretRotatedAt: number | null;
|
||||||
|
rotationInProgress: boolean;
|
||||||
|
autoRotateIntervalDays: number;
|
||||||
|
}
|
||||||
|
|
||||||
export class BackspaceApiClient {
|
export class BackspaceApiClient {
|
||||||
readonly auth: {
|
readonly auth: {
|
||||||
register: (data: RegisterRequest) => Promise<AuthResponse>;
|
register: (data: RegisterRequest) => Promise<AuthResponse>;
|
||||||
@@ -201,9 +216,12 @@ export class BackspaceApiClient {
|
|||||||
};
|
};
|
||||||
|
|
||||||
readonly federation: {
|
readonly federation: {
|
||||||
initiatePeering: (data: { remoteOrigin: string }) => Promise<{ peer: { id: string; origin: string; instanceName: string | null; status: string; lastSeenAt: number | null; createdAt: number } }>;
|
initiatePeering: (data: { remoteOrigin: string }) => Promise<{ peer: FederationPeer }>;
|
||||||
peers: () => Promise<{ peers: Array<{ id: string; origin: string; instanceName: string | null; status: string; lastSeenAt: number | null; lastFailureAt: number | null; consecutiveFailures: number | null; lastSyncedAt: number | null; createdAt: number }> }>;
|
peers: () => Promise<{ peers: FederationPeer[] }>;
|
||||||
revokePeer: (id: string) => Promise<{ success: boolean }>;
|
revokePeer: (id: string) => Promise<{ success: boolean }>;
|
||||||
|
rotatePeerSecret: (id: string) => Promise<{ success: boolean; gracePeriodMs: number }>;
|
||||||
|
updatePeer: (id: string, data: { autoRotateIntervalDays: number }) => Promise<{ peer: FederationPeer }>;
|
||||||
|
deletePeerPermanently: (id: string) => Promise<{ success: boolean }>;
|
||||||
};
|
};
|
||||||
|
|
||||||
readonly admin: {
|
readonly admin: {
|
||||||
@@ -626,15 +644,21 @@ export class BackspaceApiClient {
|
|||||||
|
|
||||||
this.federation = {
|
this.federation = {
|
||||||
initiatePeering: (data: { remoteOrigin: string }) =>
|
initiatePeering: (data: { remoteOrigin: string }) =>
|
||||||
request<{ peer: { id: string; origin: string; instanceName: string | null; status: string; lastSeenAt: number | null; createdAt: number } }>(
|
request<{ peer: FederationPeer }>(
|
||||||
'POST', '/federation/peer/initiate', data
|
'POST', '/federation/peer/initiate', data
|
||||||
),
|
),
|
||||||
peers: () =>
|
peers: () =>
|
||||||
request<{ peers: Array<{ id: string; origin: string; instanceName: string | null; status: string; lastSeenAt: number | null; lastFailureAt: number | null; consecutiveFailures: number | null; lastSyncedAt: number | null; createdAt: number }> }>(
|
request<{ peers: FederationPeer[] }>(
|
||||||
'GET', '/federation/peers'
|
'GET', '/federation/peers'
|
||||||
),
|
),
|
||||||
revokePeer: (id: string) =>
|
revokePeer: (id: string) =>
|
||||||
request<{ success: boolean }>('DELETE', `/federation/peers/${id}`),
|
request<{ success: boolean }>('DELETE', `/federation/peers/${id}`),
|
||||||
|
rotatePeerSecret: (id: string) =>
|
||||||
|
request<{ success: boolean; gracePeriodMs: number }>('POST', `/federation/peers/${id}/rotate`),
|
||||||
|
updatePeer: (id: string, data: { autoRotateIntervalDays: number }) =>
|
||||||
|
request<{ peer: FederationPeer }>('PATCH', `/federation/peers/${id}`, data),
|
||||||
|
deletePeerPermanently: (id: string) =>
|
||||||
|
request<{ success: boolean }>('DELETE', `/federation/peers/${id}/permanent`),
|
||||||
};
|
};
|
||||||
|
|
||||||
this.admin = {
|
this.admin = {
|
||||||
|
|||||||
Reference in New Issue
Block a user