@clerk/hono 0.1.21 → 0.1.22-canary.v20260430183935
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -77,7 +77,7 @@ var clerkMiddleware = (options) => {
|
|
|
77
77
|
secretKey,
|
|
78
78
|
publishableKey,
|
|
79
79
|
machineSecretKey,
|
|
80
|
-
userAgent: `${"@clerk/hono"}@${"0.1.
|
|
80
|
+
userAgent: `${"@clerk/hono"}@${"0.1.22-canary.v20260430183935"}`
|
|
81
81
|
});
|
|
82
82
|
const requestState = await clerkClient.authenticateRequest(c.req.raw, {
|
|
83
83
|
...rest,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/clerkMiddleware.ts","../src/getAuth.ts"],"sourcesContent":["export { clerkMiddleware } from './clerkMiddleware';\nexport type { ClerkMiddlewareOptions } from './clerkMiddleware';\nexport type { FrontendApiProxyOptions } from './types';\n\nexport { getAuth } from './getAuth';\n\nimport type { ClerkHonoVariables } from './types';\nexport type { ClerkHonoVariables };\n\n// Augment Hono's ContextVariableMap so users get type inference\n// for c.get('clerk') and c.get('clerkAuth')\ndeclare module 'hono' {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface ContextVariableMap extends ClerkHonoVariables {}\n}\n","import type { AuthObject } from '@clerk/backend';\nimport { createClerkClient } from '@clerk/backend';\nimport type { AuthenticateRequestOptions, AuthOptions, GetAuthFnNoRequest } from '@clerk/backend/internal';\nimport { getAuthObjectForAcceptedToken } from '@clerk/backend/internal';\nimport { clerkFrontendApiProxy, DEFAULT_PROXY_PATH, matchProxyPath, stripTrailingSlashes } from '@clerk/backend/proxy';\nimport type { MiddlewareHandler } from 'hono';\nimport { env } from 'hono/adapter';\n\nimport type { FrontendApiProxyOptions } from './types';\n\ntype ClerkEnv = {\n CLERK_SECRET_KEY: string;\n CLERK_PUBLISHABLE_KEY: string;\n CLERK_MACHINE_SECRET_KEY?: string;\n CLERK_API_URL?: string;\n CLERK_API_VERSION?: string;\n};\n\nexport type ClerkMiddlewareOptions = Omit<AuthenticateRequestOptions, 'acceptsToken'> & {\n frontendApiProxy?: FrontendApiProxyOptions;\n};\n\n/**\n * Clerk middleware for Hono that authenticates requests and attaches\n * auth data to the Hono context.\n *\n * @example\n * ```ts\n * import { Hono } from 'hono';\n * import { clerkMiddleware, getAuth } from '@clerk/hono';\n *\n * const app = new Hono();\n * app.use('*', clerkMiddleware());\n *\n * app.get('/', (c) => {\n * const { userId } = getAuth(c);\n * return c.json({ userId });\n * });\n * ```\n */\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): MiddlewareHandler => {\n return async (c, next) => {\n const clerkEnv = env<ClerkEnv>(c);\n const {\n secretKey = clerkEnv.CLERK_SECRET_KEY || '',\n publishableKey = clerkEnv.CLERK_PUBLISHABLE_KEY || '',\n machineSecretKey = clerkEnv.CLERK_MACHINE_SECRET_KEY || '',\n apiUrl = clerkEnv.CLERK_API_URL,\n apiVersion = clerkEnv.CLERK_API_VERSION,\n frontendApiProxy,\n ...rest\n } = options || {};\n\n if (!secretKey) {\n throw new Error(\n 'Clerk: Missing Secret Key. Set CLERK_SECRET_KEY in your environment or pass secretKey to clerkMiddleware().',\n );\n }\n\n if (!publishableKey) {\n throw new Error(\n 'Clerk: Missing Publishable Key. Set CLERK_PUBLISHABLE_KEY in your environment or pass publishableKey to clerkMiddleware().',\n );\n }\n\n // Handle Frontend API proxy requests and auto-derive proxyUrl\n let derivedProxyUrl = rest.proxyUrl;\n if (frontendApiProxy) {\n const proxyPath = stripTrailingSlashes(frontendApiProxy.path ?? DEFAULT_PROXY_PATH) || DEFAULT_PROXY_PATH;\n const requestUrl = new URL(c.req.url);\n const isEnabled =\n typeof frontendApiProxy.enabled === 'function'\n ? frontendApiProxy.enabled(requestUrl)\n : frontendApiProxy.enabled;\n\n if (isEnabled) {\n if (matchProxyPath(c.req.raw, { proxyPath })) {\n return clerkFrontendApiProxy(c.req.raw, {\n proxyPath,\n publishableKey,\n secretKey,\n });\n }\n\n if (!derivedProxyUrl) {\n derivedProxyUrl = proxyPath;\n }\n }\n }\n\n const clerkClient = createClerkClient({\n ...rest,\n apiUrl,\n apiVersion,\n secretKey,\n publishableKey,\n machineSecretKey,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n });\n\n const requestState = await clerkClient.authenticateRequest(c.req.raw, {\n ...rest,\n secretKey,\n publishableKey,\n machineSecretKey,\n proxyUrl: derivedProxyUrl,\n acceptsToken: 'any',\n });\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n c.res.headers.append(key, value);\n });\n\n const locationHeader = requestState.headers.get('location');\n\n if (locationHeader) {\n return c.redirect(locationHeader, 307);\n } else if (requestState.status === 'handshake') {\n throw new Error('Clerk: Unexpected handshake without redirect');\n }\n }\n\n const authObjectFn = ((authOptions?: AuthOptions) =>\n getAuthObjectForAcceptedToken({\n authObject: requestState.toAuth(authOptions) as AuthObject,\n acceptsToken: authOptions?.acceptsToken,\n })) as GetAuthFnNoRequest;\n\n c.set('clerkAuth', authObjectFn);\n c.set('clerk', clerkClient);\n\n await next();\n };\n};\n","import type { AuthOptions, GetAuthFn } from '@clerk/backend/internal';\nimport type { Context } from 'hono';\n\n/**\n * Retrieves the Clerk auth object from the Hono context.\n * Must be used after clerkMiddleware() has been applied.\n *\n * @example\n * ```ts\n * app.get('/protected', (c) => {\n * const { userId } = getAuth(c);\n * if (!userId) {\n * return c.json({ error: 'Unauthorized' }, 401);\n * }\n * return c.json({ message: 'Hello!' });\n * });\n * ```\n *\n * @example Using acceptsToken for API keys\n * ```ts\n * app.get('/api', (c) => {\n * const auth = getAuth(c, { acceptsToken: 'api_key' });\n * // auth will be typed for API key tokens\n * });\n * ```\n */\nexport const getAuth: GetAuthFn<Context> = ((c: Context, options?: AuthOptions) => {\n const authFn = c.get('clerkAuth');\n\n if (!authFn) {\n throw new Error(\n 'Clerk: getAuth() called without clerkMiddleware() being applied. Make sure to use clerkMiddleware() before calling getAuth().',\n );\n }\n\n return authFn(options);\n}) as GetAuthFn<Context>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,qBAAkC;AAElC,sBAA8C;AAC9C,mBAAgG;AAEhG,qBAAoB;AAkCb,IAAM,kBAAkB,CAAC,YAAwD;AACtF,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,eAAW,oBAAc,CAAC;AAChC,UAAM;AAAA,MACJ,YAAY,SAAS,oBAAoB;AAAA,MACzC,iBAAiB,SAAS,yBAAyB;AAAA,MACnD,mBAAmB,SAAS,4BAA4B;AAAA,MACxD,SAAS,SAAS;AAAA,MAClB,aAAa,SAAS;AAAA,MACtB;AAAA,MACA,GAAG;AAAA,IACL,IAAI,WAAW,CAAC;AAEhB,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,kBAAkB,KAAK;AAC3B,QAAI,kBAAkB;AACpB,YAAM,gBAAY,mCAAqB,iBAAiB,QAAQ,+BAAkB,KAAK;AACvF,YAAM,aAAa,IAAI,IAAI,EAAE,IAAI,GAAG;AACpC,YAAM,YACJ,OAAO,iBAAiB,YAAY,aAChC,iBAAiB,QAAQ,UAAU,IACnC,iBAAiB;AAEvB,UAAI,WAAW;AACb,gBAAI,6BAAe,EAAE,IAAI,KAAK,EAAE,UAAU,CAAC,GAAG;AAC5C,qBAAO,oCAAsB,EAAE,IAAI,KAAK;AAAA,YACtC;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,iBAAiB;AACpB,4BAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAc,kCAAkB;AAAA,MACpC,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,GAAG,aAAY,IAAI
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/clerkMiddleware.ts","../src/getAuth.ts"],"sourcesContent":["export { clerkMiddleware } from './clerkMiddleware';\nexport type { ClerkMiddlewareOptions } from './clerkMiddleware';\nexport type { FrontendApiProxyOptions } from './types';\n\nexport { getAuth } from './getAuth';\n\nimport type { ClerkHonoVariables } from './types';\nexport type { ClerkHonoVariables };\n\n// Augment Hono's ContextVariableMap so users get type inference\n// for c.get('clerk') and c.get('clerkAuth')\ndeclare module 'hono' {\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type\n interface ContextVariableMap extends ClerkHonoVariables {}\n}\n","import type { AuthObject } from '@clerk/backend';\nimport { createClerkClient } from '@clerk/backend';\nimport type { AuthenticateRequestOptions, AuthOptions, GetAuthFnNoRequest } from '@clerk/backend/internal';\nimport { getAuthObjectForAcceptedToken } from '@clerk/backend/internal';\nimport { clerkFrontendApiProxy, DEFAULT_PROXY_PATH, matchProxyPath, stripTrailingSlashes } from '@clerk/backend/proxy';\nimport type { MiddlewareHandler } from 'hono';\nimport { env } from 'hono/adapter';\n\nimport type { FrontendApiProxyOptions } from './types';\n\ntype ClerkEnv = {\n CLERK_SECRET_KEY: string;\n CLERK_PUBLISHABLE_KEY: string;\n CLERK_MACHINE_SECRET_KEY?: string;\n CLERK_API_URL?: string;\n CLERK_API_VERSION?: string;\n};\n\nexport type ClerkMiddlewareOptions = Omit<AuthenticateRequestOptions, 'acceptsToken'> & {\n frontendApiProxy?: FrontendApiProxyOptions;\n};\n\n/**\n * Clerk middleware for Hono that authenticates requests and attaches\n * auth data to the Hono context.\n *\n * @example\n * ```ts\n * import { Hono } from 'hono';\n * import { clerkMiddleware, getAuth } from '@clerk/hono';\n *\n * const app = new Hono();\n * app.use('*', clerkMiddleware());\n *\n * app.get('/', (c) => {\n * const { userId } = getAuth(c);\n * return c.json({ userId });\n * });\n * ```\n */\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): MiddlewareHandler => {\n return async (c, next) => {\n const clerkEnv = env<ClerkEnv>(c);\n const {\n secretKey = clerkEnv.CLERK_SECRET_KEY || '',\n publishableKey = clerkEnv.CLERK_PUBLISHABLE_KEY || '',\n machineSecretKey = clerkEnv.CLERK_MACHINE_SECRET_KEY || '',\n apiUrl = clerkEnv.CLERK_API_URL,\n apiVersion = clerkEnv.CLERK_API_VERSION,\n frontendApiProxy,\n ...rest\n } = options || {};\n\n if (!secretKey) {\n throw new Error(\n 'Clerk: Missing Secret Key. Set CLERK_SECRET_KEY in your environment or pass secretKey to clerkMiddleware().',\n );\n }\n\n if (!publishableKey) {\n throw new Error(\n 'Clerk: Missing Publishable Key. Set CLERK_PUBLISHABLE_KEY in your environment or pass publishableKey to clerkMiddleware().',\n );\n }\n\n // Handle Frontend API proxy requests and auto-derive proxyUrl\n let derivedProxyUrl = rest.proxyUrl;\n if (frontendApiProxy) {\n const proxyPath = stripTrailingSlashes(frontendApiProxy.path ?? DEFAULT_PROXY_PATH) || DEFAULT_PROXY_PATH;\n const requestUrl = new URL(c.req.url);\n const isEnabled =\n typeof frontendApiProxy.enabled === 'function'\n ? frontendApiProxy.enabled(requestUrl)\n : frontendApiProxy.enabled;\n\n if (isEnabled) {\n if (matchProxyPath(c.req.raw, { proxyPath })) {\n return clerkFrontendApiProxy(c.req.raw, {\n proxyPath,\n publishableKey,\n secretKey,\n });\n }\n\n if (!derivedProxyUrl) {\n derivedProxyUrl = proxyPath;\n }\n }\n }\n\n const clerkClient = createClerkClient({\n ...rest,\n apiUrl,\n apiVersion,\n secretKey,\n publishableKey,\n machineSecretKey,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n });\n\n const requestState = await clerkClient.authenticateRequest(c.req.raw, {\n ...rest,\n secretKey,\n publishableKey,\n machineSecretKey,\n proxyUrl: derivedProxyUrl,\n acceptsToken: 'any',\n });\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n c.res.headers.append(key, value);\n });\n\n const locationHeader = requestState.headers.get('location');\n\n if (locationHeader) {\n return c.redirect(locationHeader, 307);\n } else if (requestState.status === 'handshake') {\n throw new Error('Clerk: Unexpected handshake without redirect');\n }\n }\n\n const authObjectFn = ((authOptions?: AuthOptions) =>\n getAuthObjectForAcceptedToken({\n authObject: requestState.toAuth(authOptions) as AuthObject,\n acceptsToken: authOptions?.acceptsToken,\n })) as GetAuthFnNoRequest;\n\n c.set('clerkAuth', authObjectFn);\n c.set('clerk', clerkClient);\n\n await next();\n };\n};\n","import type { AuthOptions, GetAuthFn } from '@clerk/backend/internal';\nimport type { Context } from 'hono';\n\n/**\n * Retrieves the Clerk auth object from the Hono context.\n * Must be used after clerkMiddleware() has been applied.\n *\n * @example\n * ```ts\n * app.get('/protected', (c) => {\n * const { userId } = getAuth(c);\n * if (!userId) {\n * return c.json({ error: 'Unauthorized' }, 401);\n * }\n * return c.json({ message: 'Hello!' });\n * });\n * ```\n *\n * @example Using acceptsToken for API keys\n * ```ts\n * app.get('/api', (c) => {\n * const auth = getAuth(c, { acceptsToken: 'api_key' });\n * // auth will be typed for API key tokens\n * });\n * ```\n */\nexport const getAuth: GetAuthFn<Context> = ((c: Context, options?: AuthOptions) => {\n const authFn = c.get('clerkAuth');\n\n if (!authFn) {\n throw new Error(\n 'Clerk: getAuth() called without clerkMiddleware() being applied. Make sure to use clerkMiddleware() before calling getAuth().',\n );\n }\n\n return authFn(options);\n}) as GetAuthFn<Context>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,qBAAkC;AAElC,sBAA8C;AAC9C,mBAAgG;AAEhG,qBAAoB;AAkCb,IAAM,kBAAkB,CAAC,YAAwD;AACtF,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,eAAW,oBAAc,CAAC;AAChC,UAAM;AAAA,MACJ,YAAY,SAAS,oBAAoB;AAAA,MACzC,iBAAiB,SAAS,yBAAyB;AAAA,MACnD,mBAAmB,SAAS,4BAA4B;AAAA,MACxD,SAAS,SAAS;AAAA,MAClB,aAAa,SAAS;AAAA,MACtB;AAAA,MACA,GAAG;AAAA,IACL,IAAI,WAAW,CAAC;AAEhB,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,kBAAkB,KAAK;AAC3B,QAAI,kBAAkB;AACpB,YAAM,gBAAY,mCAAqB,iBAAiB,QAAQ,+BAAkB,KAAK;AACvF,YAAM,aAAa,IAAI,IAAI,EAAE,IAAI,GAAG;AACpC,YAAM,YACJ,OAAO,iBAAiB,YAAY,aAChC,iBAAiB,QAAQ,UAAU,IACnC,iBAAiB;AAEvB,UAAI,WAAW;AACb,gBAAI,6BAAe,EAAE,IAAI,KAAK,EAAE,UAAU,CAAC,GAAG;AAC5C,qBAAO,oCAAsB,EAAE,IAAI,KAAK;AAAA,YACtC;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,iBAAiB;AACpB,4BAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,kBAAc,kCAAkB;AAAA,MACpC,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,GAAG,aAAY,IAAI,+BAAe;AAAA,IAC/C,CAAC;AAED,UAAM,eAAe,MAAM,YAAY,oBAAoB,EAAE,IAAI,KAAK;AAAA,MACpE,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,UAAE,IAAI,QAAQ,OAAO,KAAK,KAAK;AAAA,MACjC,CAAC;AAED,YAAM,iBAAiB,aAAa,QAAQ,IAAI,UAAU;AAE1D,UAAI,gBAAgB;AAClB,eAAO,EAAE,SAAS,gBAAgB,GAAG;AAAA,MACvC,WAAW,aAAa,WAAW,aAAa;AAC9C,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,gBAAgB,CAAC,oBACrB,+CAA8B;AAAA,MAC5B,YAAY,aAAa,OAAO,WAAW;AAAA,MAC3C,cAAc,aAAa;AAAA,IAC7B,CAAC;AAEH,MAAE,IAAI,aAAa,YAAY;AAC/B,MAAE,IAAI,SAAS,WAAW;AAE1B,UAAM,KAAK;AAAA,EACb;AACF;;;AC5GO,IAAM,WAA+B,CAAC,GAAY,YAA0B;AACjF,QAAM,SAAS,EAAE,IAAI,WAAW;AAEhC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO,OAAO;AACvB;","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -50,7 +50,7 @@ var clerkMiddleware = (options) => {
|
|
|
50
50
|
secretKey,
|
|
51
51
|
publishableKey,
|
|
52
52
|
machineSecretKey,
|
|
53
|
-
userAgent: `${"@clerk/hono"}@${"0.1.
|
|
53
|
+
userAgent: `${"@clerk/hono"}@${"0.1.22-canary.v20260430183935"}`
|
|
54
54
|
});
|
|
55
55
|
const requestState = await clerkClient.authenticateRequest(c.req.raw, {
|
|
56
56
|
...rest,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/clerkMiddleware.ts","../src/getAuth.ts"],"sourcesContent":["import type { AuthObject } from '@clerk/backend';\nimport { createClerkClient } from '@clerk/backend';\nimport type { AuthenticateRequestOptions, AuthOptions, GetAuthFnNoRequest } from '@clerk/backend/internal';\nimport { getAuthObjectForAcceptedToken } from '@clerk/backend/internal';\nimport { clerkFrontendApiProxy, DEFAULT_PROXY_PATH, matchProxyPath, stripTrailingSlashes } from '@clerk/backend/proxy';\nimport type { MiddlewareHandler } from 'hono';\nimport { env } from 'hono/adapter';\n\nimport type { FrontendApiProxyOptions } from './types';\n\ntype ClerkEnv = {\n CLERK_SECRET_KEY: string;\n CLERK_PUBLISHABLE_KEY: string;\n CLERK_MACHINE_SECRET_KEY?: string;\n CLERK_API_URL?: string;\n CLERK_API_VERSION?: string;\n};\n\nexport type ClerkMiddlewareOptions = Omit<AuthenticateRequestOptions, 'acceptsToken'> & {\n frontendApiProxy?: FrontendApiProxyOptions;\n};\n\n/**\n * Clerk middleware for Hono that authenticates requests and attaches\n * auth data to the Hono context.\n *\n * @example\n * ```ts\n * import { Hono } from 'hono';\n * import { clerkMiddleware, getAuth } from '@clerk/hono';\n *\n * const app = new Hono();\n * app.use('*', clerkMiddleware());\n *\n * app.get('/', (c) => {\n * const { userId } = getAuth(c);\n * return c.json({ userId });\n * });\n * ```\n */\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): MiddlewareHandler => {\n return async (c, next) => {\n const clerkEnv = env<ClerkEnv>(c);\n const {\n secretKey = clerkEnv.CLERK_SECRET_KEY || '',\n publishableKey = clerkEnv.CLERK_PUBLISHABLE_KEY || '',\n machineSecretKey = clerkEnv.CLERK_MACHINE_SECRET_KEY || '',\n apiUrl = clerkEnv.CLERK_API_URL,\n apiVersion = clerkEnv.CLERK_API_VERSION,\n frontendApiProxy,\n ...rest\n } = options || {};\n\n if (!secretKey) {\n throw new Error(\n 'Clerk: Missing Secret Key. Set CLERK_SECRET_KEY in your environment or pass secretKey to clerkMiddleware().',\n );\n }\n\n if (!publishableKey) {\n throw new Error(\n 'Clerk: Missing Publishable Key. Set CLERK_PUBLISHABLE_KEY in your environment or pass publishableKey to clerkMiddleware().',\n );\n }\n\n // Handle Frontend API proxy requests and auto-derive proxyUrl\n let derivedProxyUrl = rest.proxyUrl;\n if (frontendApiProxy) {\n const proxyPath = stripTrailingSlashes(frontendApiProxy.path ?? DEFAULT_PROXY_PATH) || DEFAULT_PROXY_PATH;\n const requestUrl = new URL(c.req.url);\n const isEnabled =\n typeof frontendApiProxy.enabled === 'function'\n ? frontendApiProxy.enabled(requestUrl)\n : frontendApiProxy.enabled;\n\n if (isEnabled) {\n if (matchProxyPath(c.req.raw, { proxyPath })) {\n return clerkFrontendApiProxy(c.req.raw, {\n proxyPath,\n publishableKey,\n secretKey,\n });\n }\n\n if (!derivedProxyUrl) {\n derivedProxyUrl = proxyPath;\n }\n }\n }\n\n const clerkClient = createClerkClient({\n ...rest,\n apiUrl,\n apiVersion,\n secretKey,\n publishableKey,\n machineSecretKey,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n });\n\n const requestState = await clerkClient.authenticateRequest(c.req.raw, {\n ...rest,\n secretKey,\n publishableKey,\n machineSecretKey,\n proxyUrl: derivedProxyUrl,\n acceptsToken: 'any',\n });\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n c.res.headers.append(key, value);\n });\n\n const locationHeader = requestState.headers.get('location');\n\n if (locationHeader) {\n return c.redirect(locationHeader, 307);\n } else if (requestState.status === 'handshake') {\n throw new Error('Clerk: Unexpected handshake without redirect');\n }\n }\n\n const authObjectFn = ((authOptions?: AuthOptions) =>\n getAuthObjectForAcceptedToken({\n authObject: requestState.toAuth(authOptions) as AuthObject,\n acceptsToken: authOptions?.acceptsToken,\n })) as GetAuthFnNoRequest;\n\n c.set('clerkAuth', authObjectFn);\n c.set('clerk', clerkClient);\n\n await next();\n };\n};\n","import type { AuthOptions, GetAuthFn } from '@clerk/backend/internal';\nimport type { Context } from 'hono';\n\n/**\n * Retrieves the Clerk auth object from the Hono context.\n * Must be used after clerkMiddleware() has been applied.\n *\n * @example\n * ```ts\n * app.get('/protected', (c) => {\n * const { userId } = getAuth(c);\n * if (!userId) {\n * return c.json({ error: 'Unauthorized' }, 401);\n * }\n * return c.json({ message: 'Hello!' });\n * });\n * ```\n *\n * @example Using acceptsToken for API keys\n * ```ts\n * app.get('/api', (c) => {\n * const auth = getAuth(c, { acceptsToken: 'api_key' });\n * // auth will be typed for API key tokens\n * });\n * ```\n */\nexport const getAuth: GetAuthFn<Context> = ((c: Context, options?: AuthOptions) => {\n const authFn = c.get('clerkAuth');\n\n if (!authFn) {\n throw new Error(\n 'Clerk: getAuth() called without clerkMiddleware() being applied. Make sure to use clerkMiddleware() before calling getAuth().',\n );\n }\n\n return authFn(options);\n}) as GetAuthFn<Context>;\n"],"mappings":";AACA,SAAS,yBAAyB;AAElC,SAAS,qCAAqC;AAC9C,SAAS,uBAAuB,oBAAoB,gBAAgB,4BAA4B;AAEhG,SAAS,WAAW;AAkCb,IAAM,kBAAkB,CAAC,YAAwD;AACtF,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,WAAW,IAAc,CAAC;AAChC,UAAM;AAAA,MACJ,YAAY,SAAS,oBAAoB;AAAA,MACzC,iBAAiB,SAAS,yBAAyB;AAAA,MACnD,mBAAmB,SAAS,4BAA4B;AAAA,MACxD,SAAS,SAAS;AAAA,MAClB,aAAa,SAAS;AAAA,MACtB;AAAA,MACA,GAAG;AAAA,IACL,IAAI,WAAW,CAAC;AAEhB,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,kBAAkB,KAAK;AAC3B,QAAI,kBAAkB;AACpB,YAAM,YAAY,qBAAqB,iBAAiB,QAAQ,kBAAkB,KAAK;AACvF,YAAM,aAAa,IAAI,IAAI,EAAE,IAAI,GAAG;AACpC,YAAM,YACJ,OAAO,iBAAiB,YAAY,aAChC,iBAAiB,QAAQ,UAAU,IACnC,iBAAiB;AAEvB,UAAI,WAAW;AACb,YAAI,eAAe,EAAE,IAAI,KAAK,EAAE,UAAU,CAAC,GAAG;AAC5C,iBAAO,sBAAsB,EAAE,IAAI,KAAK;AAAA,YACtC;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,iBAAiB;AACpB,4BAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,kBAAkB;AAAA,MACpC,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,GAAG,aAAY,IAAI
|
|
1
|
+
{"version":3,"sources":["../src/clerkMiddleware.ts","../src/getAuth.ts"],"sourcesContent":["import type { AuthObject } from '@clerk/backend';\nimport { createClerkClient } from '@clerk/backend';\nimport type { AuthenticateRequestOptions, AuthOptions, GetAuthFnNoRequest } from '@clerk/backend/internal';\nimport { getAuthObjectForAcceptedToken } from '@clerk/backend/internal';\nimport { clerkFrontendApiProxy, DEFAULT_PROXY_PATH, matchProxyPath, stripTrailingSlashes } from '@clerk/backend/proxy';\nimport type { MiddlewareHandler } from 'hono';\nimport { env } from 'hono/adapter';\n\nimport type { FrontendApiProxyOptions } from './types';\n\ntype ClerkEnv = {\n CLERK_SECRET_KEY: string;\n CLERK_PUBLISHABLE_KEY: string;\n CLERK_MACHINE_SECRET_KEY?: string;\n CLERK_API_URL?: string;\n CLERK_API_VERSION?: string;\n};\n\nexport type ClerkMiddlewareOptions = Omit<AuthenticateRequestOptions, 'acceptsToken'> & {\n frontendApiProxy?: FrontendApiProxyOptions;\n};\n\n/**\n * Clerk middleware for Hono that authenticates requests and attaches\n * auth data to the Hono context.\n *\n * @example\n * ```ts\n * import { Hono } from 'hono';\n * import { clerkMiddleware, getAuth } from '@clerk/hono';\n *\n * const app = new Hono();\n * app.use('*', clerkMiddleware());\n *\n * app.get('/', (c) => {\n * const { userId } = getAuth(c);\n * return c.json({ userId });\n * });\n * ```\n */\nexport const clerkMiddleware = (options?: ClerkMiddlewareOptions): MiddlewareHandler => {\n return async (c, next) => {\n const clerkEnv = env<ClerkEnv>(c);\n const {\n secretKey = clerkEnv.CLERK_SECRET_KEY || '',\n publishableKey = clerkEnv.CLERK_PUBLISHABLE_KEY || '',\n machineSecretKey = clerkEnv.CLERK_MACHINE_SECRET_KEY || '',\n apiUrl = clerkEnv.CLERK_API_URL,\n apiVersion = clerkEnv.CLERK_API_VERSION,\n frontendApiProxy,\n ...rest\n } = options || {};\n\n if (!secretKey) {\n throw new Error(\n 'Clerk: Missing Secret Key. Set CLERK_SECRET_KEY in your environment or pass secretKey to clerkMiddleware().',\n );\n }\n\n if (!publishableKey) {\n throw new Error(\n 'Clerk: Missing Publishable Key. Set CLERK_PUBLISHABLE_KEY in your environment or pass publishableKey to clerkMiddleware().',\n );\n }\n\n // Handle Frontend API proxy requests and auto-derive proxyUrl\n let derivedProxyUrl = rest.proxyUrl;\n if (frontendApiProxy) {\n const proxyPath = stripTrailingSlashes(frontendApiProxy.path ?? DEFAULT_PROXY_PATH) || DEFAULT_PROXY_PATH;\n const requestUrl = new URL(c.req.url);\n const isEnabled =\n typeof frontendApiProxy.enabled === 'function'\n ? frontendApiProxy.enabled(requestUrl)\n : frontendApiProxy.enabled;\n\n if (isEnabled) {\n if (matchProxyPath(c.req.raw, { proxyPath })) {\n return clerkFrontendApiProxy(c.req.raw, {\n proxyPath,\n publishableKey,\n secretKey,\n });\n }\n\n if (!derivedProxyUrl) {\n derivedProxyUrl = proxyPath;\n }\n }\n }\n\n const clerkClient = createClerkClient({\n ...rest,\n apiUrl,\n apiVersion,\n secretKey,\n publishableKey,\n machineSecretKey,\n userAgent: `${PACKAGE_NAME}@${PACKAGE_VERSION}`,\n });\n\n const requestState = await clerkClient.authenticateRequest(c.req.raw, {\n ...rest,\n secretKey,\n publishableKey,\n machineSecretKey,\n proxyUrl: derivedProxyUrl,\n acceptsToken: 'any',\n });\n\n if (requestState.headers) {\n requestState.headers.forEach((value, key) => {\n c.res.headers.append(key, value);\n });\n\n const locationHeader = requestState.headers.get('location');\n\n if (locationHeader) {\n return c.redirect(locationHeader, 307);\n } else if (requestState.status === 'handshake') {\n throw new Error('Clerk: Unexpected handshake without redirect');\n }\n }\n\n const authObjectFn = ((authOptions?: AuthOptions) =>\n getAuthObjectForAcceptedToken({\n authObject: requestState.toAuth(authOptions) as AuthObject,\n acceptsToken: authOptions?.acceptsToken,\n })) as GetAuthFnNoRequest;\n\n c.set('clerkAuth', authObjectFn);\n c.set('clerk', clerkClient);\n\n await next();\n };\n};\n","import type { AuthOptions, GetAuthFn } from '@clerk/backend/internal';\nimport type { Context } from 'hono';\n\n/**\n * Retrieves the Clerk auth object from the Hono context.\n * Must be used after clerkMiddleware() has been applied.\n *\n * @example\n * ```ts\n * app.get('/protected', (c) => {\n * const { userId } = getAuth(c);\n * if (!userId) {\n * return c.json({ error: 'Unauthorized' }, 401);\n * }\n * return c.json({ message: 'Hello!' });\n * });\n * ```\n *\n * @example Using acceptsToken for API keys\n * ```ts\n * app.get('/api', (c) => {\n * const auth = getAuth(c, { acceptsToken: 'api_key' });\n * // auth will be typed for API key tokens\n * });\n * ```\n */\nexport const getAuth: GetAuthFn<Context> = ((c: Context, options?: AuthOptions) => {\n const authFn = c.get('clerkAuth');\n\n if (!authFn) {\n throw new Error(\n 'Clerk: getAuth() called without clerkMiddleware() being applied. Make sure to use clerkMiddleware() before calling getAuth().',\n );\n }\n\n return authFn(options);\n}) as GetAuthFn<Context>;\n"],"mappings":";AACA,SAAS,yBAAyB;AAElC,SAAS,qCAAqC;AAC9C,SAAS,uBAAuB,oBAAoB,gBAAgB,4BAA4B;AAEhG,SAAS,WAAW;AAkCb,IAAM,kBAAkB,CAAC,YAAwD;AACtF,SAAO,OAAO,GAAG,SAAS;AACxB,UAAM,WAAW,IAAc,CAAC;AAChC,UAAM;AAAA,MACJ,YAAY,SAAS,oBAAoB;AAAA,MACzC,iBAAiB,SAAS,yBAAyB;AAAA,MACnD,mBAAmB,SAAS,4BAA4B;AAAA,MACxD,SAAS,SAAS;AAAA,MAClB,aAAa,SAAS;AAAA,MACtB;AAAA,MACA,GAAG;AAAA,IACL,IAAI,WAAW,CAAC;AAEhB,QAAI,CAAC,WAAW;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,QAAI,kBAAkB,KAAK;AAC3B,QAAI,kBAAkB;AACpB,YAAM,YAAY,qBAAqB,iBAAiB,QAAQ,kBAAkB,KAAK;AACvF,YAAM,aAAa,IAAI,IAAI,EAAE,IAAI,GAAG;AACpC,YAAM,YACJ,OAAO,iBAAiB,YAAY,aAChC,iBAAiB,QAAQ,UAAU,IACnC,iBAAiB;AAEvB,UAAI,WAAW;AACb,YAAI,eAAe,EAAE,IAAI,KAAK,EAAE,UAAU,CAAC,GAAG;AAC5C,iBAAO,sBAAsB,EAAE,IAAI,KAAK;AAAA,YACtC;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,CAAC,iBAAiB;AACpB,4BAAkB;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,kBAAkB;AAAA,MACpC,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,GAAG,aAAY,IAAI,+BAAe;AAAA,IAC/C,CAAC;AAED,UAAM,eAAe,MAAM,YAAY,oBAAoB,EAAE,IAAI,KAAK;AAAA,MACpE,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,aAAa,SAAS;AACxB,mBAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AAC3C,UAAE,IAAI,QAAQ,OAAO,KAAK,KAAK;AAAA,MACjC,CAAC;AAED,YAAM,iBAAiB,aAAa,QAAQ,IAAI,UAAU;AAE1D,UAAI,gBAAgB;AAClB,eAAO,EAAE,SAAS,gBAAgB,GAAG;AAAA,MACvC,WAAW,aAAa,WAAW,aAAa;AAC9C,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAAA,IACF;AAEA,UAAM,gBAAgB,CAAC,gBACrB,8BAA8B;AAAA,MAC5B,YAAY,aAAa,OAAO,WAAW;AAAA,MAC3C,cAAc,aAAa;AAAA,IAC7B,CAAC;AAEH,MAAE,IAAI,aAAa,YAAY;AAC/B,MAAE,IAAI,SAAS,WAAW;AAE1B,UAAM,KAAK;AAAA,EACb;AACF;;;AC5GO,IAAM,WAA+B,CAAC,GAAY,YAA0B;AACjF,QAAM,SAAS,EAAE,IAAI,WAAW;AAEhC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO,OAAO;AACvB;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clerk/hono",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22-canary.v20260430183935",
|
|
4
4
|
"description": "Clerk SDK for Hono",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"auth",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"dist"
|
|
60
60
|
],
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@clerk/backend": "
|
|
63
|
-
"@clerk/shared": "
|
|
62
|
+
"@clerk/backend": "3.4.4-canary.v20260430183935",
|
|
63
|
+
"@clerk/shared": "4.8.8-canary.v20260430183935"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"hono": "^4.12.14"
|