Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: clerk/javascript
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: @clerk/themes@2.2.22
Choose a base ref
...
head repository: clerk/javascript
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: @clerk/themes@2.2.23
Choose a head ref
  • 14 commits
  • 104 files changed
  • 10 contributors

Commits on Mar 19, 2025

  1. fix(backend): Handle Basic auth gracefully (#5395)

    jacekradko authored Mar 19, 2025
    Copy the full SHA
    facefaf View commit details
  2. chore(repo): Add @clerk/tanstack-start to changesets ignored packag…

    …es (#5342)
    wobsoriano authored Mar 19, 2025
    Copy the full SHA
    ea7ce70 View commit details
  3. test(vue): Get exact selector when testing Organization Profile custo…

    …m pages and links (#5400)
    wobsoriano authored Mar 19, 2025
    Copy the full SHA
    5c0954b View commit details
  4. fix(clerk-js): Add color to bundlewatch output (#5401)

    jacekradko authored Mar 19, 2025
    Copy the full SHA
    2439736 View commit details

Commits on Mar 20, 2025

  1. chore(clerk-expo): Make publishableKey prop type optional (#5399)

    wobsoriano authored Mar 20, 2025
    Copy the full SHA
    457ac5a View commit details
  2. chore(repo): Modify Typedoc union type output (#5403)

    LekoArts authored Mar 20, 2025
    Copy the full SHA
    b6a4735 View commit details
  3. fix(clerk-js): Show unverified fields if any when ToS is enabled (#5404)

    Co-authored-by: panteliselef <panteliselef@outlook.com>
    octoper and panteliselef authored Mar 20, 2025
    Copy the full SHA
    f59a90b View commit details

Commits on Mar 21, 2025

  1. fix(clerk-js): Ensure window.Clerk is only ever assigned once (#5406)

    brkalow authored Mar 21, 2025
    Copy the full SHA
    598d1ce View commit details
  2. feat(clerk-js,clerk-react,types): Navigate to next task (#5377)

    LauraBeatris authored Mar 21, 2025
    Copy the full SHA
    3910ebe View commit details
  3. chore(nextjs): Refactor keyless orchestration (#5389)

    panteliselef authored Mar 21, 2025

    Verified

    This commit was created on GitHub.com and signed with GitHub’s verified signature.
    Copy the full SHA
    9dfaade View commit details
  4. feat(clerk-js,shared): Refactor useReverification to support custom U…

    …Is (#5396)
    octoper authored Mar 21, 2025
    Copy the full SHA
    e513333 View commit details
  5. fix(clerk-js): Create client from jwt only on network errors or 5xx (#…

    panteliselef authored Mar 21, 2025
    Copy the full SHA
    841a180 View commit details
  6. fix(clerk-js): Lazily load BillingPage in UserProfile (#5409)

    Co-authored-by: Bryce Kalow <bryce@clerk.dev>
    Co-authored-by: panteliselef <panteliselef@outlook.com>
    3 people authored Mar 21, 2025
    Copy the full SHA
    591648f View commit details
  7. ci(repo): Version packages (#5398)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    clerk-cookie and github-actions[bot] authored Mar 21, 2025
    Copy the full SHA
    c9f7ca7 View commit details
Showing with 1,298 additions and 406 deletions.
  1. +2 −1 .changeset/config.json
  2. +22 −0 .typedoc/custom-theme.mjs
  3. +1 −1 ...ration/templates/next-app-router/src/app/(reverification)/action-with-use-reverification/page.tsx
  4. +9 −0 integration/testUtils/index.ts
  5. +25 −0 integration/testUtils/organizationsService.ts
  6. +26 −0 integration/testUtils/sessionTaskPageObject.ts
  7. +59 −0 integration/tests/resiliency.test.ts
  8. +0 −3 integration/tests/reverification.test.ts
  9. +14 −3 integration/tests/session-tasks-sign-in.test.ts
  10. +25 −9 integration/tests/session-tasks-sign-up.test.ts
  11. +9 −6 integration/tests/vue/components.test.ts
  12. +9 −0 packages/agent-toolkit/CHANGELOG.md
  13. +1 −1 packages/agent-toolkit/package.json
  14. +9 −0 packages/astro/CHANGELOG.md
  15. +1 −1 packages/astro/package.json
  16. +10 −0 packages/backend/CHANGELOG.md
  17. +1 −1 packages/backend/package.json
  18. +27 −3 packages/backend/src/tokens/__tests__/request.test.ts
  19. +21 −5 packages/backend/src/tokens/authenticateContext.ts
  20. +9 −0 packages/chrome-extension/CHANGELOG.md
  21. +1 −1 packages/chrome-extension/package.json
  22. +89 −0 packages/clerk-js/CHANGELOG.md
  23. +6 −5 packages/clerk-js/bundlewatch.config.json
  24. +2 −2 packages/clerk-js/package.json
  25. +97 −0 packages/clerk-js/src/core/__tests__/clerk.test.ts
  26. +65 −30 packages/clerk-js/src/core/clerk.ts
  27. +8 −11 packages/clerk-js/src/core/sessionTasks.ts
  28. +8 −5 packages/clerk-js/src/index.browser.ts
  29. +7 −5 packages/clerk-js/src/index.headless.browser.ts
  30. +1 −1 packages/clerk-js/src/ui/common/RemoveResourceForm.tsx
  31. +4 −1 packages/clerk-js/src/ui/components/OrganizationList/OrganizationListPage.tsx
  32. +8 −0 packages/clerk-js/src/ui/components/OrganizationList/UserMembershipList.tsx
  33. +31 −5 packages/clerk-js/src/ui/components/SessionTask/SessionTask.tsx
  34. +11 −5 packages/clerk-js/src/ui/components/SignIn/SignIn.tsx
  35. +7 −4 packages/clerk-js/src/ui/components/SignUp/SignUp.tsx
  36. +8 −3 packages/clerk-js/src/ui/components/SignUp/SignUpContinue.tsx
  37. +17 −0 packages/clerk-js/src/ui/components/SignUp/__tests__/SignUpContinue.test.tsx
  38. +11 −15 packages/clerk-js/src/ui/components/UserProfile/ActiveDevicesSection.tsx
  39. +1 −1 packages/clerk-js/src/ui/components/UserProfile/AddAuthenticatorApp.tsx
  40. +1 −1 packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsMenu.tsx
  41. +1 −1 packages/clerk-js/src/ui/components/UserProfile/ConnectedAccountsSection.tsx
  42. +1 −1 packages/clerk-js/src/ui/components/UserProfile/DeleteUserForm.tsx
  43. +1 −1 packages/clerk-js/src/ui/components/UserProfile/EmailForm.tsx
  44. +1 −1 packages/clerk-js/src/ui/components/UserProfile/EmailsSection.tsx
  45. +10 −3 packages/clerk-js/src/ui/components/UserProfile/MfaBackupCodeCreateForm.tsx
  46. +2 −2 packages/clerk-js/src/ui/components/UserProfile/MfaPhoneCodeScreen.tsx
  47. +1 −1 packages/clerk-js/src/ui/components/UserProfile/PasskeySection.tsx
  48. +1 −1 packages/clerk-js/src/ui/components/UserProfile/PasswordForm.tsx
  49. +1 −1 packages/clerk-js/src/ui/components/UserProfile/PhoneForm.tsx
  50. +11 −2 packages/clerk-js/src/ui/components/UserProfile/UserProfileRoutes.tsx
  51. +1 −1 packages/clerk-js/src/ui/components/UserProfile/UsernameForm.tsx
  52. +8 −5 packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx
  53. +1 −1 packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx
  54. +5 −0 packages/clerk-js/src/ui/contexts/components/SessionTask.ts
  55. +4 −0 packages/clerk-js/src/ui/types.ts
  56. +18 −1 packages/clerk-js/src/ui/utils/test/fixtureHelpers.ts
  57. +9 −0 packages/clerk-js/src/utils/beforeUnloadTracker.ts
  58. +9 −0 packages/elements/CHANGELOG.md
  59. +1 −1 packages/elements/package.json
  60. +8 −0 packages/expo-passkeys/CHANGELOG.md
  61. +1 −1 packages/expo-passkeys/package.json
  62. +12 −0 packages/expo/CHANGELOG.md
  63. +1 −1 packages/expo/package.json
  64. +7 −1 packages/expo/src/provider/ClerkProvider.tsx
  65. +9 −0 packages/express/CHANGELOG.md
  66. +1 −1 packages/express/package.json
  67. +9 −0 packages/fastify/CHANGELOG.md
  68. +1 −1 packages/fastify/package.json
  69. +7 −0 packages/localizations/CHANGELOG.md
  70. +1 −1 packages/localizations/package.json
  71. +16 −0 packages/nextjs/CHANGELOG.md
  72. +1 −1 packages/nextjs/package.json
  73. +23 −125 packages/nextjs/src/app-router/server/ClerkProvider.tsx
  74. +144 −0 packages/nextjs/src/app-router/server/keyless-provider.tsx
  75. +1 −0 packages/nextjs/src/client-boundary/hooks.ts
  76. +1 −0 packages/nextjs/src/errors.ts
  77. +5 −0 packages/nextjs/src/server/clerkMiddleware.ts
  78. +10 −0 packages/nuxt/CHANGELOG.md
  79. +1 −1 packages/nuxt/package.json
  80. +12 −0 packages/react-router/CHANGELOG.md
  81. +1 −1 packages/react-router/package.json
  82. +1 −0 packages/react-router/src/errors.ts
  83. +12 −0 packages/react/CHANGELOG.md
  84. +1 −1 packages/react/package.json
  85. +1 −0 packages/react/src/errors.ts
  86. +9 −0 packages/react/src/isomorphicClerk.ts
  87. +12 −0 packages/remix/CHANGELOG.md
  88. +1 −1 packages/remix/package.json
  89. +1 −0 packages/remix/src/errors.ts
  90. +77 −0 packages/shared/CHANGELOG.md
  91. +1 −1 packages/shared/package.json
  92. +4 −0 packages/shared/src/error.ts
  93. +5 −23 packages/shared/src/react/__tests__/useReverification.test.ts
  94. +79 −81 packages/shared/src/react/hooks/useReverification.ts
  95. +1 −0 packages/tanstack-start/src/errors.ts
  96. +9 −0 packages/testing/CHANGELOG.md
  97. +1 −1 packages/testing/package.json
  98. +7 −0 packages/themes/CHANGELOG.md
  99. +1 −1 packages/themes/package.json
  100. +6 −0 packages/types/CHANGELOG.md
  101. +1 −1 packages/types/package.json
  102. +38 −9 packages/types/src/clerk.ts
  103. +8 −0 packages/vue/CHANGELOG.md
  104. +1 −1 packages/vue/package.json
3 changes: 2 additions & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
@@ -19,5 +19,6 @@
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"onlyUpdatePeerDependentsWhenOutOfRange": true,
"updateInternalDependents": "always"
}
},
"ignore": ["@clerk/tanstack-start"]
}
22 changes: 22 additions & 0 deletions .typedoc/custom-theme.mjs
Original file line number Diff line number Diff line change
@@ -345,6 +345,28 @@ class ClerkMarkdownThemeContext extends MarkdownThemeContext {

return md.join('\n\n');
},
/**
* Copied from default theme / source code. This modifies the output of union types by wrapping everything in a single `<code>foo | bar</code>` tag instead of doing `<code>foo</code>` | `<code>bar</code>`
* https://github.com/typedoc2md/typedoc-plugin-markdown/blob/5d7c3c7fb816b6b009f3425cf284c95400f53929/packages/typedoc-plugin-markdown/src/theme/context/partials/type.union.ts
* @param {import('typedoc').UnionType} model
*/
unionType: model => {
const useCodeBlocks = this.options.getValue('useCodeBlocks');
const typesOut = model.types.map(unionType => {
// So, .someType adds the backticks to the string and we don't want to deal with modifying that partial. So just remove any backticks in the next step again :shrug:
const defaultResult = this.partials.someType(unionType, { forceCollapse: true });

// Remove any backticks
return defaultResult.replace(/`/g, '');
});

const shouldFormat = useCodeBlocks && (typesOut?.join('').length > 70 || typesOut?.join('').includes('\n'));

const md = typesOut.join(shouldFormat ? `\n \\| ` : ` \\| `);
const result = shouldFormat ? `\n \\| ` + md : md;

return `<code>${result}</code>`;
},
};
}
}
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@ import { useReverification } from '@clerk/nextjs';
import { logUserIdActionReverification } from '@/app/(reverification)/actions';

function Page() {
const [logUserWithReverification] = useReverification(logUserIdActionReverification);
const logUserWithReverification = useReverification(logUserIdActionReverification);
const [pending, startTransition] = useTransition();
const [res, setRes] = useState(null);

9 changes: 9 additions & 0 deletions integration/testUtils/index.ts
Original file line number Diff line number Diff line change
@@ -7,7 +7,9 @@ import { createAppPageObject } from './appPageObject';
import { createEmailService } from './emailService';
import { createInvitationService } from './invitationsService';
import { createKeylessPopoverPageObject } from './keylessPopoverPageObject';
import { createOrganizationsService } from './organizationsService';
import { createOrganizationSwitcherComponentPageObject } from './organizationSwitcherPageObject';
import { createSessionTaskComponentPageObject } from './sessionTaskPageObject';
import type { EnchancedPage, TestArgs } from './signInPageObject';
import { createSignInComponentPageObject } from './signInPageObject';
import { createSignUpComponentPageObject } from './signUpPageObject';
@@ -50,6 +52,11 @@ const createExpectPageObject = ({ page }: TestArgs) => {
return !!window.Clerk?.user;
});
},
toHaveResolvedTask: async () => {
return page.waitForFunction(() => {
return !window.Clerk?.session?.currentTask;
});
},
};
};

@@ -87,6 +94,7 @@ export const createTestUtils = <
email: createEmailService(),
users: createUserService(clerkClient),
invitations: createInvitationService(clerkClient),
organizations: createOrganizationsService(clerkClient),
clerk: clerkClient,
};

@@ -106,6 +114,7 @@ export const createTestUtils = <
userButton: createUserButtonPageObject(testArgs),
userVerification: createUserVerificationComponentPageObject(testArgs),
waitlist: createWaitlistComponentPageObject(testArgs),
sessionTask: createSessionTaskComponentPageObject(testArgs),
expect: createExpectPageObject(testArgs),
clerk: createClerkUtils(testArgs),
};
25 changes: 25 additions & 0 deletions integration/testUtils/organizationsService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import type { ClerkClient, Organization } from '@clerk/backend';
import { faker } from '@faker-js/faker';

export type FakeOrganization = Pick<Organization, 'slug' | 'name'>;

export type OrganizationService = {
deleteAll: () => Promise<void>;
createFakeOrganization: () => FakeOrganization;
};

export const createOrganizationsService = (clerkClient: ClerkClient) => {
const self: OrganizationService = {
createFakeOrganization: () => ({
slug: faker.helpers.slugify(faker.commerce.department()).toLowerCase(),
name: faker.commerce.department(),
}),
deleteAll: async () => {
const organizations = await clerkClient.organizations.getOrganizationList();
const bulkDeletionPromises = organizations.data.map(({ id }) => clerkClient.organizations.deleteOrganization(id));
await Promise.all(bulkDeletionPromises);
},
};

return self;
};
26 changes: 26 additions & 0 deletions integration/testUtils/sessionTaskPageObject.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { expect } from '@playwright/test';

import { common } from './commonPageObject';
import type { FakeOrganization } from './organizationsService';
import type { TestArgs } from './signInPageObject';

export const createSessionTaskComponentPageObject = (testArgs: TestArgs) => {
const { page } = testArgs;

const self = {
...common(testArgs),
resolveForceOrganizationSelectionTask: async (fakeOrganization: FakeOrganization) => {
const createOrganizationButton = page.getByRole('button', { name: /create organization/i });

await expect(createOrganizationButton).toBeVisible();
expect(page.url()).toContain('add-organization');

await page.locator('input[name=name]').fill(fakeOrganization.name);
await page.locator('input[name=slug]').fill(fakeOrganization.slug);

await createOrganizationButton.click();
},
};

return self;
};
59 changes: 59 additions & 0 deletions integration/tests/resiliency.test.ts
Original file line number Diff line number Diff line change
@@ -80,4 +80,63 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withEmailCodes] })('resilienc

await u.po.expect.toBeSignedIn();
});

test('resiliency to not break devBroswer - dummy client and is not created on `/client` 4xx errors', async ({
page,
context,
}) => {
// Simulate "Needs new dev browser, when db jwt exists but does not match the instance".

const response = {
status: 401,
body: JSON.stringify({
errors: [
{
message: '',
long_message: '',
code: 'dev_browser_unauthenticated',
},
],
clerk_trace_id: 'some-trace-id',
}),
};
await page.route('**/v1/client?**', route => {
return route.fulfill(response);
});

await page.route('**/v1/environment?**', route => {
return route.fulfill(response);
});

const u = createTestUtils({ app, page, context });

const waitForClientImmediately = page.waitForResponse(
response => response.url().includes('/client?') && response.status() === 401,
{ timeout: 3_000 },
);

const waitForEnvironmentImmediately = page.waitForResponse(
response => response.url().includes('/environment?') && response.status() === 401,
{ timeout: 3_000 },
);

await u.page.goToAppHome();
await page.waitForLoadState('domcontentloaded');

await waitForEnvironmentImmediately;
const waitForDevBrowserImmediately = page.waitForResponse(
response => response.url().includes('/dev_browser') && response.status() === 200,
{
timeout: 4_000,
},
);
await waitForClientImmediately;

// To remove specific route handlers
await page.unrouteAll();

await waitForDevBrowserImmediately;

await u.po.clerk.toBeLoaded();
});
});
3 changes: 0 additions & 3 deletions integration/tests/reverification.test.ts
Original file line number Diff line number Diff line change
@@ -144,11 +144,8 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withReverification] })(
await u.page.getByRole('button', { name: /^add$/i }).click();

await u.po.userVerification.waitForMounted();

await u.po.userVerification.closeReverificationModal();

await u.po.userVerification.waitForClosed();
await u.po.userProfile.enterTestOtpCode();

await expect(u.page.locator('.cl-profileSectionItem__emailAddresses')).not.toContainText(newFakeEmail);
});
17 changes: 14 additions & 3 deletions integration/tests/session-tasks-sign-in.test.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,49 @@
import { expect, test } from '@playwright/test';
import { test } from '@playwright/test';

import { appConfigs } from '../presets';
import type { FakeUser } from '../testUtils';
import { createTestUtils, testAgainstRunningApps } from '../testUtils';
import type { FakeOrganization } from '../testUtils/organizationsService';

testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasks] })(
'session tasks after sign-in flow @nextjs',
({ app }) => {
test.describe.configure({ mode: 'serial' });

let fakeUser: FakeUser;
let fakeOrganization: FakeOrganization;

test.beforeAll(async () => {
const u = createTestUtils({ app });
fakeUser = u.services.users.createFakeUser();
fakeOrganization = u.services.organizations.createFakeOrganization();
await u.services.users.createBapiUser(fakeUser);
});

test.afterAll(async () => {
const u = createTestUtils({ app });
await fakeUser.deleteIfExists();
await u.services.organizations.deleteAll();
await app.teardown();
});

test('navigate to task on after sign-in', async ({ page, context }) => {
const u = createTestUtils({ app, page, context });

// Performs sign-in
await u.po.signIn.goTo();
await u.po.signIn.setIdentifier(fakeUser.email);
await u.po.signIn.continue();
await u.po.signIn.setPassword(fakeUser.password);
await u.po.signIn.continue();
await u.po.expect.toBeSignedIn();

await expect(u.page.getByRole('button', { name: /create organization/i })).toBeVisible();
expect(page.url()).toContain('add-organization');
// Resolves task
await u.po.sessionTask.resolveForceOrganizationSelectionTask(fakeOrganization);
await u.po.expect.toHaveResolvedTask();

// Navigates to after sign-in
await u.page.waitForAppUrl('/');
});
},
);
34 changes: 25 additions & 9 deletions integration/tests/session-tasks-sign-up.test.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,50 @@
import { expect, test } from '@playwright/test';
import { test } from '@playwright/test';

import { appConfigs } from '../presets';
import type { FakeUser } from '../testUtils';
import { createTestUtils, testAgainstRunningApps } from '../testUtils';
import type { FakeOrganization } from '../testUtils/organizationsService';

testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasks] })(
'session tasks after sign-up flow @nextjs',
({ app }) => {
test.describe.configure({ mode: 'serial' });

let fakeUser: FakeUser;
let fakeOrganization: FakeOrganization;

test.beforeAll(() => {
const u = createTestUtils({ app });
fakeUser = u.services.users.createFakeUser({
fictionalEmail: true,
withPhoneNumber: true,
withUsername: true,
});
fakeOrganization = u.services.organizations.createFakeOrganization();
});

test.afterAll(async () => {
const u = createTestUtils({ app });
await u.services.organizations.deleteAll();
await fakeUser.deleteIfExists();
await app.teardown();
});

test('navigate to task on after sign-up', async ({ page, context }) => {
// Performs sign-up
const u = createTestUtils({ app, page, context });
const fakeUser = u.services.users.createFakeUser({
fictionalEmail: true,
withPhoneNumber: true,
withUsername: true,
});
await u.po.signUp.goTo();
await u.po.signUp.signUpWithEmailAndPassword({
email: fakeUser.email,
password: fakeUser.password,
});

await expect(u.page.getByRole('button', { name: /create organization/i })).toBeVisible();
expect(page.url()).toContain('add-organization');
// Resolves task
await u.po.sessionTask.resolveForceOrganizationSelectionTask(fakeOrganization);
await u.po.expect.toHaveResolvedTask();

await fakeUser.deleteIfExists();
// Navigates to after sign-up
await u.page.waitForAppUrl('/');
});
},
);
15 changes: 9 additions & 6 deletions integration/tests/vue/components.test.ts
Original file line number Diff line number Diff line change
@@ -225,16 +225,19 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withCustomRoles] })('basic te
await u.page.waitForSelector('.cl-organizationSwitcherPopoverCard', { state: 'visible' });
await u.page.locator('.cl-button__manageOrganization').click();

// Check if custom pages and links are visible
await expect(u.page.getByRole('button', { name: /Terms/i })).toBeVisible();
await expect(u.page.getByRole('button', { name: /Homepage/i })).toBeVisible();
// Get the organization profile dialog
const dialog = u.page.getByRole('dialog');

// Check if custom pages and links are visible within the dialog
await expect(dialog.getByRole('button', { name: /Terms/i })).toBeVisible();
await expect(dialog.getByRole('button', { name: /Homepage/i })).toBeVisible();

// Navigate to custom page
await u.page.getByRole('button', { name: /Terms/i }).click();
await expect(u.page.getByRole('heading', { name: 'Custom Terms Page' })).toBeVisible();
await dialog.getByRole('button', { name: /Terms/i }).click();
await expect(dialog.getByRole('heading', { name: 'Custom Terms Page' })).toBeVisible();

// Click custom link and check navigation
await u.page.getByRole('button', { name: /Homepage/i }).click();
await dialog.getByRole('button', { name: /Homepage/i }).click();
await u.page.waitForAppUrl('/');
});

9 changes: 9 additions & 0 deletions packages/agent-toolkit/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# @clerk/agent-toolkit

## 0.0.12

### Patch Changes

- Updated dependencies [[`facefaf`](https://github.com/clerk/javascript/commit/facefafdaf6d602de0acee9218c66c61a0a9ba24), [`3910ebe`](https://github.com/clerk/javascript/commit/3910ebea85817273f18fd2f3f142dd1c728e2220), [`e513333`](https://github.com/clerk/javascript/commit/e5133330a196c5c3742634cc9c3d3233ff488b0d)]:
- @clerk/backend@1.25.4
- @clerk/types@4.49.1
- @clerk/shared@3.1.0

## 0.0.11

### Patch Changes
2 changes: 1 addition & 1 deletion packages/agent-toolkit/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@clerk/agent-toolkit",
"version": "0.0.11",
"version": "0.0.12",
"description": "Clerk Toolkit for AI Agents",
"homepage": "https://clerk.com/",
"bugs": {
9 changes: 9 additions & 0 deletions packages/astro/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# @clerk/astro

## 2.4.1

### Patch Changes

- Updated dependencies [[`facefaf`](https://github.com/clerk/javascript/commit/facefafdaf6d602de0acee9218c66c61a0a9ba24), [`3910ebe`](https://github.com/clerk/javascript/commit/3910ebea85817273f18fd2f3f142dd1c728e2220), [`e513333`](https://github.com/clerk/javascript/commit/e5133330a196c5c3742634cc9c3d3233ff488b0d)]:
- @clerk/backend@1.25.4
- @clerk/types@4.49.1
- @clerk/shared@3.1.0

## 2.4.0

### Minor Changes
2 changes: 1 addition & 1 deletion packages/astro/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@clerk/astro",
"version": "2.4.0",
"version": "2.4.1",
"description": "Clerk SDK for Astro",
"keywords": [
"auth",
Loading