ras-stack 3.0.2 → 3.1.0

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.
@@ -1,4 +1,5 @@
1
1
  import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { currentServerFunction } from '../server/server-function.js';
2
3
  import { postHogRequestContext } from './request.js';
3
4
  export async function createPostHogServerClient(environment, options = {}) {
4
5
  if (!environment)
@@ -237,11 +238,17 @@ export function createPostHogRpcObserver(telemetry, options = {}) {
237
238
  if (!request)
238
239
  return work();
239
240
  const method = request.method.toUpperCase();
240
- const attributes = { method };
241
+ const identity = currentServerFunction();
242
+ // A function name is bounded by the application's code, unlike its URL or caller.
243
+ const attributes = identity ? { method, function: identity.name } : { method };
241
244
  const parent = request.headers.get('traceparent');
242
245
  return telemetry.withRequestContext(request, {}, () => telemetry.withSpan(spanName, { kind: 'server', ...(parent ? { parent } : {}) }, async (span) => {
243
246
  const startedAt = performance.now();
244
247
  span?.setAttribute('http.request.method', method);
248
+ if (identity) {
249
+ span?.setAttribute('code.function.name', identity.name);
250
+ span?.setAttribute('code.file.path', identity.filename);
251
+ }
245
252
  let outcome = 'error';
246
253
  try {
247
254
  const result = await work();
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/posthog/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\nimport type { CaptureMetricOptions, PostHog, PostHogOptions, Span, StartSpanOptions } from 'posthog-node'\nimport type { RpcErrorContext, RpcLogger, RpcObserver } from '../server/rpc.js'\nimport type { PostHogEnvironment } from './config.js'\nimport { postHogRequestContext, type PostHogRequestContextOptions } from './request.js'\n\ntype LogProvider = InstanceType<(typeof import('@opentelemetry/sdk-logs'))['LoggerProvider']>\n\nexport type PostHogLogValue = string | number | boolean | null | PostHogLogValue[]\n\nexport type PostHogLogRecord = {\n body: string\n severityText?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'\n timestamp?: number\n attributes?: Record<string, unknown>\n}\n\nexport type ManagedPostHogServerTelemetryOptions = {\n environment: PostHogEnvironment | undefined\n serviceName: string\n serviceVersion?: string\n deploymentEnvironment?: string\n resourceAttributes?: Record<string, string>\n clientOptions?: Omit<PostHogOptions, 'host'>\n onError?: (error: unknown) => void\n}\n\nexport type PostHogServerTelemetry = ReturnType<typeof createManagedPostHogServerTelemetry>\n\nexport type PostHogTelemetryContext = {\n distinctId?: string\n sessionId?: string\n properties?: Record<string, unknown>\n}\n\nexport type PostHogTraceSpan = Span | undefined\n\nexport type PostHogRpcLoggerOptions = {\n logError?: (error: unknown, context: RpcErrorContext) => void\n resolveAuthenticatedDistinctId?: (request: Request) => string | undefined | Promise<string | undefined>\n allowAnonymousDistinctId?: boolean\n fallbackDistinctId?: string\n}\n\nexport type PostHogRpcObserverOptions = {\n metricPrefix?: string\n spanName?: string\n}\n\ntype PostHogShutdownProcess = {\n pid: number\n on(signal: 'SIGINT' | 'SIGTERM', listener: () => void): void\n off(signal: 'SIGINT' | 'SIGTERM', listener: () => void): void\n kill(pid: number, signal: 'SIGINT' | 'SIGTERM'): void\n}\n\nexport async function createPostHogServerClient(\n environment: PostHogEnvironment | undefined,\n options: Omit<PostHogOptions, 'host'> = {},\n): Promise<PostHog | undefined> {\n if (!environment) return undefined\n const { PostHog } = await import('posthog-node')\n return new PostHog(environment.projectToken, {\n host: environment.host,\n enableExceptionAutocapture: true,\n ...options,\n })\n}\n\nexport async function shutdownPostHogServerClient(client: PostHog | undefined, timeoutMs = 10_000) {\n assertShutdownTimeout(timeoutMs)\n // oxlint-disable-next-line no-underscore-dangle -- posthog-node's async shutdown API is named `_shutdown`.\n await client?._shutdown(timeoutMs)\n}\n\nexport function createManagedPostHogServerTelemetry(options: ManagedPostHogServerTelemetryOptions) {\n let client: Promise<PostHog | undefined> | undefined\n let logProvider: Promise<LogProvider | undefined> | undefined\n let closed = false\n const context = new AsyncLocalStorage<PostHogTelemetryContext>()\n\n const report = (error: unknown) => {\n try {\n options.onError?.(error)\n } catch {}\n }\n\n const getClient = () => {\n if (closed || !options.environment) return undefined\n if (!client) {\n const pending = createPostHogServerClient(options.environment, managedClientOptions(options))\n client = pending\n void pending.catch(() => {\n if (client === pending) client = undefined\n })\n }\n return client\n }\n\n const getLogProvider = () => {\n if (closed || !options.environment) return undefined\n if (!logProvider) {\n const pending = createPostHogLogProvider(options)\n logProvider = pending\n void pending.catch(() => {\n if (logProvider === pending) logProvider = undefined\n })\n }\n return logProvider\n }\n\n const safely = async (work: () => void | Promise<void>) => {\n if (closed || !options.environment) return\n try {\n await work()\n } catch (error) {\n report(error)\n }\n }\n\n const loadClient = async () => {\n try {\n return await getClient()\n } catch (error) {\n report(error)\n return undefined\n }\n }\n\n async function withContext<T>(telemetryContext: PostHogTelemetryContext, work: () => T): Promise<Awaited<T>> {\n const inherited = context.getStore()\n const correlation = {\n ...(inherited?.distinctId ? { distinctId: inherited.distinctId } : {}),\n ...(inherited?.sessionId ? { sessionId: inherited.sessionId } : {}),\n ...telemetryContext,\n }\n const requestContext: PostHogTelemetryContext = {\n ...(correlation.distinctId ? { distinctId: correlation.distinctId } : {}),\n ...(correlation.sessionId ? { sessionId: correlation.sessionId } : {}),\n properties: {\n ...inherited?.properties,\n ...telemetryContext.properties,\n ...(correlation.sessionId ? { $session_id: correlation.sessionId } : {}),\n },\n }\n const run = () => context.run(requestContext, work)\n const value = await loadClient()\n return (value ? value.withContext(telemetryContext, run) : run()) as Awaited<T>\n }\n\n async function withRequestContext<T>(request: Request, requestOptions: PostHogRequestContextOptions, work: () => T): Promise<Awaited<T>> {\n const correlation = postHogRequestContext(request, requestOptions)\n return withContext(\n {\n ...(correlation.distinctId ? { distinctId: correlation.distinctId } : {}),\n ...(correlation.sessionId ? { sessionId: correlation.sessionId } : {}),\n },\n work,\n )\n }\n\n async function withSpan<T>(name: string, work: (span: PostHogTraceSpan) => T): Promise<Awaited<T>>\n async function withSpan<T>(name: string, spanOptions: StartSpanOptions, work: (span: PostHogTraceSpan) => T): Promise<Awaited<T>>\n async function withSpan<T>(\n name: string,\n optionsOrWork: StartSpanOptions | ((span: PostHogTraceSpan) => T),\n maybeWork?: (span: PostHogTraceSpan) => T,\n ): Promise<Awaited<T>> {\n const spanOptions = typeof optionsOrWork === 'function' ? undefined : optionsOrWork\n const work = typeof optionsOrWork === 'function' ? optionsOrWork : maybeWork!\n const value = await loadClient()\n if (!value) return work(undefined) as Awaited<T>\n return (spanOptions ? value.withSpan(name, spanOptions, work) : value.withSpan(name, work)) as Awaited<T>\n }\n\n const metrics = {\n count(name: string, value = 1, metricOptions?: CaptureMetricOptions) {\n return safely(async () => (await getClient())?.metrics.count(name, value, metricOptions))\n },\n gauge(name: string, value: number, metricOptions?: CaptureMetricOptions) {\n return safely(async () => (await getClient())?.metrics.gauge(name, value, metricOptions))\n },\n histogram(name: string, value: number, metricOptions?: CaptureMetricOptions) {\n return safely(async () => (await getClient())?.metrics.histogram(name, value, metricOptions))\n },\n }\n\n return {\n metrics,\n async start() {\n await safely(async () => {\n await Promise.all([getClient(), getLogProvider()])\n })\n },\n async capture(distinctId: string, event: string, properties?: Record<string, unknown>) {\n await safely(async () => {\n const value = await getClient()\n value?.capture({ distinctId, event, ...(properties ? { properties } : {}) })\n })\n },\n async exception(error: unknown, distinctId?: string, properties?: Record<string, unknown>) {\n await safely(async () => {\n const value = await getClient()\n const correlation = context.getStore()\n const capturedProperties = mergeProperties(properties, correlation?.properties)\n value?.captureException(error, distinctId ?? correlation?.distinctId ?? 'server', capturedProperties)\n })\n },\n async log(record: PostHogLogRecord) {\n await safely(async () => {\n const provider = await getLogProvider()\n const correlation = context.getStore()\n const attributes = boundedAttributes(\n mergeProperties(record.attributes, {\n ...(correlation?.distinctId ? { posthogDistinctId: correlation.distinctId } : {}),\n ...(correlation?.sessionId ? { sessionId: correlation.sessionId } : {}),\n }),\n )\n provider?.getLogger(options.serviceName).emit({\n body: boundedString(record.body),\n ...(record.severityText ? { severityText: record.severityText } : {}),\n ...(record.timestamp === undefined ? {} : { timestamp: record.timestamp }),\n ...(attributes ? { attributes } : {}),\n })\n })\n },\n async flush() {\n await safely(async () => {\n const [value, provider] = await Promise.all([getClient(), getLogProvider()])\n await Promise.all([value?.flush(), provider?.forceFlush()])\n })\n },\n async startSpan(name: string, spanOptions?: StartSpanOptions) {\n return (await loadClient())?.startSpan(name, spanOptions)\n },\n withContext,\n withRequestContext,\n withSpan,\n async shutdown(timeoutMs = 10_000) {\n if (closed) return\n assertShutdownTimeout(timeoutMs)\n closed = true\n const results = await Promise.allSettled([\n client?.then((value) => shutdownPostHogServerClient(value, timeoutMs)),\n logProvider?.then((value) => shutdownPostHogLogProvider(value, timeoutMs)),\n ])\n for (const result of results) if (result.status === 'rejected') report(result.reason)\n },\n }\n}\n\nfunction managedClientOptions(options: ManagedPostHogServerTelemetryOptions): Omit<PostHogOptions, 'host'> {\n const { metrics, traces, ...clientOptions } = options.clientOptions ?? {}\n const service = {\n serviceName: options.serviceName,\n ...(options.serviceVersion ? { serviceVersion: options.serviceVersion } : {}),\n ...(options.deploymentEnvironment ? { environment: options.deploymentEnvironment } : {}),\n ...(options.resourceAttributes ? { resourceAttributes: options.resourceAttributes } : {}),\n }\n return {\n ...clientOptions,\n metrics: { ...service, ...metrics },\n traces: { ...service, ...traces },\n }\n}\n\nexport function createPostHogRpcLogger(telemetry: PostHogServerTelemetry, options: PostHogRpcLoggerOptions = {}): RpcLogger {\n return async (error, context, request) => {\n try {\n options.logError?.(error, context)\n } catch {}\n let authenticatedDistinctId: string | undefined\n if (request && options.resolveAuthenticatedDistinctId) {\n try {\n authenticatedDistinctId = await options.resolveAuthenticatedDistinctId(request)\n } catch {}\n }\n const correlation = request\n ? postHogRequestContext(request, {\n ...(authenticatedDistinctId ? { authenticatedDistinctId } : {}),\n ...(options.allowAnonymousDistinctId === undefined ? {} : { allowAnonymousDistinctId: options.allowAnonymousDistinctId }),\n })\n : { properties: {} }\n const distinctId = correlation.distinctId ?? options.fallbackDistinctId ?? 'server'\n const properties = {\n ...correlation.properties,\n ...(context.method ? { request_method: context.method } : {}),\n ...(context.path ? { request_path: context.path } : {}),\n }\n await Promise.all([\n telemetry.exception(error, distinctId, properties),\n telemetry.log({\n body: 'server function failed',\n severityText: 'error',\n attributes: { ...properties, posthogDistinctId: distinctId },\n }),\n ])\n }\n}\n\nexport function createPostHogRpcObserver(\n telemetry: Pick<PostHogServerTelemetry, 'metrics' | 'withRequestContext' | 'withSpan'>,\n options: PostHogRpcObserverOptions = {},\n): RpcObserver {\n const metricPrefix = options.metricPrefix ?? 'server_function'\n const spanName = options.spanName ?? 'server_function'\n return async function observe<T>(request: Request | undefined, work: () => Promise<T>) {\n if (!request) return work()\n const method = request.method.toUpperCase()\n const attributes = { method }\n const parent = request.headers.get('traceparent')\n return telemetry.withRequestContext(request, {}, () =>\n telemetry.withSpan(spanName, { kind: 'server', ...(parent ? { parent } : {}) }, async (span) => {\n const startedAt = performance.now()\n span?.setAttribute('http.request.method', method)\n let outcome = 'error'\n try {\n const result = await work()\n outcome = 'success'\n return result\n } finally {\n span?.setAttribute('server.function.outcome', outcome)\n await Promise.all([\n telemetry.metrics.count(`${metricPrefix}.requests`, 1, { attributes: { ...attributes, outcome } }),\n telemetry.metrics.histogram(`${metricPrefix}.duration`, Math.max(0, performance.now() - startedAt), {\n unit: 'ms',\n attributes,\n }),\n ])\n }\n }),\n )\n }\n}\n\nexport function installPostHogServerTelemetryShutdown(\n telemetry: Pick<PostHogServerTelemetry, 'shutdown'>,\n target: PostHogShutdownProcess = process,\n) {\n let shuttingDown = false\n const listeners = new Map<'SIGINT' | 'SIGTERM', () => void>()\n const remove = () => {\n for (const [signal, listener] of listeners) target.off(signal, listener)\n listeners.clear()\n }\n for (const signal of ['SIGINT', 'SIGTERM'] as const) {\n const listener = () => {\n if (shuttingDown) return\n shuttingDown = true\n void telemetry\n .shutdown()\n .catch(() => undefined)\n .finally(() => {\n remove()\n target.kill(target.pid, signal)\n })\n }\n listeners.set(signal, listener)\n target.on(signal, listener)\n }\n return remove\n}\n\nasync function createPostHogLogProvider(options: ManagedPostHogServerTelemetryOptions): Promise<LogProvider | undefined> {\n if (!options.environment) return undefined\n const [{ OTLPLogExporter }, { resourceFromAttributes }, { BatchLogRecordProcessor, LoggerProvider }] = await Promise.all([\n import('@opentelemetry/exporter-logs-otlp-http'),\n import('@opentelemetry/resources'),\n import('@opentelemetry/sdk-logs'),\n ])\n const exporter = new OTLPLogExporter({\n url: `${options.environment.host.replace(/\\/$/, '')}/i/v1/logs`,\n headers: { Authorization: `Bearer ${options.environment.projectToken}` },\n })\n return new LoggerProvider({\n resource: resourceFromAttributes({\n 'service.name': options.serviceName,\n ...(options.serviceVersion ? { 'service.version': options.serviceVersion } : {}),\n ...(options.deploymentEnvironment ? { 'deployment.environment': options.deploymentEnvironment } : {}),\n ...options.resourceAttributes,\n }),\n processors: [new BatchLogRecordProcessor({ exporter })],\n })\n}\n\nfunction mergeProperties(...values: Array<Record<string, unknown> | undefined>) {\n const merged = Object.assign({}, ...values.filter(Boolean))\n return Object.keys(merged).length ? merged : undefined\n}\n\nfunction boundedAttributes(attributes: Record<string, unknown> | undefined) {\n if (!attributes) return undefined\n return Object.fromEntries(\n Object.entries(attributes)\n .slice(0, 64)\n .map(([key, value]) => [key.slice(0, 128), boundedLogValue(value, 0)])\n .filter((entry): entry is [string, PostHogLogValue] => entry[1] !== undefined),\n )\n}\n\nfunction boundedLogValue(value: unknown, depth: number): PostHogLogValue | undefined {\n if (value === null || typeof value === 'number' || typeof value === 'boolean') return value\n if (typeof value === 'string') return boundedString(value)\n if (depth >= 3) return '[Truncated]'\n if (Array.isArray(value)) {\n return value\n .slice(0, 32)\n .map((entry) => boundedLogValue(entry, depth + 1))\n .filter((entry): entry is PostHogLogValue => entry !== undefined)\n }\n if (value === undefined) return undefined\n try {\n return boundedString(JSON.stringify(value))\n } catch {\n return '[Unserializable value]'\n }\n}\n\nfunction boundedString(value: string) {\n return value.slice(0, 2_048)\n}\n\nasync function shutdownPostHogLogProvider(provider: LogProvider | undefined, timeoutMs: number) {\n if (!provider) return\n let timeout: ReturnType<typeof setTimeout> | undefined\n try {\n await Promise.race([\n provider.shutdown(),\n new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => reject(new Error(`PostHog log shutdown timed out after ${timeoutMs}ms`)), timeoutMs)\n timeout.unref?.()\n }),\n ])\n } finally {\n if (timeout) clearTimeout(timeout)\n }\n}\n\nfunction assertShutdownTimeout(timeoutMs: number) {\n if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 0) throw new Error('timeoutMs must be a non-negative integer')\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/posthog/server.ts"],"names":[],"mappings":"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","sourcesContent":["import { AsyncLocalStorage } from 'node:async_hooks'\nimport type { CaptureMetricOptions, PostHog, PostHogOptions, Span, StartSpanOptions } from 'posthog-node'\nimport type { RpcErrorContext, RpcLogger, RpcObserver } from '../server/rpc.js'\nimport { currentServerFunction } from '../server/server-function.js'\nimport type { PostHogEnvironment } from './config.js'\nimport { postHogRequestContext, type PostHogRequestContextOptions } from './request.js'\n\ntype LogProvider = InstanceType<(typeof import('@opentelemetry/sdk-logs'))['LoggerProvider']>\n\nexport type PostHogLogValue = string | number | boolean | null | PostHogLogValue[]\n\nexport type PostHogLogRecord = {\n body: string\n severityText?: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal'\n timestamp?: number\n attributes?: Record<string, unknown>\n}\n\nexport type ManagedPostHogServerTelemetryOptions = {\n environment: PostHogEnvironment | undefined\n serviceName: string\n serviceVersion?: string\n deploymentEnvironment?: string\n resourceAttributes?: Record<string, string>\n clientOptions?: Omit<PostHogOptions, 'host'>\n onError?: (error: unknown) => void\n}\n\nexport type PostHogServerTelemetry = ReturnType<typeof createManagedPostHogServerTelemetry>\n\nexport type PostHogTelemetryContext = {\n distinctId?: string\n sessionId?: string\n properties?: Record<string, unknown>\n}\n\nexport type PostHogTraceSpan = Span | undefined\n\nexport type PostHogRpcLoggerOptions = {\n logError?: (error: unknown, context: RpcErrorContext) => void\n resolveAuthenticatedDistinctId?: (request: Request) => string | undefined | Promise<string | undefined>\n allowAnonymousDistinctId?: boolean\n fallbackDistinctId?: string\n}\n\nexport type PostHogRpcObserverOptions = {\n metricPrefix?: string\n spanName?: string\n}\n\ntype PostHogShutdownProcess = {\n pid: number\n on(signal: 'SIGINT' | 'SIGTERM', listener: () => void): void\n off(signal: 'SIGINT' | 'SIGTERM', listener: () => void): void\n kill(pid: number, signal: 'SIGINT' | 'SIGTERM'): void\n}\n\nexport async function createPostHogServerClient(\n environment: PostHogEnvironment | undefined,\n options: Omit<PostHogOptions, 'host'> = {},\n): Promise<PostHog | undefined> {\n if (!environment) return undefined\n const { PostHog } = await import('posthog-node')\n return new PostHog(environment.projectToken, {\n host: environment.host,\n enableExceptionAutocapture: true,\n ...options,\n })\n}\n\nexport async function shutdownPostHogServerClient(client: PostHog | undefined, timeoutMs = 10_000) {\n assertShutdownTimeout(timeoutMs)\n // oxlint-disable-next-line no-underscore-dangle -- posthog-node's async shutdown API is named `_shutdown`.\n await client?._shutdown(timeoutMs)\n}\n\nexport function createManagedPostHogServerTelemetry(options: ManagedPostHogServerTelemetryOptions) {\n let client: Promise<PostHog | undefined> | undefined\n let logProvider: Promise<LogProvider | undefined> | undefined\n let closed = false\n const context = new AsyncLocalStorage<PostHogTelemetryContext>()\n\n const report = (error: unknown) => {\n try {\n options.onError?.(error)\n } catch {}\n }\n\n const getClient = () => {\n if (closed || !options.environment) return undefined\n if (!client) {\n const pending = createPostHogServerClient(options.environment, managedClientOptions(options))\n client = pending\n void pending.catch(() => {\n if (client === pending) client = undefined\n })\n }\n return client\n }\n\n const getLogProvider = () => {\n if (closed || !options.environment) return undefined\n if (!logProvider) {\n const pending = createPostHogLogProvider(options)\n logProvider = pending\n void pending.catch(() => {\n if (logProvider === pending) logProvider = undefined\n })\n }\n return logProvider\n }\n\n const safely = async (work: () => void | Promise<void>) => {\n if (closed || !options.environment) return\n try {\n await work()\n } catch (error) {\n report(error)\n }\n }\n\n const loadClient = async () => {\n try {\n return await getClient()\n } catch (error) {\n report(error)\n return undefined\n }\n }\n\n async function withContext<T>(telemetryContext: PostHogTelemetryContext, work: () => T): Promise<Awaited<T>> {\n const inherited = context.getStore()\n const correlation = {\n ...(inherited?.distinctId ? { distinctId: inherited.distinctId } : {}),\n ...(inherited?.sessionId ? { sessionId: inherited.sessionId } : {}),\n ...telemetryContext,\n }\n const requestContext: PostHogTelemetryContext = {\n ...(correlation.distinctId ? { distinctId: correlation.distinctId } : {}),\n ...(correlation.sessionId ? { sessionId: correlation.sessionId } : {}),\n properties: {\n ...inherited?.properties,\n ...telemetryContext.properties,\n ...(correlation.sessionId ? { $session_id: correlation.sessionId } : {}),\n },\n }\n const run = () => context.run(requestContext, work)\n const value = await loadClient()\n return (value ? value.withContext(telemetryContext, run) : run()) as Awaited<T>\n }\n\n async function withRequestContext<T>(request: Request, requestOptions: PostHogRequestContextOptions, work: () => T): Promise<Awaited<T>> {\n const correlation = postHogRequestContext(request, requestOptions)\n return withContext(\n {\n ...(correlation.distinctId ? { distinctId: correlation.distinctId } : {}),\n ...(correlation.sessionId ? { sessionId: correlation.sessionId } : {}),\n },\n work,\n )\n }\n\n async function withSpan<T>(name: string, work: (span: PostHogTraceSpan) => T): Promise<Awaited<T>>\n async function withSpan<T>(name: string, spanOptions: StartSpanOptions, work: (span: PostHogTraceSpan) => T): Promise<Awaited<T>>\n async function withSpan<T>(\n name: string,\n optionsOrWork: StartSpanOptions | ((span: PostHogTraceSpan) => T),\n maybeWork?: (span: PostHogTraceSpan) => T,\n ): Promise<Awaited<T>> {\n const spanOptions = typeof optionsOrWork === 'function' ? undefined : optionsOrWork\n const work = typeof optionsOrWork === 'function' ? optionsOrWork : maybeWork!\n const value = await loadClient()\n if (!value) return work(undefined) as Awaited<T>\n return (spanOptions ? value.withSpan(name, spanOptions, work) : value.withSpan(name, work)) as Awaited<T>\n }\n\n const metrics = {\n count(name: string, value = 1, metricOptions?: CaptureMetricOptions) {\n return safely(async () => (await getClient())?.metrics.count(name, value, metricOptions))\n },\n gauge(name: string, value: number, metricOptions?: CaptureMetricOptions) {\n return safely(async () => (await getClient())?.metrics.gauge(name, value, metricOptions))\n },\n histogram(name: string, value: number, metricOptions?: CaptureMetricOptions) {\n return safely(async () => (await getClient())?.metrics.histogram(name, value, metricOptions))\n },\n }\n\n return {\n metrics,\n async start() {\n await safely(async () => {\n await Promise.all([getClient(), getLogProvider()])\n })\n },\n async capture(distinctId: string, event: string, properties?: Record<string, unknown>) {\n await safely(async () => {\n const value = await getClient()\n value?.capture({ distinctId, event, ...(properties ? { properties } : {}) })\n })\n },\n async exception(error: unknown, distinctId?: string, properties?: Record<string, unknown>) {\n await safely(async () => {\n const value = await getClient()\n const correlation = context.getStore()\n const capturedProperties = mergeProperties(properties, correlation?.properties)\n value?.captureException(error, distinctId ?? correlation?.distinctId ?? 'server', capturedProperties)\n })\n },\n async log(record: PostHogLogRecord) {\n await safely(async () => {\n const provider = await getLogProvider()\n const correlation = context.getStore()\n const attributes = boundedAttributes(\n mergeProperties(record.attributes, {\n ...(correlation?.distinctId ? { posthogDistinctId: correlation.distinctId } : {}),\n ...(correlation?.sessionId ? { sessionId: correlation.sessionId } : {}),\n }),\n )\n provider?.getLogger(options.serviceName).emit({\n body: boundedString(record.body),\n ...(record.severityText ? { severityText: record.severityText } : {}),\n ...(record.timestamp === undefined ? {} : { timestamp: record.timestamp }),\n ...(attributes ? { attributes } : {}),\n })\n })\n },\n async flush() {\n await safely(async () => {\n const [value, provider] = await Promise.all([getClient(), getLogProvider()])\n await Promise.all([value?.flush(), provider?.forceFlush()])\n })\n },\n async startSpan(name: string, spanOptions?: StartSpanOptions) {\n return (await loadClient())?.startSpan(name, spanOptions)\n },\n withContext,\n withRequestContext,\n withSpan,\n async shutdown(timeoutMs = 10_000) {\n if (closed) return\n assertShutdownTimeout(timeoutMs)\n closed = true\n const results = await Promise.allSettled([\n client?.then((value) => shutdownPostHogServerClient(value, timeoutMs)),\n logProvider?.then((value) => shutdownPostHogLogProvider(value, timeoutMs)),\n ])\n for (const result of results) if (result.status === 'rejected') report(result.reason)\n },\n }\n}\n\nfunction managedClientOptions(options: ManagedPostHogServerTelemetryOptions): Omit<PostHogOptions, 'host'> {\n const { metrics, traces, ...clientOptions } = options.clientOptions ?? {}\n const service = {\n serviceName: options.serviceName,\n ...(options.serviceVersion ? { serviceVersion: options.serviceVersion } : {}),\n ...(options.deploymentEnvironment ? { environment: options.deploymentEnvironment } : {}),\n ...(options.resourceAttributes ? { resourceAttributes: options.resourceAttributes } : {}),\n }\n return {\n ...clientOptions,\n metrics: { ...service, ...metrics },\n traces: { ...service, ...traces },\n }\n}\n\nexport function createPostHogRpcLogger(telemetry: PostHogServerTelemetry, options: PostHogRpcLoggerOptions = {}): RpcLogger {\n return async (error, context, request) => {\n try {\n options.logError?.(error, context)\n } catch {}\n let authenticatedDistinctId: string | undefined\n if (request && options.resolveAuthenticatedDistinctId) {\n try {\n authenticatedDistinctId = await options.resolveAuthenticatedDistinctId(request)\n } catch {}\n }\n const correlation = request\n ? postHogRequestContext(request, {\n ...(authenticatedDistinctId ? { authenticatedDistinctId } : {}),\n ...(options.allowAnonymousDistinctId === undefined ? {} : { allowAnonymousDistinctId: options.allowAnonymousDistinctId }),\n })\n : { properties: {} }\n const distinctId = correlation.distinctId ?? options.fallbackDistinctId ?? 'server'\n const properties = {\n ...correlation.properties,\n ...(context.method ? { request_method: context.method } : {}),\n ...(context.path ? { request_path: context.path } : {}),\n }\n await Promise.all([\n telemetry.exception(error, distinctId, properties),\n telemetry.log({\n body: 'server function failed',\n severityText: 'error',\n attributes: { ...properties, posthogDistinctId: distinctId },\n }),\n ])\n }\n}\n\nexport function createPostHogRpcObserver(\n telemetry: Pick<PostHogServerTelemetry, 'metrics' | 'withRequestContext' | 'withSpan'>,\n options: PostHogRpcObserverOptions = {},\n): RpcObserver {\n const metricPrefix = options.metricPrefix ?? 'server_function'\n const spanName = options.spanName ?? 'server_function'\n return async function observe<T>(request: Request | undefined, work: () => Promise<T>) {\n if (!request) return work()\n const method = request.method.toUpperCase()\n const identity = currentServerFunction()\n // A function name is bounded by the application's code, unlike its URL or caller.\n const attributes = identity ? { method, function: identity.name } : { method }\n const parent = request.headers.get('traceparent')\n return telemetry.withRequestContext(request, {}, () =>\n telemetry.withSpan(spanName, { kind: 'server', ...(parent ? { parent } : {}) }, async (span) => {\n const startedAt = performance.now()\n span?.setAttribute('http.request.method', method)\n if (identity) {\n span?.setAttribute('code.function.name', identity.name)\n span?.setAttribute('code.file.path', identity.filename)\n }\n let outcome = 'error'\n try {\n const result = await work()\n outcome = 'success'\n return result\n } finally {\n span?.setAttribute('server.function.outcome', outcome)\n await Promise.all([\n telemetry.metrics.count(`${metricPrefix}.requests`, 1, { attributes: { ...attributes, outcome } }),\n telemetry.metrics.histogram(`${metricPrefix}.duration`, Math.max(0, performance.now() - startedAt), {\n unit: 'ms',\n attributes,\n }),\n ])\n }\n }),\n )\n }\n}\n\nexport function installPostHogServerTelemetryShutdown(\n telemetry: Pick<PostHogServerTelemetry, 'shutdown'>,\n target: PostHogShutdownProcess = process,\n) {\n let shuttingDown = false\n const listeners = new Map<'SIGINT' | 'SIGTERM', () => void>()\n const remove = () => {\n for (const [signal, listener] of listeners) target.off(signal, listener)\n listeners.clear()\n }\n for (const signal of ['SIGINT', 'SIGTERM'] as const) {\n const listener = () => {\n if (shuttingDown) return\n shuttingDown = true\n void telemetry\n .shutdown()\n .catch(() => undefined)\n .finally(() => {\n remove()\n target.kill(target.pid, signal)\n })\n }\n listeners.set(signal, listener)\n target.on(signal, listener)\n }\n return remove\n}\n\nasync function createPostHogLogProvider(options: ManagedPostHogServerTelemetryOptions): Promise<LogProvider | undefined> {\n if (!options.environment) return undefined\n const [{ OTLPLogExporter }, { resourceFromAttributes }, { BatchLogRecordProcessor, LoggerProvider }] = await Promise.all([\n import('@opentelemetry/exporter-logs-otlp-http'),\n import('@opentelemetry/resources'),\n import('@opentelemetry/sdk-logs'),\n ])\n const exporter = new OTLPLogExporter({\n url: `${options.environment.host.replace(/\\/$/, '')}/i/v1/logs`,\n headers: { Authorization: `Bearer ${options.environment.projectToken}` },\n })\n return new LoggerProvider({\n resource: resourceFromAttributes({\n 'service.name': options.serviceName,\n ...(options.serviceVersion ? { 'service.version': options.serviceVersion } : {}),\n ...(options.deploymentEnvironment ? { 'deployment.environment': options.deploymentEnvironment } : {}),\n ...options.resourceAttributes,\n }),\n processors: [new BatchLogRecordProcessor({ exporter })],\n })\n}\n\nfunction mergeProperties(...values: Array<Record<string, unknown> | undefined>) {\n const merged = Object.assign({}, ...values.filter(Boolean))\n return Object.keys(merged).length ? merged : undefined\n}\n\nfunction boundedAttributes(attributes: Record<string, unknown> | undefined) {\n if (!attributes) return undefined\n return Object.fromEntries(\n Object.entries(attributes)\n .slice(0, 64)\n .map(([key, value]) => [key.slice(0, 128), boundedLogValue(value, 0)])\n .filter((entry): entry is [string, PostHogLogValue] => entry[1] !== undefined),\n )\n}\n\nfunction boundedLogValue(value: unknown, depth: number): PostHogLogValue | undefined {\n if (value === null || typeof value === 'number' || typeof value === 'boolean') return value\n if (typeof value === 'string') return boundedString(value)\n if (depth >= 3) return '[Truncated]'\n if (Array.isArray(value)) {\n return value\n .slice(0, 32)\n .map((entry) => boundedLogValue(entry, depth + 1))\n .filter((entry): entry is PostHogLogValue => entry !== undefined)\n }\n if (value === undefined) return undefined\n try {\n return boundedString(JSON.stringify(value))\n } catch {\n return '[Unserializable value]'\n }\n}\n\nfunction boundedString(value: string) {\n return value.slice(0, 2_048)\n}\n\nasync function shutdownPostHogLogProvider(provider: LogProvider | undefined, timeoutMs: number) {\n if (!provider) return\n let timeout: ReturnType<typeof setTimeout> | undefined\n try {\n await Promise.race([\n provider.shutdown(),\n new Promise<never>((_resolve, reject) => {\n timeout = setTimeout(() => reject(new Error(`PostHog log shutdown timed out after ${timeoutMs}ms`)), timeoutMs)\n timeout.unref?.()\n }),\n ])\n } finally {\n if (timeout) clearTimeout(timeout)\n }\n}\n\nfunction assertShutdownTimeout(timeoutMs: number) {\n if (!Number.isSafeInteger(timeoutMs) || timeoutMs < 0) throw new Error('timeoutMs must be a non-negative integer')\n}\n"]}
@@ -7,5 +7,7 @@ export type { HealthResponseOptions } from './health.js';
7
7
  export { createRateLimit, forwardedClientAddress, memoryRateLimitStore, rateLimitTable } from './rate-limit.js';
8
8
  export type { RateLimitCounter, RateLimitDecision, RateLimitOptions, RateLimitStore } from './rate-limit.js';
9
9
  export { createRpc } from './rpc.js';
10
+ export { currentServerFunction, withServerFunction } from './server-function.js';
11
+ export type { ServerFunctionIdentity } from './server-function.js';
10
12
  export type { RpcErrorContext, RpcLogger, RpcObserver, RpcOptions } from './rpc.js';
11
13
  export { clearGlobalSingleton, globalAsyncSingleton, globalSingleton, peekGlobalSingleton } from './singleton.js';
@@ -3,5 +3,6 @@ export { errorHasCode, infrastructureDiagnostic, infrastructureFailure, Infrastr
3
3
  export { databaseHealthFailure, healthResponse } from './health.js';
4
4
  export { createRateLimit, forwardedClientAddress, memoryRateLimitStore, rateLimitTable } from './rate-limit.js';
5
5
  export { createRpc } from './rpc.js';
6
+ export { currentServerFunction, withServerFunction } from './server-function.js';
6
7
  export { clearGlobalSingleton, globalAsyncSingleton, globalSingleton, peekGlobalSingleton } from './singleton.js';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAEzI,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE/G,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA","sourcesContent":["export { canonicalRedirect } from './canonical-host.js'\nexport type { CanonicalRedirectOptions } from './canonical-host.js'\nexport { errorHasCode, infrastructureDiagnostic, infrastructureFailure, InfrastructureError, safeInfrastructureError } from './errors.js'\nexport type { InfrastructureFailure } from './errors.js'\nexport { databaseHealthFailure, healthResponse } from './health.js'\nexport type { HealthResponseOptions } from './health.js'\nexport { createRateLimit, forwardedClientAddress, memoryRateLimitStore, rateLimitTable } from './rate-limit.js'\nexport type { RateLimitCounter, RateLimitDecision, RateLimitOptions, RateLimitStore } from './rate-limit.js'\nexport { createRpc } from './rpc.js'\nexport type { RpcErrorContext, RpcLogger, RpcObserver, RpcOptions } from './rpc.js'\nexport { clearGlobalSingleton, globalAsyncSingleton, globalSingleton, peekGlobalSingleton } from './singleton.js'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAEzI,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEnE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAE/G,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAGhF,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA","sourcesContent":["export { canonicalRedirect } from './canonical-host.js'\nexport type { CanonicalRedirectOptions } from './canonical-host.js'\nexport { errorHasCode, infrastructureDiagnostic, infrastructureFailure, InfrastructureError, safeInfrastructureError } from './errors.js'\nexport type { InfrastructureFailure } from './errors.js'\nexport { databaseHealthFailure, healthResponse } from './health.js'\nexport type { HealthResponseOptions } from './health.js'\nexport { createRateLimit, forwardedClientAddress, memoryRateLimitStore, rateLimitTable } from './rate-limit.js'\nexport type { RateLimitCounter, RateLimitDecision, RateLimitOptions, RateLimitStore } from './rate-limit.js'\nexport { createRpc } from './rpc.js'\nexport { currentServerFunction, withServerFunction } from './server-function.js'\nexport type { ServerFunctionIdentity } from './server-function.js'\nexport type { RpcErrorContext, RpcLogger, RpcObserver, RpcOptions } from './rpc.js'\nexport { clearGlobalSingleton, globalAsyncSingleton, globalSingleton, peekGlobalSingleton } from './singleton.js'\n"]}
@@ -0,0 +1,8 @@
1
+ /** The server function a call runs, as the framework's compiler names it. */
2
+ export type ServerFunctionIdentity = {
3
+ name: string;
4
+ filename: string;
5
+ };
6
+ /** Runs work with its server function's identity available to telemetry recorded inside it. */
7
+ export declare function withServerFunction<T>(identity: ServerFunctionIdentity, work: () => T): T;
8
+ export declare function currentServerFunction(): ServerFunctionIdentity | undefined;
@@ -0,0 +1,18 @@
1
+ let storage;
2
+ // Resolved through the running process, so a browser bundle that includes framework middleware never loads a Node module.
3
+ function identityStorage() {
4
+ if (storage === undefined) {
5
+ const hooks = globalThis.process?.getBuiltinModule?.('node:async_hooks');
6
+ storage = hooks ? new hooks.AsyncLocalStorage() : null;
7
+ }
8
+ return storage;
9
+ }
10
+ /** Runs work with its server function's identity available to telemetry recorded inside it. */
11
+ export function withServerFunction(identity, work) {
12
+ const current = identityStorage();
13
+ return current ? current.run(identity, work) : work();
14
+ }
15
+ export function currentServerFunction() {
16
+ return identityStorage()?.getStore();
17
+ }
18
+ //# sourceMappingURL=server-function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-function.js","sourceRoot":"","sources":["../../src/server/server-function.ts"],"names":[],"mappings":"AAOA,IAAI,OAAqE,CAAA;AAEzE,0HAA0H;AAC1H,SAAS,eAAe;IACtB,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAI,UAAwC,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,kBAAkB,CAAC,CAAA;QACvG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,iBAAiB,EAA0B,CAAC,CAAC,CAAC,IAAI,CAAA;IAChF,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,kBAAkB,CAAI,QAAgC,EAAE,IAAa;IACnF,MAAM,OAAO,GAAG,eAAe,EAAE,CAAA;IACjC,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAA;AACtC,CAAC","sourcesContent":["import type { AsyncLocalStorage } from 'node:async_hooks'\n\n/** The server function a call runs, as the framework's compiler names it. */\nexport type ServerFunctionIdentity = { name: string; filename: string }\n\ntype NodeProcess = { getBuiltinModule?: (id: 'node:async_hooks') => typeof import('node:async_hooks') | undefined }\n\nlet storage: AsyncLocalStorage<ServerFunctionIdentity> | null | undefined\n\n// Resolved through the running process, so a browser bundle that includes framework middleware never loads a Node module.\nfunction identityStorage() {\n if (storage === undefined) {\n const hooks = (globalThis as { process?: NodeProcess }).process?.getBuiltinModule?.('node:async_hooks')\n storage = hooks ? new hooks.AsyncLocalStorage<ServerFunctionIdentity>() : null\n }\n return storage\n}\n\n/** Runs work with its server function's identity available to telemetry recorded inside it. */\nexport function withServerFunction<T>(identity: ServerFunctionIdentity, work: () => T): T {\n const current = identityStorage()\n return current ? current.run(identity, work) : work()\n}\n\nexport function currentServerFunction(): ServerFunctionIdentity | undefined {\n return identityStorage()?.getStore()\n}\n"]}
@@ -1,3 +1,5 @@
1
1
  import { type CanonicalRedirectOptions } from '../server/canonical-host.js';
2
2
  export declare function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T;
3
3
  export declare function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions): import("@tanstack/react-start").RequestMiddlewareAfterServer<{}, undefined, undefined>;
4
+ /** Names each server function for telemetry recorded while it runs, such as the RPC observer's span and metrics. */
5
+ export declare function serverFunctionIdentityMiddleware(): import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, undefined, undefined, undefined>;
@@ -1,5 +1,6 @@
1
1
  import { createMiddleware } from '@tanstack/react-start';
2
2
  import { canonicalRedirect } from '../server/canonical-host.js';
3
+ import { withServerFunction } from '../server/server-function.js';
3
4
  export function canonicalHostRequest(request, next, options) {
4
5
  const redirect = canonicalRedirect(request.url, options);
5
6
  return redirect ? Response.redirect(redirect, 301) : next();
@@ -9,4 +10,8 @@ export function canonicalHostMiddleware(resolveOptions) {
9
10
  return canonicalHostRequest(request, next, resolveOptions());
10
11
  });
11
12
  }
13
+ /** Names each server function for telemetry recorded while it runs, such as the RPC observer's span and metrics. */
14
+ export function serverFunctionIdentityMiddleware() {
15
+ return createMiddleware({ type: 'function' }).server(({ serverFnMeta, next }) => withServerFunction({ name: serverFnMeta.name, filename: serverFnMeta.filename }, next));
16
+ }
12
17
  //# sourceMappingURL=middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/tanstack/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAiC,MAAM,6BAA6B,CAAA;AAE9F,MAAM,UAAU,oBAAoB,CAAI,OAAgB,EAAE,IAAa,EAAE,OAAiC;IACxG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,cAA8C;IACpF,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACxE,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { createMiddleware } from '@tanstack/react-start'\nimport { canonicalRedirect, type CanonicalRedirectOptions } from '../server/canonical-host.js'\n\nexport function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T {\n const redirect = canonicalRedirect(request.url, options)\n return redirect ? Response.redirect(redirect, 301) : next()\n}\n\nexport function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions) {\n return createMiddleware({ type: 'request' }).server(({ request, next }) => {\n return canonicalHostRequest(request, next, resolveOptions())\n })\n}\n"]}
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/tanstack/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAiC,MAAM,6BAA6B,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE,MAAM,UAAU,oBAAoB,CAAI,OAAgB,EAAE,IAAa,EAAE,OAAiC;IACxG,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxD,OAAO,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,cAA8C;IACpF,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACxE,OAAO,oBAAoB,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,gCAAgC;IAC9C,OAAO,gBAAgB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAC9E,kBAAkB,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CACvF,CAAA;AACH,CAAC","sourcesContent":["import { createMiddleware } from '@tanstack/react-start'\nimport { canonicalRedirect, type CanonicalRedirectOptions } from '../server/canonical-host.js'\nimport { withServerFunction } from '../server/server-function.js'\n\nexport function canonicalHostRequest<T>(request: Request, next: () => T, options: CanonicalRedirectOptions): Response | T {\n const redirect = canonicalRedirect(request.url, options)\n return redirect ? Response.redirect(redirect, 301) : next()\n}\n\nexport function canonicalHostMiddleware(resolveOptions: () => CanonicalRedirectOptions) {\n return createMiddleware({ type: 'request' }).server(({ request, next }) => {\n return canonicalHostRequest(request, next, resolveOptions())\n })\n}\n\n/** Names each server function for telemetry recorded while it runs, such as the RPC observer's span and metrics. */\nexport function serverFunctionIdentityMiddleware() {\n return createMiddleware({ type: 'function' }).server(({ serverFnMeta, next }) =>\n withServerFunction({ name: serverFnMeta.name, filename: serverFnMeta.filename }, next),\n )\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { type OriginOptions } from '../auth/origins.js';
2
2
  import { type HealthResponseOptions, type RpcOptions } from '../server/index.js';
3
- export { canonicalHostMiddleware, canonicalHostRequest } from './middleware.js';
3
+ export { canonicalHostMiddleware, canonicalHostRequest, serverFunctionIdentityMiddleware } from './middleware.js';
4
4
  export type TanStackRpcOptions = Omit<RpcOptions, 'getRequest'> & Pick<RpcOptions, 'getRequest'>;
5
5
  export declare function createTanStackRpc(options?: TanStackRpcOptions): {
6
6
  rpc: <T>(work: () => Promise<T> | T) => Promise<T>;
@@ -1,7 +1,7 @@
1
1
  import { getRequest } from '@tanstack/react-start/server';
2
2
  import { requireSameOrigin } from '../auth/origins.js';
3
3
  import { createRpc, healthResponse } from '../server/index.js';
4
- export { canonicalHostMiddleware, canonicalHostRequest } from './middleware.js';
4
+ export { canonicalHostMiddleware, canonicalHostRequest, serverFunctionIdentityMiddleware } from './middleware.js';
5
5
  export function createTanStackRpc(options = {}) {
6
6
  return createRpc({ ...options, getRequest: options.getRequest ?? getRequest });
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/tanstack/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAA;AAC3G,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAI/E,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAuB,EAAE;IAChE,OAAO,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAO,GAAkB,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE;IAC/F,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAID,MAAM,UAAU,kBAAkB,CAAC,WAA8E;IAC/G,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,EAAkB,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiC,EAAE,OAAO,GAA0B,EAAE;IAC1G,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { getRequest } from '@tanstack/react-start/server'\nimport { requireSameOrigin, type OriginOptions } from '../auth/origins.js'\nimport { createRpc, healthResponse, type HealthResponseOptions, type RpcOptions } from '../server/index.js'\nexport { canonicalHostMiddleware, canonicalHostRequest } from './middleware.js'\n\nexport type TanStackRpcOptions = Omit<RpcOptions, 'getRequest'> & Pick<RpcOptions, 'getRequest'>\n\nexport function createTanStackRpc(options: TanStackRpcOptions = {}) {\n return createRpc({ ...options, getRequest: options.getRequest ?? getRequest })\n}\n\nexport function requireTanStackMutationOrigin(options: OriginOptions = {}, request = getRequest()) {\n return requireSameOrigin(request, options)\n}\n\ntype RequestContext = { request: Request }\n\nexport function betterAuthHandlers(resolveAuth: () => { handler(request: Request): Response | Promise<Response> }) {\n const handle = ({ request }: RequestContext) => resolveAuth().handler(request)\n return { GET: handle, POST: handle }\n}\n\nexport function tanStackHealthHandler(check: () => void | Promise<void>, options: HealthResponseOptions = {}) {\n return () => healthResponse(check, options)\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/tanstack/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAsB,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,SAAS,EAAE,cAAc,EAA+C,MAAM,oBAAoB,CAAA;AAC3G,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,gCAAgC,EAAE,MAAM,iBAAiB,CAAA;AAIjH,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAuB,EAAE;IAChE,OAAO,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAO,GAAkB,EAAE,EAAE,OAAO,GAAG,UAAU,EAAE;IAC/F,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAID,MAAM,UAAU,kBAAkB,CAAC,WAA8E;IAC/G,MAAM,MAAM,GAAG,CAAC,EAAE,OAAO,EAAkB,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACtC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAiC,EAAE,OAAO,GAA0B,EAAE;IAC1G,OAAO,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC","sourcesContent":["import { getRequest } from '@tanstack/react-start/server'\nimport { requireSameOrigin, type OriginOptions } from '../auth/origins.js'\nimport { createRpc, healthResponse, type HealthResponseOptions, type RpcOptions } from '../server/index.js'\nexport { canonicalHostMiddleware, canonicalHostRequest, serverFunctionIdentityMiddleware } from './middleware.js'\n\nexport type TanStackRpcOptions = Omit<RpcOptions, 'getRequest'> & Pick<RpcOptions, 'getRequest'>\n\nexport function createTanStackRpc(options: TanStackRpcOptions = {}) {\n return createRpc({ ...options, getRequest: options.getRequest ?? getRequest })\n}\n\nexport function requireTanStackMutationOrigin(options: OriginOptions = {}, request = getRequest()) {\n return requireSameOrigin(request, options)\n}\n\ntype RequestContext = { request: Request }\n\nexport function betterAuthHandlers(resolveAuth: () => { handler(request: Request): Response | Promise<Response> }) {\n const handle = ({ request }: RequestContext) => resolveAuth().handler(request)\n return { GET: handle, POST: handle }\n}\n\nexport function tanStackHealthHandler(check: () => void | Promise<void>, options: HealthResponseOptions = {}) {\n return () => healthResponse(check, options)\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ras-stack",
3
- "version": "3.0.2",
3
+ "version": "3.1.0",
4
4
  "description": "Composable full-stack primitives shared across Richard Solomou's applications.",
5
5
  "keywords": [
6
6
  "authentication",