diff --git a/.changeset/fresh-bears-unite.md b/.changeset/fresh-bears-unite.md new file mode 100644 index 00000000000..6fd44f1c074 --- /dev/null +++ b/.changeset/fresh-bears-unite.md @@ -0,0 +1,15 @@ +--- +'@clerk/backend': patch +--- + +Adds the ability to verify proxy checks to the Backend API client. + +```ts + import { createClerkClient } from '@clerk/backend'; + + const clerkClient = createClerkClient(...); + await clerkClient.proxyChecks.verify({ + domainId: 'dmn_xxxxxx', + proxyUrl: 'https://[your-domain].com' + }); +``` \ No newline at end of file diff --git a/packages/backend/src/api/endpoints/ProxyCheckApi.ts b/packages/backend/src/api/endpoints/ProxyCheckApi.ts new file mode 100644 index 00000000000..f2a28360d56 --- /dev/null +++ b/packages/backend/src/api/endpoints/ProxyCheckApi.ts @@ -0,0 +1,19 @@ +import type { ProxyCheck } from '../resources'; +import { AbstractAPI } from './AbstractApi'; + +const basePath = '/proxy_checks'; + +type VerifyParams = { + domainId: string; + proxyUrl: string; +}; + +export class ProxyCheckAPI extends AbstractAPI { + public async verify(params: VerifyParams) { + return this.request({ + method: 'POST', + path: basePath, + bodyParams: params, + }); + } +} diff --git a/packages/backend/src/api/endpoints/index.ts b/packages/backend/src/api/endpoints/index.ts index f1ea10ac9ce..a16487cb6f4 100644 --- a/packages/backend/src/api/endpoints/index.ts +++ b/packages/backend/src/api/endpoints/index.ts @@ -7,6 +7,7 @@ export * from './EmailAddressApi'; export * from './InvitationApi'; export * from './OrganizationApi'; export * from './PhoneNumberApi'; +export * from './ProxyCheckApi'; export * from './RedirectUrlApi'; export * from './SessionApi'; export * from './SignInTokenApi'; diff --git a/packages/backend/src/api/factory.ts b/packages/backend/src/api/factory.ts index 47098188dbe..6854859cf21 100644 --- a/packages/backend/src/api/factory.ts +++ b/packages/backend/src/api/factory.ts @@ -7,6 +7,7 @@ import { InvitationAPI, OrganizationAPI, PhoneNumberAPI, + ProxyCheckAPI, RedirectUrlAPI, SamlConnectionAPI, SessionAPI, @@ -33,6 +34,7 @@ export function createBackendApiClient(options: CreateBackendApiOptions) { invitations: new InvitationAPI(request), organizations: new OrganizationAPI(request), phoneNumbers: new PhoneNumberAPI(request), + proxyChecks: new ProxyCheckAPI(request), redirectUrls: new RedirectUrlAPI(request), sessions: new SessionAPI(request), signInTokens: new SignInTokenAPI(request), diff --git a/packages/backend/src/api/resources/Deserializer.ts b/packages/backend/src/api/resources/Deserializer.ts index 067d0ee0693..8ed7fc730e1 100644 --- a/packages/backend/src/api/resources/Deserializer.ts +++ b/packages/backend/src/api/resources/Deserializer.ts @@ -11,6 +11,7 @@ import { OrganizationInvitation, OrganizationMembership, PhoneNumber, + ProxyCheck, RedirectUrl, Session, SignInToken, @@ -91,6 +92,8 @@ function jsonToObject(item: any): any { return OrganizationMembership.fromJSON(item); case ObjectType.PhoneNumber: return PhoneNumber.fromJSON(item); + case ObjectType.ProxyCheck: + return ProxyCheck.fromJSON(item); case ObjectType.RedirectUrl: return RedirectUrl.fromJSON(item); case ObjectType.SignInToken: diff --git a/packages/backend/src/api/resources/JSON.ts b/packages/backend/src/api/resources/JSON.ts index 5ad5f0cc078..1a30067a739 100644 --- a/packages/backend/src/api/resources/JSON.ts +++ b/packages/backend/src/api/resources/JSON.ts @@ -26,6 +26,7 @@ export const ObjectType = { OrganizationInvitation: 'organization_invitation', OrganizationMembership: 'organization_membership', PhoneNumber: 'phone_number', + ProxyCheck: 'proxy_check', RedirectUrl: 'redirect_url', SamlAccount: 'saml_account', Session: 'session', @@ -255,6 +256,17 @@ export interface PhoneNumberJSON extends ClerkResourceJSON { backup_codes: string[]; } +export type ProxyCheckJSON = { + object: typeof ObjectType.ProxyCheck; + id: string; + domain_id: string; + last_run_at: number | null; + proxy_url: string; + successful: boolean; + created_at: number; + updated_at: number; +}; + export interface RedirectUrlJSON extends ClerkResourceJSON { object: typeof ObjectType.RedirectUrl; url: string; diff --git a/packages/backend/src/api/resources/ProxyCheck.ts b/packages/backend/src/api/resources/ProxyCheck.ts new file mode 100644 index 00000000000..999b5e65261 --- /dev/null +++ b/packages/backend/src/api/resources/ProxyCheck.ts @@ -0,0 +1,25 @@ +import type { ProxyCheckJSON } from './JSON'; + +export class ProxyCheck { + constructor( + readonly id: string, + readonly domainId: string, + readonly lastRunAt: number | null, + readonly proxyUrl: string, + readonly successful: boolean, + readonly createdAt: number, + readonly updatedAt: number, + ) {} + + static fromJSON(data: ProxyCheckJSON): ProxyCheck { + return new ProxyCheck( + data.id, + data.domain_id, + data.last_run_at, + data.proxy_url, + data.successful, + data.created_at, + data.updated_at, + ); + } +} diff --git a/packages/backend/src/api/resources/index.ts b/packages/backend/src/api/resources/index.ts index c384c95f8e0..efaa43dfbb6 100644 --- a/packages/backend/src/api/resources/index.ts +++ b/packages/backend/src/api/resources/index.ts @@ -25,6 +25,7 @@ export * from './Organization'; export * from './OrganizationInvitation'; export * from './OrganizationMembership'; export * from './PhoneNumber'; +export * from './ProxyCheck'; export * from './RedirectUrl'; export * from './Session'; export * from './SignInTokens'; diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index c9e3e8cd224..786f0d1c837 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -73,6 +73,7 @@ export type { OrganizationMembershipJSON, OrganizationMembershipPublicUserDataJSON, PhoneNumberJSON, + ProxyCheckJSON, RedirectUrlJSON, SessionJSON, SignInJSON,