From 868ff6c9184b24253465b25a78aea06682b37b5a Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 14:17:22 +0300 Subject: [PATCH 01/13] fix(shared): Fix deprecatedObjectProperty key usage and support optional key arg --- packages/shared/src/utils/deprecated.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/utils/deprecated.ts b/packages/shared/src/utils/deprecated.ts index 1392fb2a534..19ea73cb5cc 100644 --- a/packages/shared/src/utils/deprecated.ts +++ b/packages/shared/src/utils/deprecated.ts @@ -81,6 +81,20 @@ export const deprecatedProperty = (cls: AnyClass, propName: string, warning: str * * deprecatedObjectProperty(obj, 'something', 'Use `somethingElse` instead.'); */ -export const deprecatedObjectProperty = (obj: Record, propName: string, warning: string): void => { - deprecatedProperty(obj as any, propName, warning, true); +export const deprecatedObjectProperty = ( + obj: Record, + propName: string, + warning: string, + key?: string, +): void => { + let value = obj[propName]; + Object.defineProperty(obj, propName, { + get() { + deprecated(propName, warning, key); + return value; + }, + set(v: unknown) { + value = v; + }, + }); }; From 0c32d41d9a7bef40a5d37ff1559a83b0285212d8 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 14:18:24 +0300 Subject: [PATCH 02/13] chore(clerk-js): Warn about orgs jwt claim deprecation --- packages/clerk-js/src/utils/jwt.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/clerk-js/src/utils/jwt.ts b/packages/clerk-js/src/utils/jwt.ts index eb89046e664..2177dbd4c0b 100644 --- a/packages/clerk-js/src/utils/jwt.ts +++ b/packages/clerk-js/src/utils/jwt.ts @@ -1,3 +1,4 @@ +import { deprecatedObjectProperty } from '@clerk/shared'; import type { JWT, JWTClaims } from '@clerk/types'; import { urlDecodeB64 } from './encoders'; @@ -17,9 +18,18 @@ export function decode(token: string): JWT { claims[k] = payloadJSON[k]; }); - return { + const decodedToken = { encoded: { header, payload, signature }, header: JSON.parse(urlDecodeB64(header)), claims, }; + + deprecatedObjectProperty( + decodedToken, + 'orgs', + 'Add orgs to your session token using the "user.organizations" shortcode in JWT Templates instead.', + 'decode:orgs', + ); + + return decodedToken; } From 033ed9096d1f5215b6e187053b2d5662ae7ff4aa Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 14:37:57 +0300 Subject: [PATCH 03/13] chore(backend): Warn about orgs jwt claim deprecation --- packages/backend/src/tokens/jwt/verifyJwt.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/backend/src/tokens/jwt/verifyJwt.ts b/packages/backend/src/tokens/jwt/verifyJwt.ts index c22321f2606..de0c64067fc 100644 --- a/packages/backend/src/tokens/jwt/verifyJwt.ts +++ b/packages/backend/src/tokens/jwt/verifyJwt.ts @@ -1,3 +1,4 @@ +import { deprecatedObjectProperty } from '@clerk/shared'; import type { Jwt, JwtPayload } from '@clerk/types'; // DO NOT CHANGE: Runtime needs to be imported as a default export so that we can stub its dependencies with Sinon.js @@ -85,6 +86,13 @@ export function decodeJwt(token: string): Jwt { const payload = JSON.parse(decoder.decode(base64url.parse(rawPayload, { loose: true }))); const signature = base64url.parse(rawSignature, { loose: true }); + deprecatedObjectProperty( + payload, + 'orgs', + 'Add orgs to your session token using the "user.organizations" shortcode in JWT Templates instead.', + 'decodeJwt:orgs', + ); + return { header, payload, From d0c669b6f1a97430cede1be6133d1b04095c1cea Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 14:38:20 +0300 Subject: [PATCH 04/13] chore(backend): Warn about apiKey deprecation --- packages/backend/src/tokens/authObjects.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/backend/src/tokens/authObjects.ts b/packages/backend/src/tokens/authObjects.ts index dcdfce2c0ab..bd2e5bcb725 100644 --- a/packages/backend/src/tokens/authObjects.ts +++ b/packages/backend/src/tokens/authObjects.ts @@ -1,3 +1,4 @@ +import { deprecated } from '@clerk/shared'; import type { ActClaim, JwtPayload, ServerGetToken, ServerGetTokenOptions } from '@clerk/types'; import type { Organization, Session, User } from '../api'; @@ -80,6 +81,10 @@ export function signedInAuthObject( } = sessionClaims; const { apiKey, secretKey, apiUrl, apiVersion, token, session, user, organization } = options; + if (apiKey) { + deprecated('apiKey', 'Use `secretKey` instead.'); + } + const { sessions } = createBackendApiClient({ apiKey, secretKey, @@ -110,6 +115,10 @@ export function signedInAuthObject( } export function signedOutAuthObject(debugData?: AuthObjectDebugData): SignedOutAuthObject { + if (debugData?.apiKey) { + deprecated('apiKey', 'Use `secretKey` instead.'); + } + return { sessionClaims: null, sessionId: null, From 225e3ef9117017c6b249c06dd6c1702bdb5f15d0 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 19:00:04 +0300 Subject: [PATCH 05/13] chore(backend): Fix typo in frontendApi deprecation warning --- packages/backend/src/redirections.ts | 2 +- packages/backend/src/tokens/interstitial.ts | 6 +++--- packages/backend/src/tokens/request.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/backend/src/redirections.ts b/packages/backend/src/redirections.ts index d5a96877774..7a6f2dbcaf2 100644 --- a/packages/backend/src/redirections.ts +++ b/packages/backend/src/redirections.ts @@ -40,7 +40,7 @@ export function redirect({ redirectAdapter, signUpUrl, signInUrl, frontendApi, p if (!frontendApi) { frontendApi = parsePublishableKey(publishableKey)?.frontendApi; } else { - deprecated('frontentApi', 'Use `publishableKey` instead.'); + deprecated('frontendApi', 'Use `publishableKey` instead.'); } const accountsBaseUrl = buildAccountsBaseUrl(frontendApi); diff --git a/packages/backend/src/tokens/interstitial.ts b/packages/backend/src/tokens/interstitial.ts index 64721a06db8..5d0e1b93d84 100644 --- a/packages/backend/src/tokens/interstitial.ts +++ b/packages/backend/src/tokens/interstitial.ts @@ -35,7 +35,7 @@ export type LoadInterstitialOptions = { export function loadInterstitialFromLocal(options: Omit) { if (options.frontendApi) { - deprecated('frontentApi', 'Use `publishableKey` instead.'); + deprecated('frontendApi', 'Use `publishableKey` instead.'); } if (options.pkgVersion) { deprecated('pkgVersion', 'Use `clerkJSVersion` instead.'); @@ -135,7 +135,7 @@ export function loadInterstitialFromLocal(options: Omit Date: Mon, 2 Oct 2023 19:10:00 +0300 Subject: [PATCH 06/13] chore(clerk-react,clerk-js): Warn about PublishableKeyOrFrontendApi.frontendApi deprecations --- packages/clerk-js/src/core/clerk.ts | 2 ++ packages/react/src/contexts/ClerkContextProvider.tsx | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 79cc54dd11f..d34eddc8ebe 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -245,6 +245,8 @@ export default class Clerk implements ClerkInterface { this.#proxyUrl = options?.proxyUrl; if (isLegacyFrontendApiKey(key)) { + deprecated('frontendApi', 'Use `publishableKey` instead.'); + if (!validateFrontendApi(key)) { errorThrower.throwInvalidFrontendApiError({ key }); } diff --git a/packages/react/src/contexts/ClerkContextProvider.tsx b/packages/react/src/contexts/ClerkContextProvider.tsx index 5973c955761..84948aff116 100644 --- a/packages/react/src/contexts/ClerkContextProvider.tsx +++ b/packages/react/src/contexts/ClerkContextProvider.tsx @@ -1,3 +1,4 @@ +import { deprecated } from '@clerk/shared'; import type { ClientResource, InitialState, Resources } from '@clerk/types'; import React from 'react'; @@ -23,6 +24,10 @@ export function ClerkContextProvider(props: ClerkContextProvider): JSX.Element | const { isomorphicClerkOptions, initialState, children } = props; const { isomorphicClerk: clerk, loaded: clerkLoaded } = useLoadedIsomorphicClerk(isomorphicClerkOptions); + if (isomorphicClerkOptions.frontendApi) { + deprecated('frontendApi', 'Use `publishableKey` instead.'); + } + const [state, setState] = React.useState({ client: clerk.client as ClientResource, session: clerk.session, From 4e78724fe67377ba03ce96fb0a733e428d8d63fd Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 19:28:29 +0300 Subject: [PATCH 07/13] chore(clerk-js): Warn about PublicUserData.profileImageUrl deprecations --- .../clerk-js/src/core/resources/Session.ts | 11 ++++-- .../core/resources/SessionPublicUserData.ts | 36 +++++++++++++++++++ .../clerk-js/src/core/resources/internal.ts | 1 + 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 packages/clerk-js/src/core/resources/SessionPublicUserData.ts diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index 2781c6a544e..2ed0e57b54e 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -1,5 +1,5 @@ import { is4xxError } from '@clerk/shared'; -import { deepSnakeToCamel, runWithExponentialBackOff } from '@clerk/shared'; +import { runWithExponentialBackOff } from '@clerk/shared'; import type { ActJWTClaim, GetToken, @@ -15,7 +15,7 @@ import type { import { unixEpochToDate } from '../../utils/date'; import { eventBus, events } from '../events'; import { SessionTokenCache } from '../tokenCache'; -import { BaseResource, Token, User } from './internal'; +import { BaseResource, SessionPublicUserData, Token, User } from './internal'; export class Session extends BaseResource implements SessionResource { pathRoot = '/client/sessions'; @@ -138,8 +138,13 @@ export class Session extends BaseResource implements SessionResource { this.createdAt = unixEpochToDate(data.created_at); this.updatedAt = unixEpochToDate(data.updated_at); this.user = new User(data.user); - this.publicUserData = deepSnakeToCamel(data.public_user_data) as PublicUserData; + + if (data.public_user_data) { + this.publicUserData = new SessionPublicUserData(data.public_user_data); + } + this.lastActiveToken = data.last_active_token ? new Token(data.last_active_token) : null; + return this; } diff --git a/packages/clerk-js/src/core/resources/SessionPublicUserData.ts b/packages/clerk-js/src/core/resources/SessionPublicUserData.ts new file mode 100644 index 00000000000..978c8f7a712 --- /dev/null +++ b/packages/clerk-js/src/core/resources/SessionPublicUserData.ts @@ -0,0 +1,36 @@ +import { deprecatedProperty } from '@clerk/shared'; +import type { PublicUserData } from '@clerk/types'; +import type { PublicUserDataJSON } from '@clerk/types'; + +export class SessionPublicUserData implements PublicUserData { + firstName!: string | null; + lastName!: string | null; + /** + * @deprecated Use `imageUrl` instead. + */ + profileImageUrl!: string; + imageUrl!: string; + hasImage!: boolean; + identifier!: string; + userId?: string; + + constructor(data: PublicUserDataJSON) { + this.fromJSON(data); + } + + protected fromJSON(data: PublicUserDataJSON | null): this { + if (data) { + this.firstName = data.first_name; + this.lastName = data.last_name; + this.profileImageUrl = data.profile_image_url; + this.imageUrl = data.image_url; + this.hasImage = data.has_image; + this.identifier = data.identifier; + this.userId = data.user_id; + } + + return this; + } +} + +deprecatedProperty(SessionPublicUserData, 'profileImageUrl', 'Use `imageUrl` instead.'); diff --git a/packages/clerk-js/src/core/resources/internal.ts b/packages/clerk-js/src/core/resources/internal.ts index f7189e6b0a6..40430f55dad 100644 --- a/packages/clerk-js/src/core/resources/internal.ts +++ b/packages/clerk-js/src/core/resources/internal.ts @@ -21,6 +21,7 @@ export * from './OrganizationPublicUserData'; export * from './OrganizationSuggestion'; export * from './SamlAccount'; export * from './Session'; +export * from './SessionPublicUserData'; export * from './SessionWithActivities'; export * from './SignIn'; export * from './SignUp'; From 0c04f1f9aff4b6ca51c9eebb19a5add60c7de4b4 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 20:16:45 +0300 Subject: [PATCH 08/13] chore(clerk-js): Warn about redirect_url deprecations --- packages/clerk-js/src/core/resources/User.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/clerk-js/src/core/resources/User.ts b/packages/clerk-js/src/core/resources/User.ts index 8c46dca10a3..94284e6b1b6 100644 --- a/packages/clerk-js/src/core/resources/User.ts +++ b/packages/clerk-js/src/core/resources/User.ts @@ -1,3 +1,4 @@ +import { deprecated } from '@clerk/shared'; import { deprecatedProperty } from '@clerk/shared'; import type { BackupCodeJSON, @@ -154,6 +155,9 @@ export class User extends BaseResource implements UserResource { createExternalAccount = async (params: CreateExternalAccountParams): Promise => { const { strategy, redirectUrl, additionalScopes, redirect_url } = params || {}; + if (redirect_url) { + deprecated('redirect_url', 'Use `redirectUrl` instead.'); + } const json = ( await BaseResource._fetch({ From 41d8871e334446208d1f212c69a68f4be004dafb Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 20:21:35 +0300 Subject: [PATCH 09/13] chore(clerk-js): Warn about password deprecations in User.update --- packages/clerk-js/src/core/resources/User.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/clerk-js/src/core/resources/User.ts b/packages/clerk-js/src/core/resources/User.ts index 94284e6b1b6..31898f8b75b 100644 --- a/packages/clerk-js/src/core/resources/User.ts +++ b/packages/clerk-js/src/core/resources/User.ts @@ -220,6 +220,12 @@ export class User extends BaseResource implements UserResource { }; update = (params: UpdateUserParams): Promise => { + if (params.password) { + deprecated( + 'password', + 'This will be removed in the next major version. Please use `updatePassword(params)` instead.', + ); + } return this._basePatch({ body: normalizeUnsafeMetadata(params), }); From 31f7217621f9865a3f179a7053ac33e00291cbf7 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 20:24:33 +0300 Subject: [PATCH 10/13] chore(clerk-js): Warn about generateSignature deprecations --- packages/clerk-js/src/core/resources/SignUp.ts | 6 +++++- packages/clerk-js/src/core/resources/Web3Wallet.ts | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 381a9c458a8..ed63e4feb28 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -1,4 +1,4 @@ -import { Poller } from '@clerk/shared'; +import { deprecated, Poller } from '@clerk/shared'; import type { AttemptEmailAddressVerificationParams, AttemptPhoneNumberVerificationParams, @@ -161,6 +161,10 @@ export class SignUp extends BaseResource implements SignUpResource { attemptWeb3WalletVerification = async (params: AttemptWeb3WalletVerificationParams): Promise => { const { signature, generateSignature } = params || {}; + if (generateSignature) { + deprecated('generateSignature', 'Use signature field instead.'); + } + if (signature) { return this.attemptVerification({ signature, strategy: 'web3_metamask_signature' }); } diff --git a/packages/clerk-js/src/core/resources/Web3Wallet.ts b/packages/clerk-js/src/core/resources/Web3Wallet.ts index f5e58253e8e..3359495db58 100644 --- a/packages/clerk-js/src/core/resources/Web3Wallet.ts +++ b/packages/clerk-js/src/core/resources/Web3Wallet.ts @@ -1,3 +1,4 @@ +import { deprecated } from '@clerk/shared'; import type { AttemptWeb3WalletVerificationParams, PrepareWeb3WalletVerificationParams, @@ -37,6 +38,10 @@ export class Web3Wallet extends BaseResource implements Web3WalletResource { attemptVerification = (params: AttemptWeb3WalletVerificationParams): Promise => { const { signature, generateSignature } = params || {}; + if (generateSignature) { + deprecated('generateSignature', 'Use signature field instead.'); + } + if (signature) { return this._basePost({ action: 'attempt_verification', From c60c9c292eea9c9d9b42c36b38ead206077381e9 Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Mon, 2 Oct 2023 20:27:16 +0300 Subject: [PATCH 11/13] chore(clerk-js): Warn about afterSwitchOrganizationUrl deprecation --- packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx index 98ed7863ed2..07ef3640e9c 100644 --- a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx +++ b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx @@ -1,4 +1,4 @@ -import { snakeToCamel } from '@clerk/shared'; +import { deprecated, snakeToCamel } from '@clerk/shared'; import type { OrganizationResource, UserResource } from '@clerk/types'; import React, { useMemo } from 'react'; @@ -294,6 +294,7 @@ export const useOrganizationSwitcherContext = () => { // Continue to support afterSwitchOrganizationUrl if (ctx.afterSwitchOrganizationUrl) { + deprecated('afterSwitchOrganizationUrl', 'Use `afterSelectOrganizationUrl` or `afterSelectPersonalUrl`'); return navigate(ctx.afterSwitchOrganizationUrl); } From e2921159446d8cdd8f79611a3d828f96eda1a1bd Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Tue, 3 Oct 2023 17:04:12 +0300 Subject: [PATCH 12/13] chore(clerk-js): Warn about UserData.profileImageUrl deprecations --- .../clerk-js/src/core/resources/SignIn.ts | 8 ++--- .../clerk-js/src/core/resources/UserData.ts | 32 +++++++++++++++++++ .../clerk-js/src/core/resources/internal.ts | 1 + 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 packages/clerk-js/src/core/resources/UserData.ts diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index a1baac6d799..98597309a32 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -22,7 +22,7 @@ import type { SignInSecondFactor, SignInStartMagicLinkFlowParams, SignInStatus, - UserData, + UserData as IUserData, VerificationResource, Web3SignatureConfig, Web3SignatureFactor, @@ -37,7 +37,7 @@ import { clerkVerifyEmailAddressCalledBeforeCreate, clerkVerifyWeb3WalletCalledBeforeCreate, } from '../errors'; -import { BaseResource, Verification } from './internal'; +import { BaseResource, UserData, Verification } from './internal'; export class SignIn extends BaseResource implements SignInResource { pathRoot = '/client/sign_ins'; @@ -51,7 +51,7 @@ export class SignIn extends BaseResource implements SignInResource { secondFactorVerification: VerificationResource = new Verification(null); identifier: string | null = null; createdSessionId: string | null = null; - userData: UserData = {}; + userData: IUserData = {}; constructor(data: SignInJSON | null = null) { super(); @@ -255,7 +255,7 @@ export class SignIn extends BaseResource implements SignInResource { this.firstFactorVerification = new Verification(data.first_factor_verification); this.secondFactorVerification = new Verification(data.second_factor_verification); this.createdSessionId = data.created_session_id; - this.userData = deepSnakeToCamel(data.user_data || {}) as UserData; + this.userData = new UserData(data.user_data); } return this; } diff --git a/packages/clerk-js/src/core/resources/UserData.ts b/packages/clerk-js/src/core/resources/UserData.ts new file mode 100644 index 00000000000..d1871fa5038 --- /dev/null +++ b/packages/clerk-js/src/core/resources/UserData.ts @@ -0,0 +1,32 @@ +import { deprecatedProperty } from '@clerk/shared'; +import type { UserData as IUserData } from '@clerk/types'; +import type { UserDataJSON as IUserDataJSON } from '@clerk/types'; + +export class UserData implements IUserData { + firstName?: string; + lastName?: string; + /** + * @deprecated Use `imageUrl` instead. + */ + profileImageUrl?: string; + imageUrl: string; + hasImage: boolean; + + constructor(data: IUserDataJSON) { + this.fromJSON(data); + } + + protected fromJSON(data: IUserDataJSON | null): this { + if (data) { + this.firstName = data.first_name; + this.lastName = data.last_name; + this.profileImageUrl = data.profile_image_url; + this.imageUrl = data.image_url; + this.hasImage = data.has_image; + } + + return this; + } +} + +deprecatedProperty(UserData, 'profileImageUrl', 'Use `imageUrl` instead.'); diff --git a/packages/clerk-js/src/core/resources/internal.ts b/packages/clerk-js/src/core/resources/internal.ts index 40430f55dad..b3095680925 100644 --- a/packages/clerk-js/src/core/resources/internal.ts +++ b/packages/clerk-js/src/core/resources/internal.ts @@ -24,6 +24,7 @@ export * from './Session'; export * from './SessionPublicUserData'; export * from './SessionWithActivities'; export * from './SignIn'; +export * from './UserData'; export * from './SignUp'; export * from './Token'; export * from './TOTP'; From 10fb8260bb11e5e7586f78668ac820ea4b61de3e Mon Sep 17 00:00:00 2001 From: Dimitris Klouvas Date: Tue, 3 Oct 2023 18:10:22 +0300 Subject: [PATCH 13/13] chore(clerk-js): Use PublicUserData and UserData instead of multiple *UserData classes --- .changeset/eighty-cobras-matter.md | 17 +++++++++ .../core/resources/OrganizationMembership.ts | 5 ++- .../OrganizationMembershipRequest.ts | 6 ++-- .../resources/OrganizationPublicUserData.ts | 36 ------------------- ...ionPublicUserData.ts => PublicUserData.ts} | 6 ++-- .../clerk-js/src/core/resources/Session.ts | 6 ++-- .../clerk-js/src/core/resources/SignIn.ts | 3 +- .../clerk-js/src/core/resources/UserData.ts | 10 +++--- .../OrganizationMembership.test.ts.snap | 2 +- ...OrganizationMembershipRequest.test.ts.snap | 2 +- .../clerk-js/src/core/resources/internal.ts | 3 +- 11 files changed, 37 insertions(+), 59 deletions(-) create mode 100644 .changeset/eighty-cobras-matter.md delete mode 100644 packages/clerk-js/src/core/resources/OrganizationPublicUserData.ts rename packages/clerk-js/src/core/resources/{SessionPublicUserData.ts => PublicUserData.ts} (79%) diff --git a/.changeset/eighty-cobras-matter.md b/.changeset/eighty-cobras-matter.md new file mode 100644 index 00000000000..ffc96feab5c --- /dev/null +++ b/.changeset/eighty-cobras-matter.md @@ -0,0 +1,17 @@ +--- +'@clerk/clerk-js': patch +'@clerk/backend': patch +'@clerk/shared': patch +'@clerk/clerk-react': patch +--- + +Apply deprecation warnings for @clerk/types: + +- `orgs` jwt claims +- `apiKey` +- `frontendApi` +- `redirect_url` +- `password` +- `generateSignature` +- `afterSwitchOrganizationUrl` +- `profileImageUrl` diff --git a/packages/clerk-js/src/core/resources/OrganizationMembership.ts b/packages/clerk-js/src/core/resources/OrganizationMembership.ts index 3dbdea9d23a..5e48c918703 100644 --- a/packages/clerk-js/src/core/resources/OrganizationMembership.ts +++ b/packages/clerk-js/src/core/resources/OrganizationMembership.ts @@ -6,12 +6,11 @@ import type { MembershipRole, OrganizationMembershipJSON, OrganizationMembershipResource, - PublicUserData, } from '@clerk/types'; import { unixEpochToDate } from '../../utils/date'; import { convertPageToOffset } from '../../utils/pagesToOffset'; -import { BaseResource, Organization, OrganizationPublicUserData } from './internal'; +import { BaseResource, Organization, PublicUserData } from './internal'; export class OrganizationMembership extends BaseResource implements OrganizationMembershipResource { id!: string; @@ -105,7 +104,7 @@ export class OrganizationMembership extends BaseResource implements Organization this.organization = new Organization(data.organization); this.publicMetadata = data.public_metadata; if (data.public_user_data) { - this.publicUserData = new OrganizationPublicUserData(data.public_user_data); + this.publicUserData = new PublicUserData(data.public_user_data); } this.role = data.role; this.createdAt = unixEpochToDate(data.created_at); diff --git a/packages/clerk-js/src/core/resources/OrganizationMembershipRequest.ts b/packages/clerk-js/src/core/resources/OrganizationMembershipRequest.ts index 1b42b3aca26..398938aeee4 100644 --- a/packages/clerk-js/src/core/resources/OrganizationMembershipRequest.ts +++ b/packages/clerk-js/src/core/resources/OrganizationMembershipRequest.ts @@ -1,8 +1,8 @@ -import type { OrganizationInvitationStatus, OrganizationMembershipRequestResource, PublicUserData } from '@clerk/types'; +import type { OrganizationInvitationStatus, OrganizationMembershipRequestResource } from '@clerk/types'; import type { OrganizationMembershipRequestJSON } from '@clerk/types'; import { unixEpochToDate } from '../../utils/date'; -import { BaseResource, OrganizationPublicUserData } from './internal'; +import { BaseResource, PublicUserData } from './internal'; export class OrganizationMembershipRequest extends BaseResource implements OrganizationMembershipRequestResource { id!: string; @@ -37,7 +37,7 @@ export class OrganizationMembershipRequest extends BaseResource implements Organ this.createdAt = unixEpochToDate(data.created_at); this.updatedAt = unixEpochToDate(data.updated_at); if (data.public_user_data) { - this.publicUserData = new OrganizationPublicUserData(data.public_user_data); + this.publicUserData = new PublicUserData(data.public_user_data); } } return this; diff --git a/packages/clerk-js/src/core/resources/OrganizationPublicUserData.ts b/packages/clerk-js/src/core/resources/OrganizationPublicUserData.ts deleted file mode 100644 index 97e7fcb3ae6..00000000000 --- a/packages/clerk-js/src/core/resources/OrganizationPublicUserData.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { deprecatedProperty } from '@clerk/shared'; -import type { PublicUserData } from '@clerk/types'; -import type { PublicUserDataJSON } from '@clerk/types'; - -export class OrganizationPublicUserData implements PublicUserData { - firstName!: string | null; - lastName!: string | null; - /** - * @deprecated Use `imageUrl` instead. - */ - profileImageUrl!: string; - imageUrl!: string; - hasImage!: boolean; - identifier!: string; - userId?: string; - - constructor(data: PublicUserDataJSON) { - this.fromJSON(data); - } - - protected fromJSON(data: PublicUserDataJSON | null): this { - if (data) { - this.firstName = data.first_name; - this.lastName = data.last_name; - this.profileImageUrl = data.profile_image_url; - this.imageUrl = data.image_url; - this.hasImage = data.has_image; - this.identifier = data.identifier; - this.userId = data.user_id; - } - - return this; - } -} - -deprecatedProperty(OrganizationPublicUserData, 'profileImageUrl', 'Use `imageUrl` instead.'); diff --git a/packages/clerk-js/src/core/resources/SessionPublicUserData.ts b/packages/clerk-js/src/core/resources/PublicUserData.ts similarity index 79% rename from packages/clerk-js/src/core/resources/SessionPublicUserData.ts rename to packages/clerk-js/src/core/resources/PublicUserData.ts index 978c8f7a712..a3de715ab78 100644 --- a/packages/clerk-js/src/core/resources/SessionPublicUserData.ts +++ b/packages/clerk-js/src/core/resources/PublicUserData.ts @@ -1,8 +1,8 @@ import { deprecatedProperty } from '@clerk/shared'; -import type { PublicUserData } from '@clerk/types'; +import type { PublicUserData as IPublicUserData } from '@clerk/types'; import type { PublicUserDataJSON } from '@clerk/types'; -export class SessionPublicUserData implements PublicUserData { +export class PublicUserData implements IPublicUserData { firstName!: string | null; lastName!: string | null; /** @@ -33,4 +33,4 @@ export class SessionPublicUserData implements PublicUserData { } } -deprecatedProperty(SessionPublicUserData, 'profileImageUrl', 'Use `imageUrl` instead.'); +deprecatedProperty(PublicUserData, 'profileImageUrl', 'Use `imageUrl` instead.'); diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index 2ed0e57b54e..94e45efa2c3 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -4,7 +4,6 @@ import type { ActJWTClaim, GetToken, GetTokenOptions, - PublicUserData, SessionJSON, SessionResource, SessionStatus, @@ -15,7 +14,8 @@ import type { import { unixEpochToDate } from '../../utils/date'; import { eventBus, events } from '../events'; import { SessionTokenCache } from '../tokenCache'; -import { BaseResource, SessionPublicUserData, Token, User } from './internal'; +import { PublicUserData } from './internal'; +import { BaseResource, Token, User } from './internal'; export class Session extends BaseResource implements SessionResource { pathRoot = '/client/sessions'; @@ -140,7 +140,7 @@ export class Session extends BaseResource implements SessionResource { this.user = new User(data.user); if (data.public_user_data) { - this.publicUserData = new SessionPublicUserData(data.public_user_data); + this.publicUserData = new PublicUserData(data.public_user_data); } this.lastActiveToken = data.last_active_token ? new Token(data.last_active_token) : null; diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 98597309a32..42f930937ff 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -22,7 +22,6 @@ import type { SignInSecondFactor, SignInStartMagicLinkFlowParams, SignInStatus, - UserData as IUserData, VerificationResource, Web3SignatureConfig, Web3SignatureFactor, @@ -51,7 +50,7 @@ export class SignIn extends BaseResource implements SignInResource { secondFactorVerification: VerificationResource = new Verification(null); identifier: string | null = null; createdSessionId: string | null = null; - userData: IUserData = {}; + userData!: UserData; constructor(data: SignInJSON | null = null) { super(); diff --git a/packages/clerk-js/src/core/resources/UserData.ts b/packages/clerk-js/src/core/resources/UserData.ts index d1871fa5038..f19e284d24e 100644 --- a/packages/clerk-js/src/core/resources/UserData.ts +++ b/packages/clerk-js/src/core/resources/UserData.ts @@ -1,6 +1,6 @@ import { deprecatedProperty } from '@clerk/shared'; import type { UserData as IUserData } from '@clerk/types'; -import type { UserDataJSON as IUserDataJSON } from '@clerk/types'; +import type { UserDataJSON } from '@clerk/types'; export class UserData implements IUserData { firstName?: string; @@ -9,14 +9,14 @@ export class UserData implements IUserData { * @deprecated Use `imageUrl` instead. */ profileImageUrl?: string; - imageUrl: string; - hasImage: boolean; + imageUrl?: string; + hasImage?: boolean; - constructor(data: IUserDataJSON) { + constructor(data: UserDataJSON) { this.fromJSON(data); } - protected fromJSON(data: IUserDataJSON | null): this { + protected fromJSON(data: UserDataJSON | null): this { if (data) { this.firstName = data.first_name; this.lastName = data.last_name; diff --git a/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembership.test.ts.snap b/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembership.test.ts.snap index 9dc12dad159..d0d745fea4e 100644 --- a/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembership.test.ts.snap +++ b/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembership.test.ts.snap @@ -41,7 +41,7 @@ OrganizationMembership { "publicMetadata": { "foo": "bar", }, - "publicUserData": OrganizationPublicUserData { + "publicUserData": PublicUserData { "firstName": "test_first_name", "hasImage": true, "identifier": "test@identifier.gr", diff --git a/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembershipRequest.test.ts.snap b/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembershipRequest.test.ts.snap index f448ff58318..57cabd7dc00 100644 --- a/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembershipRequest.test.ts.snap +++ b/packages/clerk-js/src/core/resources/__snapshots__/OrganizationMembershipRequest.test.ts.snap @@ -7,7 +7,7 @@ OrganizationMembershipRequest { "id": "test_id", "organizationId": "test_org_id", "pathRoot": "", - "publicUserData": OrganizationPublicUserData { + "publicUserData": PublicUserData { "firstName": "test_first_name", "hasImage": true, "identifier": "test@identifier.gr", diff --git a/packages/clerk-js/src/core/resources/internal.ts b/packages/clerk-js/src/core/resources/internal.ts index b3095680925..77986c11b22 100644 --- a/packages/clerk-js/src/core/resources/internal.ts +++ b/packages/clerk-js/src/core/resources/internal.ts @@ -17,11 +17,10 @@ export * from './OrganizationDomain'; export * from './OrganizationInvitation'; export * from './OrganizationMembership'; export * from './OrganizationMembershipRequest'; -export * from './OrganizationPublicUserData'; export * from './OrganizationSuggestion'; export * from './SamlAccount'; export * from './Session'; -export * from './SessionPublicUserData'; +export * from './PublicUserData'; export * from './SessionWithActivities'; export * from './SignIn'; export * from './UserData';