From e000c4b41ef5494ab8d65f7ea3ebfa75e6d18989 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 1 Jul 2024 14:47:34 +0300 Subject: [PATCH 01/11] feat(astro): Introduce Astro SDK --- .../control/ClerkLayout.astro | 7 +++ packages/astro/src/client/hotload.ts | 58 +++++++++++++++++++ packages/astro/src/hotload.ts | 1 + packages/astro/src/integration/hotload.ts | 5 ++ packages/astro/src/internal/hotload.ts | 13 +++++ packages/astro/src/stores/index.ts | 2 + packages/astro/src/v0/clerkClient.ts | 20 +++++++ packages/astro/src/v0/constants.ts | 55 ++++++++++++++++++ packages/astro/src/v0/index.ts | 2 + packages/astro/v0/package.json | 3 + 10 files changed, 166 insertions(+) create mode 100644 packages/astro/src/astro-components/control/ClerkLayout.astro create mode 100644 packages/astro/src/client/hotload.ts create mode 100644 packages/astro/src/hotload.ts create mode 100644 packages/astro/src/integration/hotload.ts create mode 100644 packages/astro/src/internal/hotload.ts create mode 100644 packages/astro/src/stores/index.ts create mode 100644 packages/astro/src/v0/clerkClient.ts create mode 100644 packages/astro/src/v0/constants.ts create mode 100644 packages/astro/src/v0/index.ts create mode 100644 packages/astro/v0/package.json diff --git a/packages/astro/src/astro-components/control/ClerkLayout.astro b/packages/astro/src/astro-components/control/ClerkLayout.astro new file mode 100644 index 00000000000..c4f4795eced --- /dev/null +++ b/packages/astro/src/astro-components/control/ClerkLayout.astro @@ -0,0 +1,7 @@ +--- +interface Props { + protectedPage?: boolean; +} + +--- + diff --git a/packages/astro/src/client/hotload.ts b/packages/astro/src/client/hotload.ts new file mode 100644 index 00000000000..57b8b853a63 --- /dev/null +++ b/packages/astro/src/client/hotload.ts @@ -0,0 +1,58 @@ +import { waitForClerkScript } from '../internal/utils/loadClerkJSScript'; +import { $clerk, $csrState } from '../stores/internal'; +import type { AstroClerkIntegrationParams, AstroClerkUpdateOptions } from '../types'; +import { mountAllClerkAstroJSComponents } from './mount-clerk-astro-js-components'; +import { runOnce } from './run-once'; + +let initOptions: AstroClerkIntegrationParams | undefined; + +/** + * Prevents firing clerk.load multiple times + */ +export const createClerkInstance = runOnce(createClerkInstanceInternal); + +export async function createClerkInstanceInternal(options?: AstroClerkIntegrationParams) { + let clerkJSInstance = window.Clerk; + if (!clerkJSInstance) { + await waitForClerkScript(); + + if (!window.Clerk) { + throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.'); + } + clerkJSInstance = window.Clerk; + } + + if (!$clerk.get()) { + $clerk.set(clerkJSInstance); + } + + initOptions = options; + // TODO: Update Clerk type from @clerk/types to include this method + return (clerkJSInstance as any) + .load(options) + .then(() => { + $csrState.setKey('isLoaded', true); + + mountAllClerkAstroJSComponents(); + + clerkJSInstance.addListener(payload => { + $csrState.setKey('client', payload.client); + $csrState.setKey('user', payload.user); + $csrState.setKey('session', payload.session); + $csrState.setKey('organization', payload.organization); + }); + }) + .catch(() => {}); +} + +export function updateClerkOptions(options: AstroClerkUpdateOptions) { + const clerk = $clerk.get(); + if (!clerk) { + throw new Error('Missing clerk instance'); + } + // TODO: Update Clerk type from @clerk/types to include this method + void (clerk as any).__unstable__updateProps({ + options: { ...initOptions, ...options }, + appearance: { ...initOptions?.appearance, ...options.appearance }, + }); +} diff --git a/packages/astro/src/hotload.ts b/packages/astro/src/hotload.ts new file mode 100644 index 00000000000..91fef73a055 --- /dev/null +++ b/packages/astro/src/hotload.ts @@ -0,0 +1 @@ +export { default } from './integration/hotload'; diff --git a/packages/astro/src/integration/hotload.ts b/packages/astro/src/integration/hotload.ts new file mode 100644 index 00000000000..77f3eaaa6b7 --- /dev/null +++ b/packages/astro/src/integration/hotload.ts @@ -0,0 +1,5 @@ +import { createIntegration } from './create-integration'; + +export default createIntegration({ + mode: 'hotload', +}); diff --git a/packages/astro/src/internal/hotload.ts b/packages/astro/src/internal/hotload.ts new file mode 100644 index 00000000000..ca17cfb879f --- /dev/null +++ b/packages/astro/src/internal/hotload.ts @@ -0,0 +1,13 @@ +/** + * The following code will be used in order to be injected as script via the astro integration. + * F.e. + * + * injectScript('before-hydration', `...`) + */ + +import { createClerkInstance } from '../client/hotload'; +import { createInjectionScriptRunner } from './create-injection-script-runner'; + +const runInjectionScript = createInjectionScriptRunner(createClerkInstance); + +export { runInjectionScript }; diff --git a/packages/astro/src/stores/index.ts b/packages/astro/src/stores/index.ts new file mode 100644 index 00000000000..7e13c9380c8 --- /dev/null +++ b/packages/astro/src/stores/index.ts @@ -0,0 +1,2 @@ +// TODO: Don't expose internal +export * from './internal'; diff --git a/packages/astro/src/v0/clerkClient.ts b/packages/astro/src/v0/clerkClient.ts new file mode 100644 index 00000000000..b5b7320b560 --- /dev/null +++ b/packages/astro/src/v0/clerkClient.ts @@ -0,0 +1,20 @@ +import { createClerkClient } from '@clerk/backend'; +import { deprecated } from '@clerk/shared/deprecated'; + +import { API_URL, API_VERSION, SECRET_KEY } from './constants'; + +const clerkClientSingleton = createClerkClient({ secretKey: SECRET_KEY, apiVersion: API_VERSION, apiUrl: API_URL }); + +/** + * @deprecated + * Accessing `clerkClient` as a variable is deprecated and will be removed in a future release. Please use `clerkClient()` as a function instead. + */ +const clerkClient = new Proxy(clerkClientSingleton, { + get(target, prop, receiver) { + deprecated('clerkClient object', 'Use `clerkClient()` as a function instead.'); + + return Reflect.get(target, prop, receiver); + }, +}); + +export { clerkClient }; diff --git a/packages/astro/src/v0/constants.ts b/packages/astro/src/v0/constants.ts new file mode 100644 index 00000000000..d46797255a1 --- /dev/null +++ b/packages/astro/src/v0/constants.ts @@ -0,0 +1,55 @@ +const apiKey = import.meta.env.CLERK_API_KEY || ''; + +const secretKey = import.meta.env.CLERK_SECRET_KEY || ''; + +const apiVersion = import.meta.env.CLERK_API_VERSION || 'v1'; + +const apiUrl = import.meta.env.CLERK_API_URL || 'https://api.clerk.dev'; + +const frontendApi = import.meta.env.PUBLIC_ASTRO_APP_CLERK_FRONTEND_API || ''; + +const publishableKey = import.meta.env.PUBLIC_ASTRO_APP_CLERK_PUBLISHABLE_KEY || ''; + +const signInUrl = import.meta.env.PUBLIC_ASTRO_APP_CLERK_SIGN_IN_URL || ('' as string); + +const signUpUrl = import.meta.env.PUBLIC_ASTRO_APP_CLERK_SIGN_UP_URL || ('' as string); + +const jwtKey = import.meta.env.CLERK_JWT_KEY || ''; + +const PUBLISHABLE_KEY = publishableKey; +const SECRET_KEY = secretKey; +const SIGN_IN_URL = signInUrl; +const SIGN_UP_URL = signUpUrl; +const DOMAIN = import.meta.env.PUBLIC_ASTRO_APP_CLERK_DOMAIN || ('' as string); +const PROXY_URL = import.meta.env.PUBLIC_ASTRO_APP_CLERK_PROXY_URL || ('' as string); +const IS_SATELLITE = import.meta.env.PUBLIC_ASTRO_APP_CLERK_IS_SATELLITE === 'true'; +const API_VERSION = import.meta.env.CLERK_API_VERSION || 'v1'; +const API_URL = import.meta.env.CLERK_API_URL || 'https://api.clerk.dev'; + +const CLERK_JS_URL = import.meta.env.PUBLIC_ASTRO_APP_CLERK_JS_URL; +const CLERK_JS_VARIANT = import.meta.env.PUBLIC_ASTRO_APP_CLERK_JS_VARIANT; +const CLERK_JS_VERSION = import.meta.env.PUBLIC_ASTRO_APP_CLERK_JS_VERSION; + +export { + secretKey, + apiKey, + apiUrl, + apiVersion, + frontendApi, + publishableKey, + jwtKey, + signInUrl, + signUpUrl, + PUBLISHABLE_KEY, + SECRET_KEY, + SIGN_IN_URL, + SIGN_UP_URL, + DOMAIN, + PROXY_URL, + IS_SATELLITE, + API_URL, + API_VERSION, + CLERK_JS_URL, + CLERK_JS_VARIANT, + CLERK_JS_VERSION, +}; diff --git a/packages/astro/src/v0/index.ts b/packages/astro/src/v0/index.ts new file mode 100644 index 00000000000..454b8ea7992 --- /dev/null +++ b/packages/astro/src/v0/index.ts @@ -0,0 +1,2 @@ +export * from './clerkClient'; +export * from './constants'; diff --git a/packages/astro/v0/package.json b/packages/astro/v0/package.json new file mode 100644 index 00000000000..d2fdc59191a --- /dev/null +++ b/packages/astro/v0/package.json @@ -0,0 +1,3 @@ +{ + "main": "../dist/v0/index.js" +} From 004170ca6998952a49ae3dfe8031d7c1977d8a42 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 1 Jul 2024 14:52:44 +0300 Subject: [PATCH 02/11] chore(astro): Cleanup --- .../astro/src/astro-components/control/ClerkLayout.astro | 7 ------- packages/astro/src/client/hotload.ts | 1 + 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 packages/astro/src/astro-components/control/ClerkLayout.astro diff --git a/packages/astro/src/astro-components/control/ClerkLayout.astro b/packages/astro/src/astro-components/control/ClerkLayout.astro deleted file mode 100644 index c4f4795eced..00000000000 --- a/packages/astro/src/astro-components/control/ClerkLayout.astro +++ /dev/null @@ -1,7 +0,0 @@ ---- -interface Props { - protectedPage?: boolean; -} - ---- - diff --git a/packages/astro/src/client/hotload.ts b/packages/astro/src/client/hotload.ts index 57b8b853a63..ffe5b8c612b 100644 --- a/packages/astro/src/client/hotload.ts +++ b/packages/astro/src/client/hotload.ts @@ -23,6 +23,7 @@ export async function createClerkInstanceInternal(options?: AstroClerkIntegratio } if (!$clerk.get()) { + // @ts-ignore $clerk.set(clerkJSInstance); } From a03e4e41ef1e35b7b2638d8cdf1faf923adf62b3 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 1 Jul 2024 15:30:31 +0300 Subject: [PATCH 03/11] chore(astro): Drop deprecations --- packages/astro/src/stores/index.ts | 2 - packages/astro/src/v0/clerkClient.ts | 20 ---------- packages/astro/src/v0/constants.ts | 55 ---------------------------- packages/astro/src/v0/index.ts | 2 - packages/astro/v0/package.json | 3 -- 5 files changed, 82 deletions(-) delete mode 100644 packages/astro/src/stores/index.ts delete mode 100644 packages/astro/src/v0/clerkClient.ts delete mode 100644 packages/astro/src/v0/constants.ts delete mode 100644 packages/astro/src/v0/index.ts delete mode 100644 packages/astro/v0/package.json diff --git a/packages/astro/src/stores/index.ts b/packages/astro/src/stores/index.ts deleted file mode 100644 index 7e13c9380c8..00000000000 --- a/packages/astro/src/stores/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -// TODO: Don't expose internal -export * from './internal'; diff --git a/packages/astro/src/v0/clerkClient.ts b/packages/astro/src/v0/clerkClient.ts deleted file mode 100644 index b5b7320b560..00000000000 --- a/packages/astro/src/v0/clerkClient.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createClerkClient } from '@clerk/backend'; -import { deprecated } from '@clerk/shared/deprecated'; - -import { API_URL, API_VERSION, SECRET_KEY } from './constants'; - -const clerkClientSingleton = createClerkClient({ secretKey: SECRET_KEY, apiVersion: API_VERSION, apiUrl: API_URL }); - -/** - * @deprecated - * Accessing `clerkClient` as a variable is deprecated and will be removed in a future release. Please use `clerkClient()` as a function instead. - */ -const clerkClient = new Proxy(clerkClientSingleton, { - get(target, prop, receiver) { - deprecated('clerkClient object', 'Use `clerkClient()` as a function instead.'); - - return Reflect.get(target, prop, receiver); - }, -}); - -export { clerkClient }; diff --git a/packages/astro/src/v0/constants.ts b/packages/astro/src/v0/constants.ts deleted file mode 100644 index d46797255a1..00000000000 --- a/packages/astro/src/v0/constants.ts +++ /dev/null @@ -1,55 +0,0 @@ -const apiKey = import.meta.env.CLERK_API_KEY || ''; - -const secretKey = import.meta.env.CLERK_SECRET_KEY || ''; - -const apiVersion = import.meta.env.CLERK_API_VERSION || 'v1'; - -const apiUrl = import.meta.env.CLERK_API_URL || 'https://api.clerk.dev'; - -const frontendApi = import.meta.env.PUBLIC_ASTRO_APP_CLERK_FRONTEND_API || ''; - -const publishableKey = import.meta.env.PUBLIC_ASTRO_APP_CLERK_PUBLISHABLE_KEY || ''; - -const signInUrl = import.meta.env.PUBLIC_ASTRO_APP_CLERK_SIGN_IN_URL || ('' as string); - -const signUpUrl = import.meta.env.PUBLIC_ASTRO_APP_CLERK_SIGN_UP_URL || ('' as string); - -const jwtKey = import.meta.env.CLERK_JWT_KEY || ''; - -const PUBLISHABLE_KEY = publishableKey; -const SECRET_KEY = secretKey; -const SIGN_IN_URL = signInUrl; -const SIGN_UP_URL = signUpUrl; -const DOMAIN = import.meta.env.PUBLIC_ASTRO_APP_CLERK_DOMAIN || ('' as string); -const PROXY_URL = import.meta.env.PUBLIC_ASTRO_APP_CLERK_PROXY_URL || ('' as string); -const IS_SATELLITE = import.meta.env.PUBLIC_ASTRO_APP_CLERK_IS_SATELLITE === 'true'; -const API_VERSION = import.meta.env.CLERK_API_VERSION || 'v1'; -const API_URL = import.meta.env.CLERK_API_URL || 'https://api.clerk.dev'; - -const CLERK_JS_URL = import.meta.env.PUBLIC_ASTRO_APP_CLERK_JS_URL; -const CLERK_JS_VARIANT = import.meta.env.PUBLIC_ASTRO_APP_CLERK_JS_VARIANT; -const CLERK_JS_VERSION = import.meta.env.PUBLIC_ASTRO_APP_CLERK_JS_VERSION; - -export { - secretKey, - apiKey, - apiUrl, - apiVersion, - frontendApi, - publishableKey, - jwtKey, - signInUrl, - signUpUrl, - PUBLISHABLE_KEY, - SECRET_KEY, - SIGN_IN_URL, - SIGN_UP_URL, - DOMAIN, - PROXY_URL, - IS_SATELLITE, - API_URL, - API_VERSION, - CLERK_JS_URL, - CLERK_JS_VARIANT, - CLERK_JS_VERSION, -}; diff --git a/packages/astro/src/v0/index.ts b/packages/astro/src/v0/index.ts deleted file mode 100644 index 454b8ea7992..00000000000 --- a/packages/astro/src/v0/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './clerkClient'; -export * from './constants'; diff --git a/packages/astro/v0/package.json b/packages/astro/v0/package.json deleted file mode 100644 index d2fdc59191a..00000000000 --- a/packages/astro/v0/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "main": "../dist/v0/index.js" -} From 7c2c7e231c9cf16f9a37e761af563e8f98259057 Mon Sep 17 00:00:00 2001 From: panteliselef Date: Mon, 1 Jul 2024 15:57:53 +0300 Subject: [PATCH 04/11] chore(astro): Make hotloading the default --- packages/astro/src/client/hotload.ts | 59 ----------------------- packages/astro/src/hotload.ts | 1 - packages/astro/src/integration/hotload.ts | 5 -- packages/astro/src/internal/hotload.ts | 13 ----- 4 files changed, 78 deletions(-) delete mode 100644 packages/astro/src/client/hotload.ts delete mode 100644 packages/astro/src/hotload.ts delete mode 100644 packages/astro/src/integration/hotload.ts delete mode 100644 packages/astro/src/internal/hotload.ts diff --git a/packages/astro/src/client/hotload.ts b/packages/astro/src/client/hotload.ts deleted file mode 100644 index ffe5b8c612b..00000000000 --- a/packages/astro/src/client/hotload.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { waitForClerkScript } from '../internal/utils/loadClerkJSScript'; -import { $clerk, $csrState } from '../stores/internal'; -import type { AstroClerkIntegrationParams, AstroClerkUpdateOptions } from '../types'; -import { mountAllClerkAstroJSComponents } from './mount-clerk-astro-js-components'; -import { runOnce } from './run-once'; - -let initOptions: AstroClerkIntegrationParams | undefined; - -/** - * Prevents firing clerk.load multiple times - */ -export const createClerkInstance = runOnce(createClerkInstanceInternal); - -export async function createClerkInstanceInternal(options?: AstroClerkIntegrationParams) { - let clerkJSInstance = window.Clerk; - if (!clerkJSInstance) { - await waitForClerkScript(); - - if (!window.Clerk) { - throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.'); - } - clerkJSInstance = window.Clerk; - } - - if (!$clerk.get()) { - // @ts-ignore - $clerk.set(clerkJSInstance); - } - - initOptions = options; - // TODO: Update Clerk type from @clerk/types to include this method - return (clerkJSInstance as any) - .load(options) - .then(() => { - $csrState.setKey('isLoaded', true); - - mountAllClerkAstroJSComponents(); - - clerkJSInstance.addListener(payload => { - $csrState.setKey('client', payload.client); - $csrState.setKey('user', payload.user); - $csrState.setKey('session', payload.session); - $csrState.setKey('organization', payload.organization); - }); - }) - .catch(() => {}); -} - -export function updateClerkOptions(options: AstroClerkUpdateOptions) { - const clerk = $clerk.get(); - if (!clerk) { - throw new Error('Missing clerk instance'); - } - // TODO: Update Clerk type from @clerk/types to include this method - void (clerk as any).__unstable__updateProps({ - options: { ...initOptions, ...options }, - appearance: { ...initOptions?.appearance, ...options.appearance }, - }); -} diff --git a/packages/astro/src/hotload.ts b/packages/astro/src/hotload.ts deleted file mode 100644 index 91fef73a055..00000000000 --- a/packages/astro/src/hotload.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './integration/hotload'; diff --git a/packages/astro/src/integration/hotload.ts b/packages/astro/src/integration/hotload.ts deleted file mode 100644 index 77f3eaaa6b7..00000000000 --- a/packages/astro/src/integration/hotload.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createIntegration } from './create-integration'; - -export default createIntegration({ - mode: 'hotload', -}); diff --git a/packages/astro/src/internal/hotload.ts b/packages/astro/src/internal/hotload.ts deleted file mode 100644 index ca17cfb879f..00000000000 --- a/packages/astro/src/internal/hotload.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The following code will be used in order to be injected as script via the astro integration. - * F.e. - * - * injectScript('before-hydration', `...`) - */ - -import { createClerkInstance } from '../client/hotload'; -import { createInjectionScriptRunner } from './create-injection-script-runner'; - -const runInjectionScript = createInjectionScriptRunner(createClerkInstance); - -export { runInjectionScript }; From e757ee5aa24588b95566fac14626d338a888c2f8 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 3 Jul 2024 14:23:23 -0700 Subject: [PATCH 05/11] chore(astro): Add telemetry event to nanostores usage --- packages/astro/src/stores/external.ts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/astro/src/stores/external.ts b/packages/astro/src/stores/external.ts index 1f129ee2f7c..eb3c4a1dc1e 100644 --- a/packages/astro/src/stores/external.ts +++ b/packages/astro/src/stores/external.ts @@ -1,4 +1,5 @@ -import { computed } from 'nanostores'; +import { eventMethodCalled } from '@clerk/shared/dist/telemetry'; +import { computed, onMount, type Store } from 'nanostores'; import { $clerk, $csrState, $initialState } from './internal'; import { deriveState } from './utils'; @@ -36,10 +37,6 @@ export const $authStore = computed([$csrState, $initialState], (state, initialSt * $userStore.subscribe((user) => console.log(user.id)) */ export const $userStore = computed([$authStore], auth => auth.user); -// TODO: on mounted subscriber log telemetry -// onMount($userStore, () => { -// // isomorphicClerk.telemetry?.record(eventMethodCalled('useSignIn')); -// }); /** * A client side store that is populated after clerk-js has loaded. @@ -124,3 +121,19 @@ export const $signInStore = computed([$clientStore], client => client?.signIn); * $signUpStore.subscribe((signUp) => console.log(signUp.status)) */ export const $signUpStore = computed([$clientStore], client => client?.signUp); + +/** + * Records a telemetry event when a store is used to match React hooks telemetry. + * + * @param {Store} store - The nanostore instance to monitor. + * @param {string} method - The name of the method associated with the store usage. + */ +const recordTelemetryEvent = (store: Store, method: string) => { + onMount(store, () => { + $clerk.get()?.telemetry?.record(eventMethodCalled(method)); + }); +}; + +recordTelemetryEvent($signInStore, '$signInStore'); +recordTelemetryEvent($signUpStore, '$signUpStore'); +recordTelemetryEvent($organizationStore, '$organizationStore'); From 8ce6b24d9d5229c4c998a3df17a4c8b5230cdf88 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 3 Jul 2024 14:32:09 -0700 Subject: [PATCH 06/11] chore(astro): Add telemetry event to clerkMiddleware initialization --- packages/astro/src/server/clerk-middleware.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/astro/src/server/clerk-middleware.ts b/packages/astro/src/server/clerk-middleware.ts index 6991c9b732e..753df636cd8 100644 --- a/packages/astro/src/server/clerk-middleware.ts +++ b/packages/astro/src/server/clerk-middleware.ts @@ -2,6 +2,7 @@ import type { ClerkClient } from '@clerk/backend'; import type { AuthenticateRequestOptions, AuthObject, ClerkRequest, RequestState } from '@clerk/backend/internal'; import { AuthStatus, constants, createClerkRequest, createRedirect } from '@clerk/backend/internal'; import { handleValueOrFn, isDevelopmentFromSecretKey, isHttpOrHttps } from '@clerk/shared'; +import { eventMethodCalled } from '@clerk/shared/telemetry'; import type { APIContext } from 'astro'; // @ts-ignore @@ -60,6 +61,14 @@ export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): any => { const astroMiddleware: AstroMiddleware = async (context, next) => { const clerkRequest = createClerkRequest(context.request); + clerkClient(context).telemetry.record( + eventMethodCalled('clerkMiddleware', { + handler: Boolean(handler), + satellite: Boolean(options.isSatellite), + proxy: Boolean(options.proxyUrl), + }), + ); + const requestState = await clerkClient(context).authenticateRequest( clerkRequest, createAuthenticateRequestOptions(clerkRequest, options, context), From 22a13c3e056b071f3122b0eb3c9a0caa4160b2a9 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 3 Jul 2024 14:53:46 -0700 Subject: [PATCH 07/11] chore(astro): Add user agent and sdk metadata --- packages/astro/src/server/clerk-client.ts | 9 ++++++--- turbo.json | 3 ++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/astro/src/server/clerk-client.ts b/packages/astro/src/server/clerk-client.ts index 6e0999ace3e..24476ef0029 100644 --- a/packages/astro/src/server/clerk-client.ts +++ b/packages/astro/src/server/clerk-client.ts @@ -11,12 +11,15 @@ const createClerkClientWithOptions: CreateClerkClientWithOptions = (context, opt publishableKey: getSafeEnv(context).pk, apiUrl: getSafeEnv(context).apiUrl, apiVersion: getSafeEnv(context).apiVersion, - // userAgent proxyUrl: getSafeEnv(context).proxyUrl, domain: getSafeEnv(context).domain, isSatellite: getSafeEnv(context).isSatellite, - // TODO: Support telemetry and sdkMetadata - + userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`, + sdkMetadata: { + name: PACKAGE_NAME, + version: PACKAGE_VERSION, + environment: import.meta.env.MODE, + }, ...options, }); diff --git a/turbo.json b/turbo.json index 97e366be19e..ee5953a8e63 100644 --- a/turbo.json +++ b/turbo.json @@ -25,7 +25,8 @@ "VERCEL", "VITE_CLERK_*", "EXPO_PUBLIC_CLERK_*", - "REACT_APP_CLERK_*" + "REACT_APP_CLERK_*", + "MODE" ], "globalPassThroughEnv": ["AWS_SECRET_KEY", "GITHUB_TOKEN"], "tasks": { From 636ca44cb4b5a30f7fb197d336329400e67b481d Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Thu, 4 Jul 2024 11:07:37 -0700 Subject: [PATCH 08/11] chore(astro): update import path for shared telemetry function Co-authored-by: panteliselef --- packages/astro/src/stores/external.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/astro/src/stores/external.ts b/packages/astro/src/stores/external.ts index eb3c4a1dc1e..9ed82c6a8cc 100644 --- a/packages/astro/src/stores/external.ts +++ b/packages/astro/src/stores/external.ts @@ -1,4 +1,4 @@ -import { eventMethodCalled } from '@clerk/shared/dist/telemetry'; +import { eventMethodCalled } from '@clerk/shared/telemetry'; import { computed, onMount, type Store } from 'nanostores'; import { $clerk, $csrState, $initialState } from './internal'; From 98d010fe06420247bff7428dd32f4d7b06658237 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Fri, 5 Jul 2024 09:23:24 -0700 Subject: [PATCH 09/11] chore(astro): add changeset --- .changeset/strange-maps-marry.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/strange-maps-marry.md diff --git a/.changeset/strange-maps-marry.md b/.changeset/strange-maps-marry.md new file mode 100644 index 00000000000..08d48cc6402 --- /dev/null +++ b/.changeset/strange-maps-marry.md @@ -0,0 +1,5 @@ +--- +"@clerk/astro": patch +--- + +Implement telemetry for nanostores and middleware usage; include SDK metadata. From 5acc47d10519d5319cece801189e835ed1bd182a Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 5 Jul 2024 11:25:37 -0700 Subject: [PATCH 10/11] chore(astro): update SDK Metadata for client usage --- .../astro/src/integration/create-integration.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/astro/src/integration/create-integration.ts b/packages/astro/src/integration/create-integration.ts index 112f354ac94..84e91fead24 100644 --- a/packages/astro/src/integration/create-integration.ts +++ b/packages/astro/src/integration/create-integration.ts @@ -1,6 +1,7 @@ +import type { ClerkOptions } from '@clerk/types'; import type { AstroIntegration } from 'astro'; -import { name as packageName } from '../../package.json'; +import { name as packageName, version as packageVersion } from '../../package.json'; import type { AstroClerkIntegrationParams } from '../types'; const buildEnvVarFromOption = (valueToBeStored: unknown, envName: string) => { @@ -24,6 +25,15 @@ function createIntegration

({ mode }: const clerkJSVariant = (params as any)?.clerkJSVariant as string | undefined; const clerkJSVersion = (params as any)?.clerkJSVersion as string | undefined; + const internalParams: ClerkOptions = { + ...params, + sdkMetadata: { + version: packageVersion, + name: packageName, + environment: import.meta.env.MODE, + }, + }; + return { name: '@clerk/astro/integration', hooks: { @@ -96,7 +106,7 @@ function createIntegration

({ mode }: ` ${command === 'dev' ? `console.log('${packageName}',"Initialize Clerk: before-hydration")` : ''} import { runInjectionScript } from "${buildImportPath}"; - await runInjectionScript(${JSON.stringify(params)});`, + await runInjectionScript(${JSON.stringify(internalParams)});`, ); /** @@ -110,7 +120,7 @@ function createIntegration

({ mode }: ` ${command === 'dev' ? `console.log("${packageName}","Initialize Clerk: page")` : ''} import { runInjectionScript } from "${buildImportPath}"; - await runInjectionScript(${JSON.stringify(params)});`, + await runInjectionScript(${JSON.stringify(internalParams)});`, ); }, }, From 7be8837ba036c6ae5b9c6a6c032c99b0d71a4236 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 5 Jul 2024 11:47:06 -0700 Subject: [PATCH 11/11] chore(astro): bypass global MODE env --- packages/astro/src/integration/create-integration.ts | 1 + packages/astro/src/server/clerk-client.ts | 1 + turbo.json | 3 +-- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/astro/src/integration/create-integration.ts b/packages/astro/src/integration/create-integration.ts index 84e91fead24..90a088e41df 100644 --- a/packages/astro/src/integration/create-integration.ts +++ b/packages/astro/src/integration/create-integration.ts @@ -30,6 +30,7 @@ function createIntegration

({ mode }: sdkMetadata: { version: packageVersion, name: packageName, + // eslint-disable-next-line turbo/no-undeclared-env-vars environment: import.meta.env.MODE, }, }; diff --git a/packages/astro/src/server/clerk-client.ts b/packages/astro/src/server/clerk-client.ts index 24476ef0029..a1e7178cab4 100644 --- a/packages/astro/src/server/clerk-client.ts +++ b/packages/astro/src/server/clerk-client.ts @@ -18,6 +18,7 @@ const createClerkClientWithOptions: CreateClerkClientWithOptions = (context, opt sdkMetadata: { name: PACKAGE_NAME, version: PACKAGE_VERSION, + // eslint-disable-next-line turbo/no-undeclared-env-vars environment: import.meta.env.MODE, }, ...options, diff --git a/turbo.json b/turbo.json index ee5953a8e63..97e366be19e 100644 --- a/turbo.json +++ b/turbo.json @@ -25,8 +25,7 @@ "VERCEL", "VITE_CLERK_*", "EXPO_PUBLIC_CLERK_*", - "REACT_APP_CLERK_*", - "MODE" + "REACT_APP_CLERK_*" ], "globalPassThroughEnv": ["AWS_SECRET_KEY", "GITHUB_TOKEN"], "tasks": {