From a3fa50b69774fd711b5842ece9d275804d07ae4e Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 4 Dec 2023 18:15:05 +0200 Subject: [PATCH 1/2] revert(backend): Introduce OrganizationPermissionAPI and OrganizationRoleAPI (#2252) --- .changeset/cyan-dodos-provide.md | 7 + .../endpoints/OrganizationPermissionApi.ts | 69 --------- .../src/api/endpoints/OrganizationRoleApi.ts | 138 ------------------ packages/backend/src/api/endpoints/index.ts | 2 - packages/backend/src/api/factory.ts | 5 +- packages/backend/src/api/resources/Enums.ts | 5 - packages/backend/src/api/resources/JSON.ts | 24 --- .../backend/src/api/resources/Permission.ts | 18 --- packages/backend/src/api/resources/Role.ts | 26 ---- packages/backend/src/api/resources/index.ts | 2 - packages/backend/src/exports.test.ts | 2 - .../__snapshots__/exports.test.ts.snap | 2 - .../__snapshots__/exports.test.ts.snap | 4 - packages/sdk-node/src/index.ts | 4 - 14 files changed, 8 insertions(+), 300 deletions(-) create mode 100644 .changeset/cyan-dodos-provide.md delete mode 100644 packages/backend/src/api/endpoints/OrganizationPermissionApi.ts delete mode 100644 packages/backend/src/api/endpoints/OrganizationRoleApi.ts delete mode 100644 packages/backend/src/api/resources/Permission.ts delete mode 100644 packages/backend/src/api/resources/Role.ts diff --git a/.changeset/cyan-dodos-provide.md b/.changeset/cyan-dodos-provide.md new file mode 100644 index 00000000000..b7379a7eb73 --- /dev/null +++ b/.changeset/cyan-dodos-provide.md @@ -0,0 +1,7 @@ +--- +'@clerk/clerk-sdk-node': patch +'@clerk/backend': patch +'@clerk/nextjs': patch +--- + +Drop the introduction of `OrganizationRole` and `OrganizationPermission` resources fro BAPI. diff --git a/packages/backend/src/api/endpoints/OrganizationPermissionApi.ts b/packages/backend/src/api/endpoints/OrganizationPermissionApi.ts deleted file mode 100644 index 64e7ee66e5a..00000000000 --- a/packages/backend/src/api/endpoints/OrganizationPermissionApi.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { joinPaths } from '../../util/path'; -import type { DeletedObject, Permission } from '../resources'; -import { AbstractAPI } from './AbstractApi'; - -const basePath = '/organizations_permissions'; - -type GetOrganizationPermissionListParams = { - limit?: number; - offset?: number; - query?: string; - orderBy?: string; -}; - -type CreateParams = { - name: string; - key: string; - description: string; -}; - -type GetOrganizationPermissionParams = { permissionId: string }; - -type UpdateParams = { - name?: string; - key?: string; - description?: string; -}; - -export class OrganizationPermissionAPI extends AbstractAPI { - public async getOrganizationPermissionList(params?: GetOrganizationPermissionListParams) { - return this.request({ - method: 'GET', - path: basePath, - queryParams: params, - }); - } - - public async createOrganizationPermission(params: CreateParams) { - return this.request({ - method: 'POST', - path: basePath, - bodyParams: params, - }); - } - - public async getOrganizationPermission(params: GetOrganizationPermissionParams) { - this.requireId(params.permissionId); - - return this.request({ - method: 'GET', - path: joinPaths(basePath, params.permissionId), - }); - } - - public async updateOrganizationPermission(permissionId: string, params: UpdateParams) { - this.requireId(permissionId); - return this.request({ - method: 'PATCH', - path: joinPaths(basePath, permissionId), - bodyParams: params, - }); - } - - public async deleteOrganizationPermission(permissionId: string) { - return this.request({ - method: 'DELETE', - path: joinPaths(basePath, permissionId), - }); - } -} diff --git a/packages/backend/src/api/endpoints/OrganizationRoleApi.ts b/packages/backend/src/api/endpoints/OrganizationRoleApi.ts deleted file mode 100644 index 5385bcc0b7a..00000000000 --- a/packages/backend/src/api/endpoints/OrganizationRoleApi.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { joinPaths } from '../../util/path'; -import type { DeletedObject, Role } from '../resources'; -import { AbstractAPI } from './AbstractApi'; - -const basePath = '/organizations_roles'; - -type GetRoleListParams = { - limit?: number; - offset?: number; - query?: string; - order_by?: string; -}; - -type CreateParams = { - /** - * A name of a role in a readable friendly format. - * F.e. `Teacher` or `Administrator` - */ - name: string; - - /** - * A unique identifier that represents the role. - * F.e. `org:administrator` - */ - key: string; - - /** - * A brief description of what the role represents or its intended use. - */ - description: string; - - /** - * An array of permission ids that will be assigned to this role. - */ - permissions: string[]; -}; - -type GetOrganizationRoleParams = { roleId: string }; - -type UpdateParams = { - /** - * A name of a role in a readable friendly format. - * F.e. `Teacher` or `Administrator` - * Passing undefined has no effect to the existing value. - */ - name?: string; - - /** - * A unique identifier that represents the role. - * F.e. `org:administrator` - * Passing undefined has no effect to the existing value. - */ - key?: string; - - /** - * A brief description of what the role represents or its intended use. - * Passing undefined has no effect to the existing value. - */ - description?: string; - - /** - * An array of permission ids that will be assigned to this role. - * Passing undefined has no effect to the permission that already exist. - * Passing an empty array will override the existing permissions. - */ - permissions?: string[]; -}; - -type RemovePermissionParams = { - permissionId: string; - roleId: string; -}; - -type AssignPermissionParams = RemovePermissionParams; - -export class OrganizationRoleAPI extends AbstractAPI { - public async getOrganizationRoleList(params?: GetRoleListParams) { - return this.request({ - method: 'GET', - path: basePath, - queryParams: params, - }); - } - - public async createOrganizationRole(params: CreateParams) { - return this.request({ - method: 'POST', - path: basePath, - bodyParams: params, - }); - } - - public async getOrganizationRole(params: GetOrganizationRoleParams) { - this.requireId(params.roleId); - - return this.request({ - method: 'GET', - path: joinPaths(basePath, params.roleId), - }); - } - - public async updateOrganizationRole(roleId: string, params: UpdateParams) { - this.requireId(roleId); - return this.request({ - method: 'PATCH', - path: joinPaths(basePath, roleId), - bodyParams: params, - }); - } - - public async deleteOrganizationRole(roleId: string) { - this.requireId(roleId); - return this.request({ - method: 'DELETE', - path: joinPaths(basePath, roleId), - }); - } - - public async assignPermissionToRole(params: AssignPermissionParams) { - const { roleId, permissionId } = params; - this.requireId(roleId); - this.requireId(permissionId); - return this.request({ - method: 'POST', - path: joinPaths(basePath, roleId, 'permission', permissionId), - }); - } - - public async removePermissionFromRole(params: RemovePermissionParams) { - const { roleId, permissionId } = params; - this.requireId(roleId); - this.requireId(permissionId); - return this.request({ - method: 'DELETE', - path: joinPaths(basePath, roleId, 'permission', permissionId), - }); - } -} diff --git a/packages/backend/src/api/endpoints/index.ts b/packages/backend/src/api/endpoints/index.ts index e0cc684b484..bd05e6af471 100644 --- a/packages/backend/src/api/endpoints/index.ts +++ b/packages/backend/src/api/endpoints/index.ts @@ -7,8 +7,6 @@ export * from './EmailApi'; export * from './InterstitialApi'; export * from './InvitationApi'; export * from './OrganizationApi'; -export * from './OrganizationRoleApi'; -export * from './OrganizationPermissionApi'; export * from './PhoneNumberApi'; export * from './RedirectUrlApi'; export * from './SessionApi'; diff --git a/packages/backend/src/api/factory.ts b/packages/backend/src/api/factory.ts index f4453cc7046..787819c0940 100644 --- a/packages/backend/src/api/factory.ts +++ b/packages/backend/src/api/factory.ts @@ -7,8 +7,6 @@ import { InterstitialAPI, InvitationAPI, OrganizationAPI, - OrganizationPermissionAPI, - OrganizationRoleAPI, PhoneNumberAPI, RedirectUrlAPI, SessionAPI, @@ -43,6 +41,7 @@ export type ApiClient = ReturnType; export function createBackendApiClient(options: CreateBackendApiOptions) { const request = buildRequest(options); + return { allowlistIdentifiers: new AllowlistIdentifierAPI(request), clients: new ClientAPI(request), @@ -51,8 +50,6 @@ export function createBackendApiClient(options: CreateBackendApiOptions) { interstitial: new InterstitialAPI(request), invitations: new InvitationAPI(request), organizations: new OrganizationAPI(request), - organizationRoles: new OrganizationRoleAPI(request), - organizationPermissions: new OrganizationPermissionAPI(request), phoneNumbers: new PhoneNumberAPI(request), redirectUrls: new RedirectUrlAPI(request), sessions: new SessionAPI(request), diff --git a/packages/backend/src/api/resources/Enums.ts b/packages/backend/src/api/resources/Enums.ts index 160514d4e35..7cc60053776 100644 --- a/packages/backend/src/api/resources/Enums.ts +++ b/packages/backend/src/api/resources/Enums.ts @@ -20,11 +20,6 @@ export type OAuthStrategy = `oauth_${OAuthProvider}`; export type OrganizationInvitationStatus = 'pending' | 'accepted' | 'revoked'; -export type PermissionType = 'system' | 'user'; - -/** - * @deprecated In the next major release this type will change to string - */ export type OrganizationMembershipRole = 'basic_member' | 'guest_member' | 'admin'; export type SignInStatus = 'needs_identifier' | 'needs_factor_one' | 'needs_factor_two' | 'complete'; diff --git a/packages/backend/src/api/resources/JSON.ts b/packages/backend/src/api/resources/JSON.ts index 1b9aa8d62ca..bbbe53c4a60 100644 --- a/packages/backend/src/api/resources/JSON.ts +++ b/packages/backend/src/api/resources/JSON.ts @@ -2,7 +2,6 @@ import type { InvitationStatus, OrganizationInvitationStatus, OrganizationMembershipRole, - PermissionType, SignInStatus, SignUpAttributeRequirements, SignUpStatus, @@ -21,8 +20,6 @@ export enum ObjectType { Organization = 'organization', OrganizationInvitation = 'organization_invitation', OrganizationMembership = 'organization_membership', - Role = 'role', - Permission = 'permission', PhoneNumber = 'phone_number', RedirectUrl = 'redirect_url', Session = 'session', @@ -187,27 +184,6 @@ export interface OrganizationMembershipPublicUserDataJSON { user_id: string; } -export interface RoleJSON extends ClerkResourceJSON { - object: ObjectType.Role; - name: string; - key: string; - description: string; - permissions: PermissionJSON[]; - created_at: number; - updated_at: number; -} - -export interface PermissionJSON extends ClerkResourceJSON { - object: ObjectType.Permission; - id: string; - name: string; - key: string; - description: string; - type: PermissionType; - created_at: number; - updated_at: number; -} - export interface PhoneNumberJSON extends ClerkResourceJSON { object: ObjectType.PhoneNumber; phone_number: string; diff --git a/packages/backend/src/api/resources/Permission.ts b/packages/backend/src/api/resources/Permission.ts deleted file mode 100644 index 71246438015..00000000000 --- a/packages/backend/src/api/resources/Permission.ts +++ /dev/null @@ -1,18 +0,0 @@ -import type { PermissionType } from './Enums'; -import type { PermissionJSON } from './JSON'; - -export class Permission { - constructor( - readonly id: string, - readonly name: string, - readonly key: string, - readonly description: string, - readonly type: PermissionType, - readonly createdAt: number, - readonly updatedAt: number, - ) {} - - static fromJSON(data: PermissionJSON) { - return new Permission(data.id, data.name, data.key, data.description, data.type, data.created_at, data.updated_at); - } -} diff --git a/packages/backend/src/api/resources/Role.ts b/packages/backend/src/api/resources/Role.ts deleted file mode 100644 index cd261531468..00000000000 --- a/packages/backend/src/api/resources/Role.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { RoleJSON } from './JSON'; -import { Permission } from './Permission'; - -export class Role { - constructor( - readonly id: string, - readonly name: string, - readonly key: string, - readonly description: string, - readonly permissions: Permission[] = [], - readonly createdAt: number, - readonly updatedAt: number, - ) {} - - static fromJSON(data: RoleJSON): Role { - return new Role( - data.id, - data.name, - data.key, - data.description, - (data.permissions || []).map(x => Permission.fromJSON(x)), - 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 6c95ba9cb39..936494c56eb 100644 --- a/packages/backend/src/api/resources/index.ts +++ b/packages/backend/src/api/resources/index.ts @@ -22,8 +22,6 @@ export * from './Invitation'; export * from './JSON'; export * from './OauthAccessToken'; export * from './Organization'; -export * from './Role'; -export * from './Permission'; export * from './OrganizationInvitation'; export * from './OrganizationMembership'; export * from './PhoneNumber'; diff --git a/packages/backend/src/exports.test.ts b/packages/backend/src/exports.test.ts index 98d1218687b..5f43b14475f 100644 --- a/packages/backend/src/exports.test.ts +++ b/packages/backend/src/exports.test.ts @@ -24,10 +24,8 @@ export default (QUnit: QUnit) => { 'OrganizationInvitation', 'OrganizationMembership', 'OrganizationMembershipPublicUserData', - 'Permission', 'PhoneNumber', 'RedirectUrl', - 'Role', 'SMSMessage', 'Session', 'SignInToken', diff --git a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap index 4888c8db52a..e5b9aa7de1f 100644 --- a/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/server/__tests__/__snapshots__/exports.test.ts.snap @@ -29,10 +29,8 @@ exports[`/server public exports should not include a breaking change 1`] = ` "OrganizationMembershipPublicUserData", "PROXY_URL", "PUBLISHABLE_KEY", - "Permission", "PhoneNumber", "RedirectUrl", - "Role", "SECRET_KEY", "SIGN_IN_URL", "SIGN_UP_URL", diff --git a/packages/sdk-node/src/__tests__/__snapshots__/exports.test.ts.snap b/packages/sdk-node/src/__tests__/__snapshots__/exports.test.ts.snap index 0fba8061855..3e396fa8449 100644 --- a/packages/sdk-node/src/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/sdk-node/src/__tests__/__snapshots__/exports.test.ts.snap @@ -20,10 +20,8 @@ exports[`module exports should not change unless explicitly set 1`] = ` "OrganizationInvitation", "OrganizationMembership", "OrganizationMembershipPublicUserData", - "Permission", "PhoneNumber", "RedirectUrl", - "Role", "SMSMessage", "Session", "SignInToken", @@ -51,8 +49,6 @@ exports[`module exports should not change unless explicitly set 1`] = ` "invitations", "loadInterstitialFromLocal", "makeAuthObjectSerializable", - "organizationPermissions", - "organizationRoles", "organizations", "phoneNumbers", "prunePrivateMetadata", diff --git a/packages/sdk-node/src/index.ts b/packages/sdk-node/src/index.ts index 4fc05faabb1..5a0ff9f373d 100644 --- a/packages/sdk-node/src/index.ts +++ b/packages/sdk-node/src/index.ts @@ -47,8 +47,6 @@ const { emails, invitations, organizations, - organizationRoles, - organizationPermissions, clients, allowlistIdentifiers, domains, @@ -63,8 +61,6 @@ export { emails, invitations, organizations, - organizationRoles, - organizationPermissions, clients, allowlistIdentifiers, domains, From 39ec5fe51584d910078b539bfb29ce8263bb9a86 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 4 Dec 2023 18:20:07 +0200 Subject: [PATCH 2/2] revert(backend): Introduce OrganizationPermissionAPI and OrganizationRoleAPI (#2252) --- .../nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap | 2 -- .../__tests__/__snapshots__/exports.test.ts.snap | 2 -- 2 files changed, 4 deletions(-) diff --git a/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap index b3288acdd68..332b415bd70 100644 --- a/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/api/__tests__/__snapshots__/exports.test.ts.snap @@ -18,10 +18,8 @@ exports[`/api public exports should not include a breaking change 1`] = ` "OrganizationInvitation", "OrganizationMembership", "OrganizationMembershipPublicUserData", - "Permission", "PhoneNumber", "RedirectUrl", - "Role", "SMSMessage", "Session", "SignInToken", diff --git a/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap b/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap index e7af66329d4..d8da61fad66 100644 --- a/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap +++ b/packages/nextjs/src/edge-middleware/__tests__/__snapshots__/exports.test.ts.snap @@ -18,10 +18,8 @@ exports[`/edge-middleware public exports should not include a breaking change 1` "OrganizationInvitation", "OrganizationMembership", "OrganizationMembershipPublicUserData", - "Permission", "PhoneNumber", "RedirectUrl", - "Role", "SMSMessage", "Session", "SignInToken",