diff --git a/docs/superpowers/plans/2026-06-22-cloudflare-analytics-hot-cold-archive.md b/docs/superpowers/plans/2026-06-22-cloudflare-analytics-hot-cold-archive.md new file mode 100644 index 000000000..193984b97 --- /dev/null +++ b/docs/superpowers/plans/2026-06-22-cloudflare-analytics-hot-cold-archive.md @@ -0,0 +1,2173 @@ +# Cloudflare Analytics 热冷分层实现计划 + +> **给 agent 执行者:** 必选子技能:使用 `superpowers:subagent-driven-development`(推荐)或 `superpowers:executing-plans` 按任务逐项实现本计划。步骤统一使用 checkbox(`- [ ]`)语法跟踪。 + +**目标:** 用 Cloudflare Analytics Engine 承载近 3 个月热查询,用 Cloudflare Pipelines + R2 Data Catalog/Iceberg 承载长期历史归档,并在迁移期保留 Tinybird 对照和回退。 + +**方案概览:** 先把现有 Tinybird 读写路径后面抽成 `AnalyticsStore` 和 `AnalyticsArchiveWriter`,保证业务层仍然调用稳定的 analytics 契约。写路径采用 Tinybird + Analytics Engine + Pipelines 的可配置双写,任一 Cloudflare analytics 写入失败只记录日志和 Sentry,不影响 `track/check` 主业务。读路径先只迁移 `/query/event_names/list`、`/query/raw` 和 external events list 的 90 天热查询,超过 90 天或包含未支持过滤条件时继续走 Tinybird,历史查询通过 R2 SQL/离线验证逐步开放,不把 R2 归档层放进实时 dashboard 的同步依赖里。 + +**技术栈:** Bun test、TypeScript、Hono、Cloudflare Workers、Analytics Engine、Pipelines、R2 Data Catalog/Iceberg、R2 SQL、Tinybird、Wrangler + +--- + +## 参考资料 + +- Cloudflare Analytics Engine 文档:`https://developers.cloudflare.com/analytics/analytics-engine/` +- Cloudflare Analytics Engine SQL API 文档:`https://developers.cloudflare.com/analytics/analytics-engine/sql-api/` +- Cloudflare Pipelines 文档:`https://developers.cloudflare.com/pipelines/` +- Cloudflare R2 Data Catalog 文档:`https://developers.cloudflare.com/r2/data-catalog/` +- Cloudflare R2 SQL 文档:`https://developers.cloudflare.com/r2/data-catalog/sql/` +- Wrangler 配置 schema:`server/node_modules/wrangler/config-schema.json` +- 本地 Cloudflare 方法论:`/Volumes/sker/resources/知识/2026-06-16--Cloudflare全栈AI-Coding最佳组合--方法论.md` + +## 非目标 + +- 不用 Analytics Engine 替代积分余额、扣减、幂等、账务判断或订阅状态。余额真实状态继续在 Postgres/Drizzle 和现有 mutation/balance 路径中。 +- 不在第一阶段替换 revenue analytics、migration item events、复杂 ClickHouse raw SQL、跨 90 天实时 dashboard 查询。 +- 不让 R2/R2 SQL 成为 `track/check` 请求是否成功的前置条件。 + +## 文件结构 + +- 新建:`server/src/internal/analytics/cloudflare/eventSchema.ts` + - 定义 Cloudflare analytics 事件的稳定 schema。 + - 从 `EventInsert` 映射到 Analytics Engine datapoint 和 Pipeline archive record。 +- 新建:`server/src/internal/analytics/cloudflare/analyticsConfig.ts` + - 解析 `workerEnv` 和 env flags。 + - 控制 Cloudflare analytics 写入、热查询读取、Tinybird 回退、归档写入。 +- 新建:`server/src/internal/analytics/cloudflare/analyticsEngineWriter.ts` + - 将事件写入 `env.EVENTS_ANALYTICS.writeDataPoint()`。 +- 新建:`server/src/internal/analytics/cloudflare/pipelineArchiveWriter.ts` + - 将事件发送到 `env.EVENTS_ARCHIVE_PIPELINE.send(records)`。 +- 新建:`server/src/internal/analytics/cloudflare/writeCloudflareAnalytics.ts` + - 组合 Analytics Engine 和 Pipelines 写入,统一失败日志。 +- 新建:`server/src/internal/analytics/cloudflare/querySql.ts` + - 封装 Analytics Engine SQL API 请求。 +- 新建:`server/src/internal/analytics/cloudflare/hotEventStore.ts` + - 实现 90 天内 `listEventNames`、`listRawEvents`、`listEvents`、`listByCursor` 的 Cloudflare 热查询。 +- 新建:`server/src/internal/analytics/cloudflare/dateRange.ts` + - 统一判断查询是否完全落在 90 天热窗口内。 +- 新建:`server/src/internal/analytics/store/AnalyticsStore.ts` + - 定义 Tinybird 与 Cloudflare 热查询共用的读接口。 +- 新建:`server/src/internal/analytics/store/tinybirdEventStore.ts` + - 把现有 Tinybird pipes 包成 `AnalyticsStore`。 +- 新建:`server/src/internal/analytics/store/selectAnalyticsStore.ts` + - 根据 flags 和查询时间范围选择 Cloudflare 热查询或 Tinybird 回退。 +- 修改:`server/src/external/tinybird/sendEvents/sendEvents.ts` + - 在 Tinybird 写入之外增加 Cloudflare 双写。 +- 修改:`server/src/internal/analytics/actions/listEventNames.ts` + - 改成通过 `selectAnalyticsStore()` 读取。 +- 修改:`server/src/internal/analytics/actions/listRawEvents.ts` + - 改成通过 `selectAnalyticsStore()` 读取,并保留 billing cycle 日期计算。 +- 修改:`server/src/internal/analytics/actions/listEvents.ts` + - 改成通过 `selectAnalyticsStore()` 读取 offset 分页热查询。 +- 修改:`server/src/internal/analytics/actions/listByCursor.ts` + - 改成通过 `selectAnalyticsStore()` 读取 cursor 分页热查询。 +- 修改:`server/src/internal/analytics/internalHandlers/handleListEventNames.ts` + - 将 `assertTinybirdAvailable()` 放到 Tinybird store 内部,避免 Cloudflare store 可用时仍因 Tinybird 缺失而 500。 +- 修改:`server/wrangler.jsonc` + - 增加 `analytics_engine_datasets` 和 `pipelines` binding。 + - 增加 feature flags,默认关闭 Cloudflare 读写。 +- 修改:`server/worker-configuration.d.ts` + - 通过 `cd server && bunx wrangler types` 重新生成,不手写。 +- 新建:`server/tests/unit/analytics/cloudflare-event-schema.test.ts` + - 覆盖事件映射、字段顺序、缺失值行为。 +- 新建:`server/tests/unit/analytics/cloudflare-config.test.ts` + - 覆盖 flags 和 binding 解析。 +- 新建:`server/tests/unit/analytics/cloudflare-writers.test.ts` + - 覆盖写入不抛错、缺 binding 跳过、Pipeline payload。 +- 新建:`server/tests/unit/analytics/cloudflare-date-range.test.ts` + - 覆盖 90 天热窗口选择。 +- 新建:`server/tests/unit/analytics/cloudflare-hot-event-store.test.ts` + - 覆盖 SQL 生成和响应格式。 +- 新建:`server/tests/unit/analytics/select-analytics-store.test.ts` + - 覆盖 Cloudflare/Tinybird store 选择和回退。 +- 新建:`docs/cloudflare-analytics-hot-cold-runbook.md` + - 记录创建 Pipelines、R2 Data Catalog、R2 SQL 验证、回滚开关和退役 Tinybird 的操作流程。 + +--- + +### 任务 1:建立 Cloudflare analytics 事件 schema 和失败测试 + +**文件:** +- 新建:`server/tests/unit/analytics/cloudflare-event-schema.test.ts` +- 新建:`server/src/internal/analytics/cloudflare/eventSchema.ts` + +- [ ] **步骤 1:先写失败测试** + +新建 `server/tests/unit/analytics/cloudflare-event-schema.test.ts`: + +```ts +import { describe, expect, test } from "bun:test"; +import type { EventInsert } from "@autumn/shared"; +import { + CLOUDFLARE_ANALYTICS_BLOB_FIELDS, + CLOUDFLARE_ANALYTICS_DOUBLE_FIELDS, + CLOUDFLARE_ANALYTICS_INDEX_FIELDS, + mapEventToAnalyticsDatapoint, + mapEventToArchiveRecord, +} from "@/internal/analytics/cloudflare/eventSchema.js"; + +const baseEvent = { + id: "evt_1", + org_id: "org_1", + org_slug: "acme", + internal_customer_id: "cus_internal_1", + env: "sandbox", + created_at: 1_766_361_600_000, + timestamp: new Date("2026-06-22T00:00:00.000Z"), + event_name: "tokens", + idempotency_key: "idem_1", + value: 42, + set_usage: false, + entity_id: "entity_public_1", + internal_entity_id: "entity_internal_1", + internal_product_id: "prod_internal_1", + customer_id: "customer_public_1", + properties: { model: "gpt-4.1", region: "iad" }, + deductions: [{ feature_id: "tokens", quantity: 42 }], +} satisfies EventInsert; + +describe("Cloudflare analytics event schema", () => { + test("keeps field order stable", () => { + expect(CLOUDFLARE_ANALYTICS_INDEX_FIELDS).toEqual(["org_id"]); + expect(CLOUDFLARE_ANALYTICS_BLOB_FIELDS).toEqual([ + "id", + "env", + "event_name", + "customer_id", + "entity_id", + "internal_customer_id", + "internal_entity_id", + "internal_product_id", + "idempotency_key", + "timestamp", + "org_slug", + "properties", + "deductions", + ]); + expect(CLOUDFLARE_ANALYTICS_DOUBLE_FIELDS).toEqual([ + "value", + "set_usage", + "created_at", + ]); + }); + + test("maps EventInsert to Analytics Engine datapoint", () => { + expect(mapEventToAnalyticsDatapoint(baseEvent)).toEqual({ + indexes: ["org_1"], + blobs: [ + "evt_1", + "sandbox", + "tokens", + "customer_public_1", + "entity_public_1", + "cus_internal_1", + "entity_internal_1", + "prod_internal_1", + "idem_1", + "2026-06-22T00:00:00.000Z", + "acme", + JSON.stringify({ model: "gpt-4.1", region: "iad" }), + JSON.stringify({ list: [{ feature_id: "tokens", quantity: 42 }] }), + ], + doubles: [42, 0, 1_766_361_600_000], + }); + }); + + test("maps EventInsert to Pipeline archive record with named fields", () => { + expect(mapEventToArchiveRecord(baseEvent)).toEqual({ + id: "evt_1", + org_id: "org_1", + org_slug: "acme", + internal_customer_id: "cus_internal_1", + env: "sandbox", + created_at: 1_766_361_600_000, + timestamp: "2026-06-22T00:00:00.000Z", + event_name: "tokens", + idempotency_key: "idem_1", + value: 42, + set_usage: false, + entity_id: "entity_public_1", + internal_entity_id: "entity_internal_1", + internal_product_id: "prod_internal_1", + customer_id: "customer_public_1", + properties: { model: "gpt-4.1", region: "iad" }, + deductions: [{ feature_id: "tokens", quantity: 42 }], + archive_schema_version: 1, + }); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-event-schema.test.ts +``` + +预期:FAIL,错误包含: + +```text +Cannot find module '@/internal/analytics/cloudflare/eventSchema.js' +``` + +- [ ] **步骤 3:编写最小实现** + +新建 `server/src/internal/analytics/cloudflare/eventSchema.ts`: + +```ts +import type { EventInsert } from "@autumn/shared"; + +export const CLOUDFLARE_ANALYTICS_INDEX_FIELDS = ["org_id"] as const; + +export const CLOUDFLARE_ANALYTICS_BLOB_FIELDS = [ + "id", + "env", + "event_name", + "customer_id", + "entity_id", + "internal_customer_id", + "internal_entity_id", + "internal_product_id", + "idempotency_key", + "timestamp", + "org_slug", + "properties", + "deductions", +] as const; + +export const CLOUDFLARE_ANALYTICS_DOUBLE_FIELDS = [ + "value", + "set_usage", + "created_at", +] as const; + +export type AnalyticsArchiveRecord = { + id: string; + org_id: string; + org_slug: string | null; + internal_customer_id: string | null; + env: string; + created_at: number | null; + timestamp: string; + event_name: string; + idempotency_key: string | null; + value: number | null; + set_usage: boolean; + entity_id: string | null; + internal_entity_id: string | null; + internal_product_id: string | null; + customer_id: string; + properties: EventInsert["properties"] | null; + deductions: EventInsert["deductions"] | null; + archive_schema_version: 1; +}; + +const normalizeTimestamp = (timestamp: EventInsert["timestamp"]): string => { + if (timestamp instanceof Date) return timestamp.toISOString(); + if (typeof timestamp === "string") return new Date(timestamp).toISOString(); + return new Date().toISOString(); +}; + +const serializeJson = (value: unknown): string | null => + value === undefined || value === null ? null : JSON.stringify(value); + +export const mapEventToAnalyticsDatapoint = ( + event: EventInsert, +): AnalyticsEngineDataPoint => { + const timestamp = normalizeTimestamp(event.timestamp); + + return { + indexes: [event.org_id], + blobs: [ + event.id, + event.env, + event.event_name, + event.customer_id, + event.entity_id ?? null, + event.internal_customer_id ?? null, + event.internal_entity_id ?? null, + event.internal_product_id ?? null, + event.idempotency_key ?? null, + timestamp, + event.org_slug ?? null, + serializeJson(event.properties), + serializeJson(event.deductions ? { list: event.deductions } : null), + ], + doubles: [event.value ?? 0, event.set_usage ? 1 : 0, event.created_at ?? 0], + }; +}; + +export const mapEventToArchiveRecord = ( + event: EventInsert, +): AnalyticsArchiveRecord => ({ + id: event.id, + org_id: event.org_id, + org_slug: event.org_slug ?? null, + internal_customer_id: event.internal_customer_id ?? null, + env: event.env, + created_at: event.created_at ?? null, + timestamp: normalizeTimestamp(event.timestamp), + event_name: event.event_name, + idempotency_key: event.idempotency_key ?? null, + value: event.value ?? null, + set_usage: event.set_usage ?? false, + entity_id: event.entity_id ?? null, + internal_entity_id: event.internal_entity_id ?? null, + internal_product_id: event.internal_product_id ?? null, + customer_id: event.customer_id, + properties: event.properties ?? null, + deductions: event.deductions ?? null, + archive_schema_version: 1, +}); +``` + +- [ ] **步骤 4:再次运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-event-schema.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 5:提交** + +```bash +git add server/tests/unit/analytics/cloudflare-event-schema.test.ts server/src/internal/analytics/cloudflare/eventSchema.ts +git commit -m "test: define cloudflare analytics event schema" +``` + +--- + +### 任务 2:添加 Cloudflare analytics 配置解析 + +**文件:** +- 新建:`server/tests/unit/analytics/cloudflare-config.test.ts` +- 新建:`server/src/internal/analytics/cloudflare/analyticsConfig.ts` + +- [ ] **步骤 1:先写失败测试** + +新建 `server/tests/unit/analytics/cloudflare-config.test.ts`: + +```ts +import { describe, expect, test } from "bun:test"; +import { + getCloudflareAnalyticsConfig, + isCloudflareHotReadEnabled, + isCloudflareWriteEnabled, +} from "@/internal/analytics/cloudflare/analyticsConfig.js"; + +const makeEnv = (values: Partial): Env => values as Env; + +describe("Cloudflare analytics config", () => { + test("defaults to disabled even when bindings exist", () => { + const env = makeEnv({ + EVENTS_ANALYTICS: { writeDataPoint: () => undefined } as Env["EVENTS_ANALYTICS"], + EVENTS_ARCHIVE_PIPELINE: { send: async () => undefined } as Env["EVENTS_ARCHIVE_PIPELINE"], + }); + + expect(getCloudflareAnalyticsConfig(env)).toEqual({ + writeEnabled: false, + hotReadEnabled: false, + archiveEnabled: false, + tinybirdFallbackEnabled: true, + hotRetentionDays: 90, + datasetName: "autumn_events_hot", + }); + }); + + test("enables each path only with explicit flags and bindings", () => { + const env = makeEnv({ + CLOUDFLARE_ANALYTICS_WRITE_ENABLED: "true", + CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED: "true", + CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED: "true", + CLOUDFLARE_ANALYTICS_TINYBIRD_FALLBACK_ENABLED: "false", + CLOUDFLARE_ANALYTICS_DATASET: "custom_events", + EVENTS_ANALYTICS: { writeDataPoint: () => undefined } as Env["EVENTS_ANALYTICS"], + EVENTS_ARCHIVE_PIPELINE: { send: async () => undefined } as Env["EVENTS_ARCHIVE_PIPELINE"], + }); + + expect(isCloudflareWriteEnabled(env)).toBe(true); + expect(isCloudflareHotReadEnabled(env)).toBe(true); + expect(getCloudflareAnalyticsConfig(env)).toMatchObject({ + writeEnabled: true, + hotReadEnabled: true, + archiveEnabled: true, + tinybirdFallbackEnabled: false, + datasetName: "custom_events", + }); + }); + + test("keeps paths disabled when a binding is missing", () => { + const env = makeEnv({ + CLOUDFLARE_ANALYTICS_WRITE_ENABLED: "true", + CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED: "true", + CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED: "true", + }); + + expect(getCloudflareAnalyticsConfig(env)).toMatchObject({ + writeEnabled: false, + archiveEnabled: false, + hotReadEnabled: false, + }); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-config.test.ts +``` + +预期:FAIL,错误包含: + +```text +Cannot find module '@/internal/analytics/cloudflare/analyticsConfig.js' +``` + +- [ ] **步骤 3:编写最小实现** + +新建 `server/src/internal/analytics/cloudflare/analyticsConfig.ts`: + +```ts +export type CloudflareAnalyticsConfig = { + writeEnabled: boolean; + hotReadEnabled: boolean; + archiveEnabled: boolean; + tinybirdFallbackEnabled: boolean; + hotRetentionDays: number; + datasetName: string; +}; + +const isTruthy = (value: unknown): boolean => + typeof value === "string" && value.toLowerCase() === "true"; + +const hasAnalyticsBinding = (env?: Env): boolean => + typeof env?.EVENTS_ANALYTICS?.writeDataPoint === "function"; + +const hasArchivePipelineBinding = (env?: Env): boolean => + typeof env?.EVENTS_ARCHIVE_PIPELINE?.send === "function"; + +export const getCloudflareAnalyticsConfig = ( + env?: Env, +): CloudflareAnalyticsConfig => { + const hotRetentionDays = Number(env?.CLOUDFLARE_ANALYTICS_HOT_RETENTION_DAYS); + + return { + writeEnabled: + isTruthy(env?.CLOUDFLARE_ANALYTICS_WRITE_ENABLED) && + hasAnalyticsBinding(env), + hotReadEnabled: + isTruthy(env?.CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED) && + hasAnalyticsBinding(env), + archiveEnabled: + isTruthy(env?.CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED) && + hasArchivePipelineBinding(env), + tinybirdFallbackEnabled: + env?.CLOUDFLARE_ANALYTICS_TINYBIRD_FALLBACK_ENABLED !== "false", + hotRetentionDays: + Number.isFinite(hotRetentionDays) && hotRetentionDays > 0 + ? hotRetentionDays + : 90, + datasetName: env?.CLOUDFLARE_ANALYTICS_DATASET || "autumn_events_hot", + }; +}; + +export const isCloudflareWriteEnabled = (env?: Env): boolean => + getCloudflareAnalyticsConfig(env).writeEnabled; + +export const isCloudflareHotReadEnabled = (env?: Env): boolean => + getCloudflareAnalyticsConfig(env).hotReadEnabled; +``` + +- [ ] **步骤 4:再次运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-config.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 5:提交** + +```bash +git add server/tests/unit/analytics/cloudflare-config.test.ts server/src/internal/analytics/cloudflare/analyticsConfig.ts +git commit -m "feat: add cloudflare analytics config" +``` + +--- + +### 任务 3:实现 Analytics Engine 与 Pipelines 写入器 + +**文件:** +- 新建:`server/tests/unit/analytics/cloudflare-writers.test.ts` +- 新建:`server/src/internal/analytics/cloudflare/analyticsEngineWriter.ts` +- 新建:`server/src/internal/analytics/cloudflare/pipelineArchiveWriter.ts` +- 新建:`server/src/internal/analytics/cloudflare/writeCloudflareAnalytics.ts` +- 修改:`server/src/external/tinybird/sendEvents/sendEvents.ts` + +- [ ] **步骤 1:先写失败测试** + +新建 `server/tests/unit/analytics/cloudflare-writers.test.ts`: + +```ts +import { describe, expect, test } from "bun:test"; +import type { EventInsert } from "@autumn/shared"; +import { writeEventsToAnalyticsEngine } from "@/internal/analytics/cloudflare/analyticsEngineWriter.js"; +import { writeEventsToArchivePipeline } from "@/internal/analytics/cloudflare/pipelineArchiveWriter.js"; +import { writeEventsToCloudflareAnalytics } from "@/internal/analytics/cloudflare/writeCloudflareAnalytics.js"; + +const event = { + id: "evt_1", + org_id: "org_1", + org_slug: null, + internal_customer_id: null, + env: "sandbox", + created_at: 1, + timestamp: "2026-06-22T00:00:00.000Z", + event_name: "tokens", + idempotency_key: null, + value: 1, + set_usage: false, + entity_id: null, + internal_entity_id: null, + internal_product_id: null, + customer_id: "customer_1", + properties: null, + deductions: null, +} satisfies EventInsert; + +const makeLogger = () => { + const errors: string[] = []; + const debug: string[] = []; + return { + logger: { + error: (message: string) => errors.push(message), + debug: (message: string) => debug.push(message), + }, + errors, + debug, + }; +}; + +describe("Cloudflare analytics writers", () => { + test("writes one Analytics Engine datapoint per event", async () => { + const datapoints: AnalyticsEngineDataPoint[] = []; + const env = { + EVENTS_ANALYTICS: { + writeDataPoint: (point: AnalyticsEngineDataPoint) => datapoints.push(point), + }, + } as Partial as Env; + + await writeEventsToAnalyticsEngine({ env, events: [event] }); + + expect(datapoints).toHaveLength(1); + expect(datapoints[0].indexes).toEqual(["org_1"]); + }); + + test("sends archive records to Pipeline", async () => { + const batches: unknown[][] = []; + const env = { + EVENTS_ARCHIVE_PIPELINE: { + send: async (records: unknown[]) => { + batches.push(records); + }, + }, + } as Partial as Env; + + await writeEventsToArchivePipeline({ env, events: [event] }); + + expect(batches).toHaveLength(1); + expect(batches[0][0]).toMatchObject({ + id: "evt_1", + archive_schema_version: 1, + }); + }); + + test("combined writer does not throw when Cloudflare path fails", async () => { + const { logger, errors } = makeLogger(); + const env = { + CLOUDFLARE_ANALYTICS_WRITE_ENABLED: "true", + CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED: "true", + EVENTS_ANALYTICS: { + writeDataPoint: () => { + throw new Error("analytics down"); + }, + }, + EVENTS_ARCHIVE_PIPELINE: { + send: async () => { + throw new Error("pipeline down"); + }, + }, + } as Partial as Env; + + await expect( + writeEventsToCloudflareAnalytics({ env, events: [event], logger }), + ).resolves.toBeUndefined(); + expect(errors.join("\n")).toContain("Cloudflare Analytics Engine write failed"); + expect(errors.join("\n")).toContain("Cloudflare archive pipeline write failed"); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-writers.test.ts +``` + +预期:FAIL,错误包含: + +```text +Cannot find module '@/internal/analytics/cloudflare/analyticsEngineWriter.js' +``` + +- [ ] **步骤 3:编写 Analytics Engine writer** + +新建 `server/src/internal/analytics/cloudflare/analyticsEngineWriter.ts`: + +```ts +import type { EventInsert } from "@autumn/shared"; +import { mapEventToAnalyticsDatapoint } from "./eventSchema.js"; + +export const writeEventsToAnalyticsEngine = async ({ + env, + events, +}: { + env: Env; + events: EventInsert[]; +}): Promise => { + if (events.length === 0) return; + if (!env.EVENTS_ANALYTICS) return; + + for (const event of events) { + env.EVENTS_ANALYTICS.writeDataPoint(mapEventToAnalyticsDatapoint(event)); + } +}; +``` + +- [ ] **步骤 4:编写 Pipeline archive writer** + +新建 `server/src/internal/analytics/cloudflare/pipelineArchiveWriter.ts`: + +```ts +import type { EventInsert } from "@autumn/shared"; +import { mapEventToArchiveRecord } from "./eventSchema.js"; + +export const writeEventsToArchivePipeline = async ({ + env, + events, +}: { + env: Env; + events: EventInsert[]; +}): Promise => { + if (events.length === 0) return; + if (!env.EVENTS_ARCHIVE_PIPELINE) return; + + await env.EVENTS_ARCHIVE_PIPELINE.send(events.map(mapEventToArchiveRecord)); +}; +``` + +- [ ] **步骤 5:编写组合 writer** + +新建 `server/src/internal/analytics/cloudflare/writeCloudflareAnalytics.ts`: + +```ts +import type { EventInsert } from "@autumn/shared"; +import type { Logger } from "@/external/logtail/logtailUtils.js"; +import { captureException } from "@/external/sentry/sentryUtils.js"; +import { getCloudflareAnalyticsConfig } from "./analyticsConfig.js"; +import { writeEventsToAnalyticsEngine } from "./analyticsEngineWriter.js"; +import { writeEventsToArchivePipeline } from "./pipelineArchiveWriter.js"; + +const reportCloudflareAnalyticsFailure = ({ + error, + logger, + message, + service, + eventCount, +}: { + error: unknown; + logger?: Pick; + message: string; + service: "analytics_engine" | "pipeline_archive"; + eventCount: number; +}) => { + const errorMessage = error instanceof Error ? error.message : String(error); + logger?.error(message, { + data: { service, eventCount, error: errorMessage }, + }); + captureException(error, { + tags: { service: "cloudflare_analytics", cloudflare_service: service }, + extra: { eventCount }, + }); +}; + +export const writeEventsToCloudflareAnalytics = async ({ + env, + events, + logger, +}: { + env?: Env; + events: EventInsert[]; + logger?: Pick; +}): Promise => { + if (!env || events.length === 0) return; + + const config = getCloudflareAnalyticsConfig(env); + const writes: Promise[] = []; + + if (config.writeEnabled) { + writes.push( + writeEventsToAnalyticsEngine({ env, events }).catch((error) => + reportCloudflareAnalyticsFailure({ + error, + logger, + message: "Cloudflare Analytics Engine write failed", + service: "analytics_engine", + eventCount: events.length, + }), + ), + ); + } + + if (config.archiveEnabled) { + writes.push( + writeEventsToArchivePipeline({ env, events }).catch((error) => + reportCloudflareAnalyticsFailure({ + error, + logger, + message: "Cloudflare archive pipeline write failed", + service: "pipeline_archive", + eventCount: events.length, + }), + ), + ); + } + + if (writes.length === 0) { + logger?.debug?.("Cloudflare analytics disabled, skipping event send"); + return; + } + + await Promise.all(writes); +}; +``` + +- [ ] **步骤 6:把 Cloudflare 双写接入现有 Tinybird 写路径** + +修改 `server/src/external/tinybird/sendEvents/sendEvents.ts`,在 import 区加入: + +```ts +import { writeEventsToCloudflareAnalytics } from "@/internal/analytics/cloudflare/writeCloudflareAnalytics.js"; +``` + +把 `sendEventsToTinybird` 的入参类型从: + +```ts +}: { + events: EventInsert[]; + logger?: Logger; +}): Promise => { +``` + +改成: + +```ts +}: { + events: EventInsert[]; + logger?: Logger; + env?: Env; +}): Promise => { +``` + +在 `sendEventsToTinybird` 的 `if (events.length === 0) { return; }` 之后插入: + +```ts +await writeEventsToCloudflareAnalytics({ + env, + events, + logger, +}); +``` + +修改 `server/src/internal/balances/events/EventBatchingManager.ts` 里的调用,从: + +```ts +await sendEventsToTinybird({ + events: eventItems, + logger: createLogger(env), +}); +``` + +改成: + +```ts +await sendEventsToTinybird({ + events: eventItems, + logger: createLogger(env), + env, +}); +``` + +- [ ] **步骤 7:再次运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-writers.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 8:运行类型检查** + +运行: + +```bash +cd server && bun run ts +``` + +预期:PASS。如果失败提示 `Property 'EVENTS_ANALYTICS' does not exist on type 'Env'`,先执行任务 10 的 `wrangler types` 生成步骤,再回到本任务。 + +- [ ] **步骤 9:提交** + +```bash +git add server/tests/unit/analytics/cloudflare-writers.test.ts server/src/internal/analytics/cloudflare/analyticsEngineWriter.ts server/src/internal/analytics/cloudflare/pipelineArchiveWriter.ts server/src/internal/analytics/cloudflare/writeCloudflareAnalytics.ts server/src/external/tinybird/sendEvents/sendEvents.ts +git commit -m "feat: dual write analytics events to cloudflare" +``` + +--- + +### 任务 4:建立 90 天热窗口判断 + +**文件:** +- 新建:`server/tests/unit/analytics/cloudflare-date-range.test.ts` +- 新建:`server/src/internal/analytics/cloudflare/dateRange.ts` + +- [ ] **步骤 1:先写失败测试** + +新建 `server/tests/unit/analytics/cloudflare-date-range.test.ts`: + +```ts +import { describe, expect, test } from "bun:test"; +import { + isRangeInsideHotRetention, + resolveHotRangeDecision, +} from "@/internal/analytics/cloudflare/dateRange.js"; + +const now = new Date("2026-06-22T00:00:00.000Z"); + +describe("Cloudflare analytics hot retention range", () => { + test("accepts ranges fully inside 90 days", () => { + expect( + isRangeInsideHotRetention({ + startMs: Date.parse("2026-04-01T00:00:00.000Z"), + endMs: Date.parse("2026-06-20T00:00:00.000Z"), + now, + retentionDays: 90, + }), + ).toBe(true); + }); + + test("rejects ranges older than 90 days", () => { + expect( + isRangeInsideHotRetention({ + startMs: Date.parse("2026-02-01T00:00:00.000Z"), + endMs: Date.parse("2026-06-20T00:00:00.000Z"), + now, + retentionDays: 90, + }), + ).toBe(false); + }); + + test("resolves missing custom range as hot query", () => { + expect(resolveHotRangeDecision({ now, retentionDays: 90 })).toEqual({ + canUseHotStore: true, + reason: "default-hot-range", + }); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-date-range.test.ts +``` + +预期:FAIL,错误包含: + +```text +Cannot find module '@/internal/analytics/cloudflare/dateRange.js' +``` + +- [ ] **步骤 3:编写最小实现** + +新建 `server/src/internal/analytics/cloudflare/dateRange.ts`: + +```ts +const DAY_MS = 24 * 60 * 60 * 1000; + +export const isRangeInsideHotRetention = ({ + startMs, + endMs, + now = new Date(), + retentionDays, +}: { + startMs: number; + endMs: number; + now?: Date; + retentionDays: number; +}): boolean => { + if (!Number.isFinite(startMs) || !Number.isFinite(endMs)) return false; + if (startMs > endMs) return false; + const cutoff = now.getTime() - retentionDays * DAY_MS; + return startMs >= cutoff && endMs <= now.getTime() + DAY_MS; +}; + +export type HotRangeDecision = + | { canUseHotStore: true; reason: "default-hot-range" | "inside-hot-range" } + | { canUseHotStore: false; reason: "outside-hot-range" | "invalid-range" }; + +export const resolveHotRangeDecision = ({ + customRange, + now = new Date(), + retentionDays, +}: { + customRange?: { start?: number; end?: number }; + now?: Date; + retentionDays: number; +}): HotRangeDecision => { + if (!customRange?.start || !customRange?.end) { + return { canUseHotStore: true, reason: "default-hot-range" }; + } + if (customRange.start >= customRange.end) { + return { canUseHotStore: false, reason: "invalid-range" }; + } + return isRangeInsideHotRetention({ + startMs: customRange.start, + endMs: customRange.end, + now, + retentionDays, + }) + ? { canUseHotStore: true, reason: "inside-hot-range" } + : { canUseHotStore: false, reason: "outside-hot-range" }; +}; +``` + +- [ ] **步骤 4:再次运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-date-range.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 5:提交** + +```bash +git add server/tests/unit/analytics/cloudflare-date-range.test.ts server/src/internal/analytics/cloudflare/dateRange.ts +git commit -m "feat: add cloudflare analytics hot range guard" +``` + +--- + +### 任务 5:定义 AnalyticsStore 接口和 Tinybird 包装层 + +**文件:** +- 新建:`server/src/internal/analytics/store/AnalyticsStore.ts` +- 新建:`server/src/internal/analytics/store/tinybirdEventStore.ts` +- 新建:`server/tests/unit/analytics/select-analytics-store.test.ts` +- 新建:`server/src/internal/analytics/store/selectAnalyticsStore.ts` + +- [ ] **步骤 1:先写失败测试** + +新建 `server/tests/unit/analytics/select-analytics-store.test.ts`: + +```ts +import { describe, expect, test } from "bun:test"; +import { selectAnalyticsStore } from "@/internal/analytics/store/selectAnalyticsStore.js"; + +const makeCtx = (env?: Partial) => + ({ + workerEnv: env as Env, + logger: { debug: () => undefined }, + }) as any; + +describe("selectAnalyticsStore", () => { + test("uses tinybird when Cloudflare hot reads are disabled", () => { + const selected = selectAnalyticsStore({ + ctx: makeCtx({ CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED: "false" }), + customRange: { + start: Date.parse("2026-06-01T00:00:00.000Z"), + end: Date.parse("2026-06-02T00:00:00.000Z"), + }, + now: new Date("2026-06-22T00:00:00.000Z"), + }); + + expect(selected.kind).toBe("tinybird"); + expect(selected.reason).toBe("cloudflare-hot-read-disabled"); + }); + + test("uses cloudflare hot store for enabled in-range queries", () => { + const selected = selectAnalyticsStore({ + ctx: makeCtx({ + CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED: "true", + EVENTS_ANALYTICS: { writeDataPoint: () => undefined } as Env["EVENTS_ANALYTICS"], + }), + customRange: { + start: Date.parse("2026-06-01T00:00:00.000Z"), + end: Date.parse("2026-06-02T00:00:00.000Z"), + }, + now: new Date("2026-06-22T00:00:00.000Z"), + }); + + expect(selected.kind).toBe("cloudflare-hot"); + expect(selected.reason).toBe("inside-hot-range"); + }); + + test("falls back to tinybird for older ranges", () => { + const selected = selectAnalyticsStore({ + ctx: makeCtx({ + CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED: "true", + EVENTS_ANALYTICS: { writeDataPoint: () => undefined } as Env["EVENTS_ANALYTICS"], + }), + customRange: { + start: Date.parse("2026-01-01T00:00:00.000Z"), + end: Date.parse("2026-01-02T00:00:00.000Z"), + }, + now: new Date("2026-06-22T00:00:00.000Z"), + }); + + expect(selected.kind).toBe("tinybird"); + expect(selected.reason).toBe("outside-hot-range"); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/select-analytics-store.test.ts +``` + +预期:FAIL,错误包含: + +```text +Cannot find module '@/internal/analytics/store/selectAnalyticsStore.js' +``` + +- [ ] **步骤 3:定义 store 接口** + +新建 `server/src/internal/analytics/store/AnalyticsStore.ts`: + +```ts +import type { + ApiEventsListItem, + ClickHouseResult, + CursorPaginatedResponse, + RawEventFromClickHouse, +} from "@autumn/shared"; +import type { EventNameWithCount } from "../actions/listEventNames.js"; +import type { ListRawEventsParams } from "../actions/listRawEvents.js"; +import type { AutumnContext } from "@/honoUtils/HonoEnv.js"; + +export type AnalyticsListEventsParams = { + customer_id?: string; + entity_id?: string; + feature_ids?: string[]; + custom_range?: { start?: number; end?: number }; + offset: number; + limit: number; + filter_by?: Record; +}; + +export type AnalyticsListByCursorParams = Omit< + AnalyticsListEventsParams, + "offset" +> & { + start_cursor: string; +}; + +export type AnalyticsStore = { + listEventNames(args: { + ctx: AutumnContext; + limit?: number; + }): Promise; + listRawEvents(args: { + ctx: AutumnContext; + params: ListRawEventsParams; + }): Promise>; + listEvents(args: { + ctx: AutumnContext; + params: AnalyticsListEventsParams; + }): Promise<{ + list: ApiEventsListItem[]; + has_more: boolean; + total: number; + offset: number; + limit: number; + }>; + listByCursor(args: { + ctx: AutumnContext; + params: AnalyticsListByCursorParams; + }): Promise>; +}; +``` + +- [ ] **步骤 4:包装 Tinybird store** + +新建 `server/src/internal/analytics/store/tinybirdEventStore.ts`: + +```ts +import { aggregate } from "../actions/aggregate.js"; +import { getCountAndSum } from "../actions/getCountAndSum.js"; +import { listByCursor } from "../actions/listByCursor.js"; +import { listEventNames } from "../actions/listEventNames.js"; +import { listEvents } from "../actions/listEvents.js"; +import { listRawEvents } from "../actions/listRawEvents.js"; +import type { AnalyticsStore } from "./AnalyticsStore.js"; + +export const tinybirdEventStore: AnalyticsStore = { + listEventNames, + listRawEvents, + listEvents, + listByCursor, +}; + +export const tinybirdAggregateActions = { + aggregate, + getCountAndSum, +}; +``` + +如果直接 import action 会造成循环依赖,改为把现有 action 内 Tinybird 逻辑提取到 `server/src/internal/analytics/store/tinybirdEventStore.ts`,再让 action 调用 store。不要保留互相 import。 + +- [ ] **步骤 5:实现 store 选择器** + +新建 `server/src/internal/analytics/store/selectAnalyticsStore.ts`: + +```ts +import type { AutumnContext } from "@/honoUtils/HonoEnv.js"; +import { getCloudflareAnalyticsConfig } from "../cloudflare/analyticsConfig.js"; +import { resolveHotRangeDecision } from "../cloudflare/dateRange.js"; +import { cloudflareHotEventStore } from "../cloudflare/hotEventStore.js"; +import type { AnalyticsStore } from "./AnalyticsStore.js"; +import { tinybirdEventStore } from "./tinybirdEventStore.js"; + +export type SelectedAnalyticsStore = + | { + kind: "cloudflare-hot"; + reason: "default-hot-range" | "inside-hot-range"; + store: AnalyticsStore; + } + | { + kind: "tinybird"; + reason: + | "cloudflare-hot-read-disabled" + | "outside-hot-range" + | "invalid-range"; + store: AnalyticsStore; + }; + +export const selectAnalyticsStore = ({ + ctx, + customRange, + now, +}: { + ctx: AutumnContext; + customRange?: { start?: number; end?: number }; + now?: Date; +}): SelectedAnalyticsStore => { + const config = getCloudflareAnalyticsConfig(ctx.workerEnv); + if (!config.hotReadEnabled) { + return { + kind: "tinybird", + reason: "cloudflare-hot-read-disabled", + store: tinybirdEventStore, + }; + } + + const decision = resolveHotRangeDecision({ + customRange, + now, + retentionDays: config.hotRetentionDays, + }); + + if (decision.canUseHotStore) { + return { + kind: "cloudflare-hot", + reason: decision.reason, + store: cloudflareHotEventStore, + }; + } + + return { + kind: "tinybird", + reason: decision.reason, + store: tinybirdEventStore, + }; +}; +``` + +- [ ] **步骤 6:添加临时 Cloudflare store stub 以解开编译** + +新建 `server/src/internal/analytics/cloudflare/hotEventStore.ts`: + +```ts +import { RecaseError, ErrCode } from "@autumn/shared"; +import { StatusCodes } from "http-status-codes"; +import type { AnalyticsStore } from "../store/AnalyticsStore.js"; + +const notImplemented = () => { + throw new RecaseError({ + message: "Cloudflare hot analytics store is not implemented", + code: ErrCode.InternalError, + statusCode: StatusCodes.NOT_IMPLEMENTED, + }); +}; + +export const cloudflareHotEventStore: AnalyticsStore = { + listEventNames: async () => notImplemented(), + listRawEvents: async () => notImplemented(), + listEvents: async () => notImplemented(), + listByCursor: async () => notImplemented(), +}; +``` + +- [ ] **步骤 7:再次运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/select-analytics-store.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 8:提交** + +```bash +git add server/tests/unit/analytics/select-analytics-store.test.ts server/src/internal/analytics/store/AnalyticsStore.ts server/src/internal/analytics/store/tinybirdEventStore.ts server/src/internal/analytics/store/selectAnalyticsStore.ts server/src/internal/analytics/cloudflare/hotEventStore.ts +git commit -m "feat: add analytics store selector" +``` + +--- + +### 任务 6:实现 Analytics Engine SQL API 封装和热查询 store + +**文件:** +- 新建:`server/tests/unit/analytics/cloudflare-hot-event-store.test.ts` +- 新建:`server/src/internal/analytics/cloudflare/querySql.ts` +- 修改:`server/src/internal/analytics/cloudflare/hotEventStore.ts` + +- [ ] **步骤 1:先写失败测试** + +新建 `server/tests/unit/analytics/cloudflare-hot-event-store.test.ts`: + +```ts +import { afterEach, describe, expect, mock, test } from "bun:test"; +import { cloudflareHotEventStore } from "@/internal/analytics/cloudflare/hotEventStore.js"; + +const originalFetch = globalThis.fetch; + +const makeCtx = () => + ({ + org: { id: "org_1" }, + env: "sandbox", + workerEnv: { + CLOUDFLARE_ACCOUNT_ID: "account_1", + CLOUDFLARE_API_TOKEN: "token_1", + CLOUDFLARE_ANALYTICS_DATASET: "autumn_events_hot", + }, + logger: { debug: () => undefined }, + }) as any; + +afterEach(() => { + globalThis.fetch = originalFetch; +}); + +describe("cloudflareHotEventStore", () => { + test("listEventNames queries Analytics Engine SQL API", async () => { + const fetchMock = mock(async (_url: string, init?: RequestInit) => { + expect(init?.method).toBe("POST"); + expect(String(init?.body)).toContain("blob2 AS event_name"); + expect(String(init?.body)).toContain("index1 = 'org_1'"); + return Response.json({ + data: [{ event_name: "tokens", event_count: 7 }], + meta: [], + rows: 1, + }); + }); + globalThis.fetch = fetchMock as typeof fetch; + + const rows = await cloudflareHotEventStore.listEventNames({ + ctx: makeCtx(), + limit: 10, + }); + + expect(rows).toEqual([{ event_name: "tokens", event_count: 7 }]); + }); + + test("listRawEvents maps blob/double rows to raw event response", async () => { + globalThis.fetch = mock(async () => + Response.json({ + data: [ + { + id: "evt_1", + customer_id: "customer_1", + event_name: "tokens", + timestamp: "2026-06-22T00:00:00.000Z", + value: 1, + properties: "{\"model\":\"x\"}", + idempotency_key: null, + entity_id: null, + }, + ], + meta: [], + rows: 1, + }), + ) as typeof fetch; + + const result = await cloudflareHotEventStore.listRawEvents({ + ctx: makeCtx(), + params: { aggregateAll: true, limit: 100 }, + }); + + expect(result.rows).toBe(1); + expect(result.data[0]).toMatchObject({ + id: "evt_1", + customer_id: "customer_1", + event_name: "tokens", + value: 1, + }); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-hot-event-store.test.ts +``` + +预期:FAIL,错误包含: + +```text +Cloudflare hot analytics store is not implemented +``` + +- [ ] **步骤 3:实现 SQL API 封装** + +新建 `server/src/internal/analytics/cloudflare/querySql.ts`: + +```ts +import { ErrCode, RecaseError } from "@autumn/shared"; +import { StatusCodes } from "http-status-codes"; + +export type AnalyticsEngineSqlResult = { + meta?: unknown[]; + rows?: number; + data: T[]; +}; + +export const escapeSqlString = (value: string): string => + value.replaceAll("\\", "\\\\").replaceAll("'", "\\'"); + +export const quoteSqlString = (value: string): string => + `'${escapeSqlString(value)}'`; + +export const queryAnalyticsEngineSql = async ({ + env, + sql, +}: { + env: Env; + sql: string; +}): Promise> => { + const accountId = env.CLOUDFLARE_ACCOUNT_ID; + const token = env.CLOUDFLARE_API_TOKEN; + + if (!accountId || !token) { + throw new RecaseError({ + message: "Cloudflare Analytics Engine SQL API is not configured", + code: ErrCode.InternalError, + statusCode: StatusCodes.SERVICE_UNAVAILABLE, + }); + } + + const response = await fetch( + `https://api.cloudflare.com/client/v4/accounts/${accountId}/analytics_engine/sql`, + { + method: "POST", + headers: { + Authorization: `Bearer ${token}`, + "Content-Type": "text/plain", + }, + body: sql, + }, + ); + + if (!response.ok) { + throw new RecaseError({ + message: `Cloudflare Analytics Engine SQL query failed with status ${response.status}`, + code: ErrCode.InternalError, + statusCode: StatusCodes.BAD_GATEWAY, + }); + } + + return (await response.json()) as AnalyticsEngineSqlResult; +}; +``` + +- [ ] **步骤 4:实现 hotEventStore** + +替换 `server/src/internal/analytics/cloudflare/hotEventStore.ts` 为: + +```ts +import type { + ApiEventsListItem, + ClickHouseResult, + CursorPaginatedResponse, + RawEventFromClickHouse, +} from "@autumn/shared"; +import { StandardCursor } from "@autumn/shared"; +import { + epochMicrosToDateTime, + tinybirdTimestampToEpochMicros, + tinybirdTimestampToEpochMs, +} from "@autumn/shared/api/common/epochUtils"; +import type { AnalyticsStore } from "../store/AnalyticsStore.js"; +import { + queryAnalyticsEngineSql, + quoteSqlString, +} from "./querySql.js"; + +type RawEventRow = RawEventFromClickHouse & { + idempotency_key: string | null; + entity_id: string | null; +}; + +const dataset = (env: Env): string => + env.CLOUDFLARE_ANALYTICS_DATASET || "autumn_events_hot"; + +const eventSelect = ` + blob1 AS id, + blob4 AS customer_id, + blob3 AS event_name, + blob10 AS timestamp, + double1 AS value, + blob12 AS properties, + blob9 AS idempotency_key, + blob5 AS entity_id, + blob13 AS deductions +`; + +const buildCommonWhere = ({ + orgId, + envName, + customerId, + entityId, + eventNames, +}: { + orgId: string; + envName: string; + customerId?: string; + entityId?: string; + eventNames?: string[]; +}): string[] => { + const where = [ + `index1 = ${quoteSqlString(orgId)}`, + `blob2 = ${quoteSqlString(envName)}`, + ]; + if (customerId) where.push(`blob4 = ${quoteSqlString(customerId)}`); + if (entityId) where.push(`blob5 = ${quoteSqlString(entityId)}`); + if (eventNames && eventNames.length > 0) { + where.push(`blob3 IN (${eventNames.map(quoteSqlString).join(", ")})`); + } + return where; +}; + +const toApiListItem = (row: RawEventRow): ApiEventsListItem => { + let properties = {}; + if (row.properties) { + try { + properties = JSON.parse(row.properties); + } catch {} + } + + return { + id: row.id, + timestamp: tinybirdTimestampToEpochMs(row.timestamp), + feature_id: row.event_name, + customer_id: row.customer_id, + value: row.value ?? 0, + properties, + deductions: null, + }; +}; + +export const cloudflareHotEventStore: AnalyticsStore = { + async listEventNames({ ctx, limit }) { + const env = ctx.workerEnv as Env; + const sql = ` + SELECT blob3 AS event_name, count() AS event_count + FROM ${dataset(env)} + WHERE index1 = ${quoteSqlString(ctx.org.id)} + AND blob2 = ${quoteSqlString(ctx.env)} + GROUP BY event_name + ORDER BY event_count DESC + LIMIT ${Math.max(1, limit ?? 100)} + `; + const result = await queryAnalyticsEngineSql<{ + event_name: string; + event_count: number; + }>({ env, sql }); + return result.data; + }, + + async listRawEvents({ ctx, params }) { + const env = ctx.workerEnv as Env; + const where = buildCommonWhere({ + orgId: ctx.org.id, + envName: ctx.env, + customerId: params.aggregateAll ? undefined : params.customer_id, + entityId: params.entity_id, + eventNames: params.event_names, + }); + const sql = ` + SELECT ${eventSelect} + FROM ${dataset(env)} + WHERE ${where.join(" AND ")} + ORDER BY timestamp DESC + LIMIT ${Math.max(1, params.limit ?? 1000)} + `; + const result = await queryAnalyticsEngineSql({ env, sql }); + return { + meta: [ + { name: "id" }, + { name: "customer_id" }, + { name: "event_name" }, + { name: "timestamp" }, + { name: "value" }, + { name: "properties" }, + { name: "idempotency_key" }, + { name: "entity_id" }, + ], + rows: result.data.length, + data: result.data, + } satisfies ClickHouseResult; + }, + + async listEvents({ ctx, params }) { + const env = ctx.workerEnv as Env; + const fetchLimit = params.limit + 1; + const where = buildCommonWhere({ + orgId: ctx.org.id, + envName: ctx.env, + customerId: params.customer_id, + entityId: params.entity_id, + eventNames: params.feature_ids, + }); + const sql = ` + SELECT ${eventSelect} + FROM ${dataset(env)} + WHERE ${where.join(" AND ")} + ORDER BY timestamp DESC, id DESC + LIMIT ${fetchLimit} + OFFSET ${Math.max(0, params.offset)} + `; + const result = await queryAnalyticsEngineSql({ env, sql }); + const hasMore = result.data.length > params.limit; + const rows = hasMore ? result.data.slice(0, params.limit) : result.data; + return { + list: rows.map(toApiListItem), + has_more: hasMore, + total: rows.length, + offset: params.offset, + limit: params.limit, + }; + }, + + async listByCursor({ ctx, params }): Promise> { + const env = ctx.workerEnv as Env; + const cursor = StandardCursor.decode(params.start_cursor); + const where = buildCommonWhere({ + orgId: ctx.org.id, + envName: ctx.env, + customerId: params.customer_id, + entityId: params.entity_id, + eventNames: params.feature_ids, + }); + if (cursor) { + where.push( + `(timestamp < ${quoteSqlString(epochMicrosToDateTime(cursor.t))} OR (timestamp = ${quoteSqlString(epochMicrosToDateTime(cursor.t))} AND id < ${quoteSqlString(cursor.id)}))`, + ); + } + + const fetchLimit = params.limit + 1; + const sql = ` + SELECT ${eventSelect} + FROM ${dataset(env)} + WHERE ${where.join(" AND ")} + ORDER BY timestamp DESC, id DESC + LIMIT ${fetchLimit} + `; + const result = await queryAnalyticsEngineSql({ env, sql }); + const hasMore = result.data.length > params.limit; + const rows = hasMore ? result.data.slice(0, params.limit) : result.data; + const last = rows.at(-1); + + return { + list: rows.map(toApiListItem), + next_cursor: + hasMore && last + ? StandardCursor.encode({ + id: last.id, + t: tinybirdTimestampToEpochMicros(last.timestamp), + }) + : null, + }; + }, +}; +``` + +- [ ] **步骤 5:再次运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-hot-event-store.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 6:提交** + +```bash +git add server/tests/unit/analytics/cloudflare-hot-event-store.test.ts server/src/internal/analytics/cloudflare/querySql.ts server/src/internal/analytics/cloudflare/hotEventStore.ts +git commit -m "feat: query hot analytics from analytics engine" +``` + +--- + +### 任务 7:把热查询读路径接入 actions,并保留 Tinybird 回退 + +**文件:** +- 修改:`server/src/internal/analytics/actions/listEventNames.ts` +- 修改:`server/src/internal/analytics/actions/listRawEvents.ts` +- 修改:`server/src/internal/analytics/actions/listEvents.ts` +- 修改:`server/src/internal/analytics/actions/listByCursor.ts` +- 修改:`server/src/internal/analytics/internalHandlers/handleListEventNames.ts` +- 测试:`server/tests/unit/analytics/select-analytics-store.test.ts` + +- [ ] **步骤 1:先扩展选择器测试,覆盖 action 不再被 handler 的 Tinybird assertion 拦截** + +在 `server/tests/unit/analytics/select-analytics-store.test.ts` 增加: + +```ts +test("handler source does not require Tinybird before selecting a store", async () => { + const { readFileSync } = await import("node:fs"); + const { join } = await import("node:path"); + const source = readFileSync( + join(import.meta.dir, "../../../src/internal/analytics/internalHandlers/handleListEventNames.ts"), + "utf8", + ); + + expect(source).not.toContain("assertTinybirdAvailable()"); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/select-analytics-store.test.ts +``` + +预期:FAIL,错误包含: + +```text +Expected substring not to be present: "assertTinybirdAvailable()" +``` + +- [ ] **步骤 3:修改 `listEventNames.ts`** + +把 `server/src/internal/analytics/actions/listEventNames.ts` 改成: + +```ts +import type { AutumnContext } from "@/honoUtils/HonoEnv.js"; +import { selectAnalyticsStore } from "../store/selectAnalyticsStore.js"; + +export type EventNameWithCount = { + event_name: string; + event_count: number; +}; + +export const listEventNames = async ({ + ctx, + limit, +}: { + ctx: AutumnContext; + limit?: number; +}): Promise => { + const selected = selectAnalyticsStore({ ctx }); + ctx.logger.debug("Selected analytics store for event names", { + store: selected.kind, + reason: selected.reason, + }); + return selected.store.listEventNames({ ctx, limit }); +}; +``` + +- [ ] **步骤 4:修改 `handleListEventNames.ts`** + +删除 `server/src/internal/analytics/internalHandlers/handleListEventNames.ts` 里的: + +```ts +import { assertTinybirdAvailable } from "@/external/tinybird/tinybirdUtils.js"; +``` + +删除 handler 内: + +```ts +assertTinybirdAvailable(); +``` + +- [ ] **步骤 5:修改 `listRawEvents.ts`** + +保留现有 billing cycle 日期计算 helper,把真正查询 Tinybird pipe 的部分移动到 `tinybirdEventStore`,然后在 action 入口处调用: + +```ts +const selected = selectAnalyticsStore({ + ctx, + customRange: params.custom_range, +}); +ctx.logger.debug("Selected analytics store for raw events", { + store: selected.kind, + reason: selected.reason, +}); +return selected.store.listRawEvents({ ctx, params }); +``` + +注意:为避免循环依赖,`tinybirdEventStore.listRawEvents` 必须持有原 Tinybird pipe 查询实现,`actions/listRawEvents.ts` 只负责选择 store 和公共参数处理。 + +- [ ] **步骤 6:修改 `listEvents.ts` 和 `listByCursor.ts`** + +在两个文件的 action 入口处按同样模式选择 store: + +```ts +const selected = selectAnalyticsStore({ + ctx, + customRange: params.custom_range, +}); +ctx.logger.debug("Selected analytics store for events list", { + store: selected.kind, + reason: selected.reason, +}); +return selected.store.listEvents({ ctx, params }); +``` + +`listByCursor.ts` 使用: + +```ts +return selected.store.listByCursor({ ctx, params }); +``` + +- [ ] **步骤 7:运行测试,确认通过** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/select-analytics-store.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 8:运行 analytics 相关单测** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics +``` + +预期:PASS。 + +- [ ] **步骤 9:提交** + +```bash +git add server/src/internal/analytics/actions/listEventNames.ts server/src/internal/analytics/actions/listRawEvents.ts server/src/internal/analytics/actions/listEvents.ts server/src/internal/analytics/actions/listByCursor.ts server/src/internal/analytics/internalHandlers/handleListEventNames.ts server/tests/unit/analytics/select-analytics-store.test.ts +git commit -m "feat: route hot analytics reads through store selector" +``` + +--- + +### 任务 8:配置 Wrangler bindings 和类型生成 + +**文件:** +- 修改:`server/wrangler.jsonc` +- 修改:`server/worker-configuration.d.ts` +- 测试:`server/tests/unit/analytics/cloudflare-config.test.ts` + +- [ ] **步骤 1:先扩展配置 source guard** + +在 `server/tests/unit/analytics/cloudflare-config.test.ts` 增加: + +```ts +test("wrangler config declares analytics engine and pipeline bindings", async () => { + const { readFileSync } = await import("node:fs"); + const { join } = await import("node:path"); + const source = readFileSync(join(import.meta.dir, "../../../wrangler.jsonc"), "utf8"); + + expect(source).toContain("\"analytics_engine_datasets\""); + expect(source).toContain("\"binding\": \"EVENTS_ANALYTICS\""); + expect(source).toContain("\"dataset\": \"autumn_events_hot\""); + expect(source).toContain("\"pipelines\""); + expect(source).toContain("\"binding\": \"EVENTS_ARCHIVE_PIPELINE\""); +}); +``` + +- [ ] **步骤 2:运行测试,确认它先失败** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-config.test.ts +``` + +预期:FAIL,错误包含: + +```text +Expected substring: "\"analytics_engine_datasets\"" +``` + +- [ ] **步骤 3:修改顶层 `server/wrangler.jsonc`** + +在顶层 `send_email` 后插入: + +```jsonc +"analytics_engine_datasets": [ + { + "binding": "EVENTS_ANALYTICS", + "dataset": "autumn_events_hot" + } +], +"pipelines": [ + { + "binding": "EVENTS_ARCHIVE_PIPELINE", + "stream": "autumn-events-archive", + "remote": true + } +], +``` + +在顶层 `vars` 里加入: + +```jsonc +"CLOUDFLARE_ANALYTICS_WRITE_ENABLED": "false", +"CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED": "false", +"CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED": "false", +"CLOUDFLARE_ANALYTICS_TINYBIRD_FALLBACK_ENABLED": "true", +"CLOUDFLARE_ANALYTICS_DATASET": "autumn_events_hot", +"CLOUDFLARE_ANALYTICS_HOT_RETENTION_DAYS": "90", +``` + +- [ ] **步骤 4:同步 staging env 配置** + +在 `server/wrangler.jsonc` 的 `env.staging` 内加入同名 `analytics_engine_datasets`、`pipelines` 和 `vars`。staging dataset 和 stream 使用: + +```jsonc +"dataset": "autumn_events_hot_staging" +``` + +```jsonc +"stream": "autumn-events-archive-staging" +``` + +- [ ] **步骤 5:生成 Worker 类型** + +运行: + +```bash +cd server && bunx wrangler types +``` + +预期:`server/worker-configuration.d.ts` 更新,包含: + +```ts +EVENTS_ANALYTICS: AnalyticsEngineDataset; +EVENTS_ARCHIVE_PIPELINE: Pipeline; +``` + +- [ ] **步骤 6:再次运行测试和类型检查** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics/cloudflare-config.test.ts && bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 7:提交** + +```bash +git add server/wrangler.jsonc server/worker-configuration.d.ts server/tests/unit/analytics/cloudflare-config.test.ts +git commit -m "chore: add cloudflare analytics bindings" +``` + +--- + +### 任务 9:编写 R2/Pipelines 历史归档 runbook + +**文件:** +- 新建:`docs/cloudflare-analytics-hot-cold-runbook.md` + +- [ ] **步骤 1:新建 runbook** + +新建 `docs/cloudflare-analytics-hot-cold-runbook.md`: + +```md +# Cloudflare Analytics 热冷分层 Runbook + +## 架构 + +- 热查询:Cloudflare Analytics Engine,数据集 `autumn_events_hot`,只用于近 90 天 dashboard/API analytics。 +- 历史归档:Cloudflare Pipelines 写入 R2 Data Catalog/Iceberg 表,保留所有事件明细。 +- 回退:Tinybird 保持可读可写,直到连续对账达标后再退役。 +- 主业务:积分余额、扣减、订阅和幂等仍以 Postgres/Drizzle 为准。 + +## Cloudflare 资源 + +Production: + +```bash +cd server +bunx wrangler pipelines streams create autumn-events-archive +``` + +Staging: + +```bash +cd server +bunx wrangler pipelines streams create autumn-events-archive-staging +``` + +Analytics Engine dataset 由 `wrangler.jsonc` 的 `analytics_engine_datasets` binding 负责绑定。 + +## 上线开关顺序 + +1. `CLOUDFLARE_ANALYTICS_WRITE_ENABLED=false` +2. `CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED=false` +3. `CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED=false` +4. 部署含 bindings 的 Worker。 +5. 在 staging 打开 `CLOUDFLARE_ANALYTICS_WRITE_ENABLED=true`。 +6. 在 staging 打开 `CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED=true`。 +7. 对账 staging 的 Tinybird row count、Analytics Engine row count、R2 archive row count。 +8. production 先打开写入和归档,保持读路径走 Tinybird。 +9. production 对账 7 天后,按 10%、50%、100% 打开 `CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED=true`。 + +## 回滚 + +读路径回滚: + +```bash +cd server +bunx wrangler secret put CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED +``` + +输入: + +```text +false +``` + +写路径回滚: + +```bash +cd server +bunx wrangler secret put CLOUDFLARE_ANALYTICS_WRITE_ENABLED +bunx wrangler secret put CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED +``` + +两个值都输入: + +```text +false +``` + +## 对账 SQL + +Analytics Engine 近 24 小时事件数: + +```sql +SELECT count() AS events +FROM autumn_events_hot +WHERE index1 = 'org_...' +``` + +R2 SQL 历史归档事件数按天验证: + +```sql +SELECT date_trunc('day', timestamp) AS day, count(*) AS events +FROM autumn_events_archive +GROUP BY day +ORDER BY day DESC +LIMIT 14 +``` + +## Tinybird 退役门槛 + +- Cloudflare 双写连续 30 天无系统性失败。 +- `/query/event_names/list` 和 `/query/raw` 在 production 的 Cloudflare 热读结果与 Tinybird 对账差异低于 1%。 +- R2 归档至少覆盖 90 天以上历史,并能通过 R2 SQL 查回指定 org/env/customer/event_name。 +- revenue analytics 和 migration item events 有独立替代方案,或明确继续保留 Tinybird 只服务这些低频路径。 +``` + +- [ ] **步骤 2:提交** + +```bash +git add docs/cloudflare-analytics-hot-cold-runbook.md +git commit -m "docs: add cloudflare analytics hot cold runbook" +``` + +--- + +### 任务 10:端到端验证与灰度 + +**文件:** +- 修改:按前面任务产生的所有文件 + +- [ ] **步骤 1:运行新增单测** + +运行: + +```bash +cd server && bun test --isolate \ + tests/unit/analytics/cloudflare-event-schema.test.ts \ + tests/unit/analytics/cloudflare-config.test.ts \ + tests/unit/analytics/cloudflare-writers.test.ts \ + tests/unit/analytics/cloudflare-date-range.test.ts \ + tests/unit/analytics/cloudflare-hot-event-store.test.ts \ + tests/unit/analytics/select-analytics-store.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 2:运行 analytics 单测集合** + +运行: + +```bash +cd server && bun test --isolate tests/unit/analytics +``` + +预期:PASS。 + +- [ ] **步骤 3:运行类型检查** + +运行: + +```bash +cd server && bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 4:本地 smoke test 保持 Cloudflare analytics 关闭** + +运行: + +```bash +cd server && CLOUDFLARE_ANALYTICS_WRITE_ENABLED=false CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED=false bun run dev +``` + +预期:服务正常启动,`/query/event_names/list` 和 `/query/raw` 仍走 Tinybird;如果 Tinybird 未配置,应返回结构化 `TinybirdDisabled` 错误,不应返回纯文本 500。 + +- [ ] **步骤 5:staging 打开写入和归档,保持读路径关闭** + +运行: + +```bash +cd server +bunx wrangler secret put CLOUDFLARE_ANALYTICS_WRITE_ENABLED --env staging +bunx wrangler secret put CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED --env staging +bunx wrangler secret put CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED --env staging +``` + +输入值: + +```text +CLOUDFLARE_ANALYTICS_WRITE_ENABLED=true +CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED=true +CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED=false +``` + +预期:staging 写入 Cloudflare,但所有读路径继续走 Tinybird。 + +- [ ] **步骤 6:staging 对账** + +使用 `docs/cloudflare-analytics-hot-cold-runbook.md` 的 SQL,对一个测试 org 查询: + +```text +Tinybird events count +Analytics Engine events count +R2 SQL archive events count +``` + +预期:同一 24 小时窗口内三者行数差异低于 1%。差异超过 1% 时保持 hot read 关闭,检查 `writeEventsToCloudflareAnalytics` 的日志和 Sentry。 + +- [ ] **步骤 7:production 灰度读路径** + +只在完成 staging 对账后执行: + +```bash +cd server +bunx wrangler secret put CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED +``` + +输入: + +```text +true +``` + +预期:只有 90 天内 `/query/event_names/list`、`/query/raw`、events list/cursor 查询走 Analytics Engine;超过 90 天查询继续走 Tinybird。 + +- [ ] **步骤 8:最终提交** + +```bash +git status --short +git add server/src/internal/analytics server/src/external/tinybird/sendEvents/sendEvents.ts server/wrangler.jsonc server/worker-configuration.d.ts server/tests/unit/analytics docs/cloudflare-analytics-hot-cold-runbook.md +git commit -m "feat: add cloudflare analytics hot cold migration path" +``` + +## 自检清单 + +- [ ] 所有新增 Cloudflare analytics 写入失败都被吞掉并记录,不影响 `track/check` 主路径。 +- [ ] 所有 90 天外查询都回退 Tinybird,不误用 Analytics Engine。 +- [ ] `/query/event_names/list` 不再在 handler 层强依赖 Tinybird。 +- [ ] `wrangler.jsonc` 的顶层和 staging env 都声明了 `analytics_engine_datasets` 与 `pipelines`。 +- [ ] `worker-configuration.d.ts` 来自 `bunx wrangler types`,不是手写。 +- [ ] 文档明确 Tinybird 退役门槛,且没有把 revenue analytics 纳入第一阶段替换范围。 diff --git a/server/src/external/stripe/handleStripeWebhookEvent.ts b/server/src/external/stripe/handleStripeWebhookEvent.ts index 23992b0c4..f2a7011bd 100644 --- a/server/src/external/stripe/handleStripeWebhookEvent.ts +++ b/server/src/external/stripe/handleStripeWebhookEvent.ts @@ -1,11 +1,11 @@ import type { Context } from "hono"; -import { Stripe } from "stripe"; import { handleStripeInvoicePaid } from "@/external/stripe/webhookHandlers/handleStripeInvoicePaid/handleStripeInvoicePaid.js"; import { handleStripeSubscriptionUpdated } from "@/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/handleStripeSubscriptionUpdated.js"; import { unsetOrgStripeKeys } from "@/internal/orgs/orgUtils.js"; import { handleWebhookErrorSkip } from "@/utils/routerUtils/webhookErrorSkip.js"; import { captureException, getSentryTags } from "../sentry/sentryUtils.js"; +import { isStripeError } from "./stripeErrorUtils.js"; import { handleCusDiscountDeleted } from "./webhookHandlers/handleCusDiscountDeleted.js"; import { handleStripeCustomerUpdated } from "./webhookHandlers/handleStripeCustomerUpdated.js"; import { handleInvoiceUpdated } from "./webhookHandlers/handleInvoiceUpdated.js"; @@ -103,7 +103,7 @@ export const handleStripeWebhookEvent = async ( }), }); - if (error instanceof Stripe.errors.StripeError) { + if (isStripeError(error)) { if (error.message.includes("No such customer")) { logger.warn(`stripe customer missing: ${error.message}`); return c.json({ success: true }, 200); diff --git a/server/src/external/stripe/stripeErrorUtils.ts b/server/src/external/stripe/stripeErrorUtils.ts new file mode 100644 index 000000000..d9c38d599 --- /dev/null +++ b/server/src/external/stripe/stripeErrorUtils.ts @@ -0,0 +1,11 @@ +import type Stripe from "stripe"; + +export const isStripeError = (error: unknown): error is Stripe.errors.StripeError => { + if (!(error instanceof Error)) return false; + + const stripeError = error as Partial; + return ( + typeof stripeError.type === "string" && + stripeError.type.startsWith("Stripe") + ); +}; diff --git a/server/src/external/tinybird/tinybirdUtils.ts b/server/src/external/tinybird/tinybirdUtils.ts index ecbcb62ef..8e31aa110 100644 --- a/server/src/external/tinybird/tinybirdUtils.ts +++ b/server/src/external/tinybird/tinybirdUtils.ts @@ -9,11 +9,14 @@ export type TinybirdConfig = { export let tinybirdConfig: TinybirdConfig | null = null; export const initTinybirdConfig = (env: Env) => { + const baseUrl = env.TINYBIRD_US_EAST_API_URL ?? env.TINYBIRD_API_URL; + const token = env.TINYBIRD_US_EAST_TOKEN ?? env.TINYBIRD_TOKEN; + tinybirdConfig = - env.TINYBIRD_API_URL && env.TINYBIRD_TOKEN + baseUrl && token ? { - baseUrl: env.TINYBIRD_API_URL, - token: env.TINYBIRD_TOKEN, + baseUrl, + token, } : null; }; diff --git a/server/src/honoMiddlewares/errorMiddleware.ts b/server/src/honoMiddlewares/errorMiddleware.ts index 21f53f801..e7bcec6cd 100644 --- a/server/src/honoMiddlewares/errorMiddleware.ts +++ b/server/src/honoMiddlewares/errorMiddleware.ts @@ -1,9 +1,9 @@ import { ErrCode, RecaseError } from "@autumn/shared"; import type { Context } from "hono"; import type { ContentfulStatusCode } from "hono/utils/http-status"; -import Stripe from "stripe"; import { ZodError } from "zod/v4"; import { formatZodError } from "@/errors/formatZodError.js"; +import { isStripeError } from "@/external/stripe/stripeErrorUtils.js"; import type { HonoEnv } from "@/honoUtils/HonoEnv.js"; import { captureException, @@ -68,17 +68,8 @@ export const errorMiddleware = (err: Error, c: Context) => { ); } - // If we got here, it's an error worth tracking - capture to Sentry - captureException(err, { - tags: getSentryTags({ - ctx, - path: c.req.path, - method: c.req.method, - }), - }); - // 2. Handle Stripe errors - if (err instanceof Stripe.errors.StripeError) { + if (isStripeError(err)) { logger.error( `STRIPE ERROR (${ctx.org?.slug || "unknown"}): ${err.message}`, { @@ -121,6 +112,15 @@ export const errorMiddleware = (err: Error, c: Context) => { ); } + // If we got here, it's an error worth tracking - capture to Sentry + captureException(err, { + tags: getSentryTags({ + ctx, + path: c.req.path, + method: c.req.method, + }), + }); + // 4. Handle unknown errors logger.error( `UNKNOWN ERROR (${ctx.org?.slug || "unknown"}): ${err.message}`, diff --git a/server/src/honoMiddlewares/errorSkipMiddleware.ts b/server/src/honoMiddlewares/errorSkipMiddleware.ts index 80dd9e404..bbd38826a 100644 --- a/server/src/honoMiddlewares/errorSkipMiddleware.ts +++ b/server/src/honoMiddlewares/errorSkipMiddleware.ts @@ -1,9 +1,10 @@ import { ErrCode, RecaseError } from "@autumn/shared"; import type { Context } from "hono"; import type { ContentfulStatusCode } from "hono/utils/http-status"; -import Stripe from "stripe"; +import type Stripe from "stripe"; import { ZodError } from "zod/v4"; import { formatZodError } from "@/errors/formatZodError.js"; +import { isStripeError } from "@/external/stripe/stripeErrorUtils.js"; import type { HonoEnv } from "@/honoUtils/HonoEnv.js"; import { matchRoute } from "./middlewareUtils.js"; @@ -57,7 +58,7 @@ const STRIPE_RULES = [ { name: "Stripe rate limit exceeded", match: (err: Error) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && (err.type === "StripeRateLimitError" || err.statusCode === 429), statusCode: 429, code: "stripe_rate_limit_exceeded", @@ -65,7 +66,7 @@ const STRIPE_RULES = [ { name: "Exchange router invalid API key", match: (err: Error, c: Context) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && c.req.url.includes("/exchange") && err.message.includes("Invalid API Key provided"), statusCode: 400, @@ -74,7 +75,7 @@ const STRIPE_RULES = [ { name: "Billing portal config error", match: (err: Error, c: Context) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && c.req.url.includes("/billing_portal") && err.message.includes("Provide a configuration or create your default"), statusCode: 404, @@ -83,7 +84,7 @@ const STRIPE_RULES = [ { name: "Billing portal return_url error", match: (err: Error, c: Context) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && c.req.url.includes("/billing_portal") && err.message.includes("Invalid URL: An explicit scheme (such as https)"), statusCode: 400, @@ -92,15 +93,14 @@ const STRIPE_RULES = [ { name: "Card declined error", match: (err: Error) => - err instanceof Stripe.errors.StripeError && - err.message.includes("Your card was declined."), + isStripeError(err) && err.message.includes("Your card was declined."), statusCode: 400, code: ErrCode.InvalidRequest, }, { name: "Cannot delete org with production customers", match: (err: Error) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && err.message.includes("Cannot delete org with production mode customers"), statusCode: 400, code: ErrCode.InvalidRequest, @@ -108,7 +108,7 @@ const STRIPE_RULES = [ { name: "Webhook endpoint limit reached", match: (err: Error) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && err.message.includes( "You have reached the maximum of 16 test webhook endpoints", ), @@ -118,7 +118,7 @@ const STRIPE_RULES = [ { name: "Invalid URL scheme error", match: (err: Error) => - err instanceof Stripe.errors.StripeError && + isStripeError(err) && err.message.includes( "Invalid URL: An explicit scheme (such as https) must be provided", ), @@ -128,8 +128,7 @@ const STRIPE_RULES = [ { name: "Not a valid URL error", match: (err: Error) => - err instanceof Stripe.errors.StripeError && - err.message.includes("Not a valid URL"), + isStripeError(err) && err.message.includes("Not a valid URL"), statusCode: 400, code: ErrCode.InvalidRequest, }, diff --git a/server/src/initHono.ts b/server/src/initHono.ts index 699cbc616..7f9d98d8d 100644 --- a/server/src/initHono.ts +++ b/server/src/initHono.ts @@ -66,10 +66,17 @@ const memoizeRouter = (createRouter: (env: Env) => LazyRouter) => { }; const routeToRouter = - (getRouter: (env: Env) => LazyRouter) => async (c: Context) => { + ( + getRouter: (env: Env) => LazyRouter, + options?: { stripPrefix?: string }, + ) => + async (c: Context) => { const router = getRouter(c.env); + const request = options?.stripPrefix + ? rewriteMountedRequestPath(c.req.raw, options.stripPrefix) + : c.req.raw; return router.fetch( - c.req.raw, + request, c.env, c.executionCtx as ExecutionContext, ); @@ -79,12 +86,49 @@ const mountRouter = ( app: Hono, path: string, getRouter: (env: Env) => LazyRouter, + options?: { stripPrefix?: boolean }, ) => { - const handler = routeToRouter(getRouter); + const handler = routeToRouter( + getRouter, + options?.stripPrefix ? { stripPrefix: path } : undefined, + ); app.all(path, handler); app.all(`${path}/*`, handler); }; +export const rewriteMountedRequestPath = ( + request: Request, + mountPath: string, +): Request => { + const url = new URL(request.url); + const suffix = + url.pathname === mountPath ? "" : url.pathname.slice(mountPath.length); + url.pathname = suffix || "/"; + return new Request(url, request); +}; + +export const rewriteAutumnAuthRequest = (request: Request): Request => { + const url = new URL(request.url); + url.pathname = `/api/auth/autumn${url.pathname.slice("/api/autumn".length)}`; + return new Request(url, request); +}; + +export const isPublicDevRoute = (method: string, pathname: string): boolean => { + if (method === "POST" && pathname === "/dev/cli/stripe") return true; + return method === "GET" && /^\/dev\/otp\/[^/]+$/.test(pathname); +}; + +const handleAuthRequest = async (c: Context, request: Request) => { + const requestDb = createRequestScopedDb(c.env); + try { + return await createAuth(c.env, { + db: requestDb.db, + }).handler(request); + } finally { + c.executionCtx.waitUntil(requestDb.dispose()); + } +}; + export const createHonoApp = (_env: Env) => { const app = new Hono(); const getChatProxyRouter = memoizeRouter((env) => createChatProxyRouter(env)); @@ -138,15 +182,12 @@ export const createHonoApp = (_env: Env) => { return handleListAuthOrganizations(c); }); + app.on(["POST", "GET"], "/api/autumn/*", async (c) => { + return handleAuthRequest(c, rewriteAutumnAuthRequest(c.req.raw)); + }); + app.on(["POST", "GET"], "/api/auth/*", async (c) => { - const requestDb = createRequestScopedDb(c.env); - try { - return await createAuth(c.env, { - db: requestDb.db, - }).handler(c.req.raw); - } finally { - c.executionCtx.waitUntil(requestDb.dispose()); - } + return handleAuthRequest(c, c.req.raw); }); app.get("/ready/:token", handleReadyCheck); @@ -170,6 +211,14 @@ export const createHonoApp = (_env: Env) => { }); mountRouter(app, "/cli", getCliRouter); + const publicRouterHandler = routeToRouter(getPublicRouter); + app.all("/dev/otp/:otp", async (c, next) => { + if (!isPublicDevRoute(c.req.method, new URL(c.req.url).pathname)) { + return next(); + } + return publicRouterHandler(c); + }); + app.post("/dev/cli/stripe", publicRouterHandler); // Add Render region identifier header for load balancer verification app.use("*", async (c, next) => { @@ -189,10 +238,9 @@ export const createHonoApp = (_env: Env) => { mountRouter(app, "/checkouts", getPublicRouter); mountRouter(app, "/invoices", getPublicRouter); - mountRouter(app, "/dev", getPublicRouter); mountRouter(app, "/trmnl", getPublicRouter); - mountRouter(app, "/v1", getApiRouter); + mountRouter(app, "/v1", getApiRouter, { stripPrefix: true }); for (const path of [ "/admin", @@ -200,6 +248,7 @@ export const createHonoApp = (_env: Env) => { "/invoice_templates", "/products", "/customers", + "/dev", "/consents", "/pricing-agent", "/feedback", diff --git a/server/src/routers/internalRouter.ts b/server/src/routers/internalRouter.ts index 7ca57da79..16109ce49 100644 --- a/server/src/routers/internalRouter.ts +++ b/server/src/routers/internalRouter.ts @@ -5,6 +5,7 @@ import { analyticsMiddleware } from "../honoMiddlewares/analyticsMiddleware"; import { apiVersionMiddleware } from "../honoMiddlewares/apiVersionMiddleware"; import { baseMiddleware } from "../honoMiddlewares/baseMiddleware.js"; import { betterAuthMiddleware } from "../honoMiddlewares/betterAuthMiddleware"; +import { errorMiddleware } from "../honoMiddlewares/errorMiddleware.js"; import { orgConfigMiddleware } from "../honoMiddlewares/orgConfigMiddleware"; import { queryMiddleware } from "../honoMiddlewares/queryMiddleware"; import { refreshCacheMiddleware } from "../honoMiddlewares/refreshCacheMiddleware"; @@ -58,5 +59,7 @@ export const createInternalRouter = () => { internalRouter.route("", migrationRpcRouter); internalRouter.route("/workbench", workbenchRouter); + internalRouter.onError(errorMiddleware); + return internalRouter; }; diff --git a/server/src/utils/auth.ts b/server/src/utils/auth.ts index 10e1db534..1aae03c62 100644 --- a/server/src/utils/auth.ts +++ b/server/src/utils/auth.ts @@ -24,6 +24,7 @@ import { createAfterSessionCreated } from "./authUtils/afterSessionCreated.js"; import { createAfterSessionDeleted } from "./authUtils/afterSessionDeleted.js"; import { createBeforeSessionCreated } from "./authUtils/beforeSessionCreated.js"; import { getScopesForUserInOrg } from "./authUtils/customSessionScopes.js"; +import { createAutumnBetterAuthPlugin } from "./autumnBetterAuthPlugin.js"; import { ADMIN_USER_IDs } from "./constants.js"; import { isAllowedOrigin } from "./corsOrigins.js"; import { ensureHeadersGetSetCookie } from "./headersGetSetCookiePolyfill.js"; @@ -104,6 +105,30 @@ export const getAuthCookieAdvancedOptions = (env: Env) => { }; }; +const isLoopbackUrl = (rawUrl?: string) => { + if (!rawUrl) return false; + try { + const { hostname } = new URL(rawUrl); + return hostname === "localhost" || hostname === "127.0.0.1"; + } catch { + return false; + } +}; + +export const getAutumnBetterAuthApiUrl = (env: Env) => { + const configuredUrl = env.BETTER_AUTH_URL ?? env.SERVER_URL; + + if ( + env.NODE_ENV === "production" && + env.WORKER === "true" && + isLoopbackUrl(configuredUrl) + ) { + return "https://autumn-api.bowong.cc"; + } + + return configuredUrl; +}; + export const createJwtOptions = () => ({ disableSettingJwtHeader: true, }); @@ -376,6 +401,11 @@ export const createAuth = (env: Env, overrides: { db: DrizzleCli }) => { }, }, }), + + createAutumnBetterAuthPlugin({ + env, + autumnURL: getAutumnBetterAuthApiUrl(env), + }), ], } satisfies BetterAuthOptions; diff --git a/server/src/utils/autumnBetterAuthPlugin.ts b/server/src/utils/autumnBetterAuthPlugin.ts new file mode 100644 index 000000000..9ddc0461c --- /dev/null +++ b/server/src/utils/autumnBetterAuthPlugin.ts @@ -0,0 +1,170 @@ +import { createAuthEndpoint } from "@better-auth/core/api"; +import { Autumn } from "@useautumn/sdk"; +import { getSessionFromCtx } from "better-auth/api"; + +type BetterAuthSession = { + user?: { + id: string; + name?: string | null; + email?: string | null; + }; + session?: { + activeOrganizationId?: string | null; + }; +}; + +type BetterAuthOrganization = { + id: string; + name?: string | null; +}; + +const getActiveOrganization = async ( + ctx: unknown, + session: BetterAuthSession | null, +): Promise => { + const organizationId = session?.session?.activeOrganizationId; + if (!organizationId) return null; + + const context = (ctx as { context?: { adapter?: unknown } }).context; + const adapter = context?.adapter as + | { + findOne: (params: { + model: string; + where: { field: string; value: string }[]; + }) => Promise; + } + | undefined; + + return ( + (await adapter?.findOne({ + model: "organization", + where: [{ field: "id", value: organizationId }], + })) ?? null + ); +}; + +const resolveIdentity = ( + session: BetterAuthSession | null, + organization: BetterAuthOrganization | null, +) => { + if (organization) { + return { + customerId: organization.id, + customerData: { name: organization.name ?? undefined }, + }; + } + + if (!session?.user) return null; + + return { + customerId: session.user.id, + customerData: { + name: session.user.name ?? undefined, + email: session.user.email ?? undefined, + }, + }; +}; + +const readBodyObject = (body: unknown): Record => { + return body && typeof body === "object" && !Array.isArray(body) + ? (body as Record) + : {}; +}; + +const jsonError = (error: unknown) => { + if ( + error && + typeof error === "object" && + "statusCode" in error && + "body" in error + ) { + const autumnError = error as { + statusCode: number; + body: string; + message?: string; + }; + const body = (() => { + try { + return JSON.parse(autumnError.body); + } catch { + return { + message: autumnError.message ?? "Request failed", + code: "autumn_request_failed", + statusCode: autumnError.statusCode, + }; + } + })(); + + return { + status: autumnError.statusCode, + body, + }; + } + + return { + status: 500, + body: { + message: error instanceof Error ? error.message : "Request failed", + code: "autumn_request_failed", + statusCode: 500, + }, + }; +}; + +export const createAutumnBetterAuthPlugin = ({ + env, + autumnURL, +}: { + env: Env; + autumnURL?: string; +}) => ({ + id: "autumn", + endpoints: { + getOrCreateCustomer: createAuthEndpoint( + "/autumn/getOrCreateCustomer", + { method: "POST" }, + async (ctx) => { + const session = (await getSessionFromCtx( + ctx as Parameters[0], + )) as BetterAuthSession | null; + const organization = await getActiveOrganization(ctx, session); + const identity = resolveIdentity(session, organization); + const body = readBodyObject((ctx as { body?: unknown }).body); + + if (!identity?.customerId && body.errorOnNotFound === false) { + return ctx.json(null, { status: 204 }); + } + + if (!identity?.customerId) { + return ctx.json( + { + message: "customerId not found", + code: "no_customer_id", + statusCode: 401, + }, + { status: 401 }, + ); + } + + try { + const autumn = new Autumn({ + secretKey: env.AUTUMN_SECRET_KEY, + ...(autumnURL && { serverURL: autumnURL }), + }); + const expand = Array.isArray(body.expand) ? body.expand : []; + const customer = await autumn.customers.getOrCreate({ + ...body, + customerId: identity.customerId, + ...identity.customerData, + expand: [...expand, "balances.feature"], + }); + + return ctx.json(customer); + } catch (error) { + const result = jsonError(error); + return ctx.json(result.body, { status: result.status }); + } + }, + ), + }, +}); diff --git a/server/tests/unit/auth/auth-error-middleware.test.ts b/server/tests/unit/auth/auth-error-middleware.test.ts index f76e64a2d..87d5f3ecd 100644 --- a/server/tests/unit/auth/auth-error-middleware.test.ts +++ b/server/tests/unit/auth/auth-error-middleware.test.ts @@ -26,3 +26,54 @@ test("error middleware returns RecaseError status before request context exists" code: ErrCode.NoAuthHeader, }); }); + +test("error middleware maps Stripe-shaped errors to a 400", async () => { + const app = new Hono(); + const consoleErrors: unknown[][] = []; + const originalConsoleError = console.error; + console.error = (...args: unknown[]) => { + consoleErrors.push(args); + }; + + app.use("*", async (c, next) => { + c.set("ctx", { + env: "sandbox", + logger: { + error: () => {}, + warn: () => {}, + }, + } as never); + await next(); + }); + + app.post("/v1/rewards", () => { + const error = new Error("No such product: prod_missing") as Error & { + type: string; + statusCode: number; + code: string; + }; + error.type = "StripeInvalidRequestError"; + error.statusCode = 400; + error.code = "resource_missing"; + throw error; + }); + app.onError(errorMiddleware); + + try { + const response = await app.fetch( + new Request("https://autumn-api.bowong.cc/v1/rewards", { + method: "POST", + }), + ); + + expect(response.status).toBe(400); + await expect(response.json()).resolves.toMatchObject({ + message: "(Stripe Error) No such product: prod_missing", + code: ErrCode.StripeError, + env: "sandbox", + }); + expect(consoleErrors).toEqual([]); + } finally { + console.error = originalConsoleError; + } +}); diff --git a/server/tests/unit/auth/autumn-auth-route-alias.test.ts b/server/tests/unit/auth/autumn-auth-route-alias.test.ts new file mode 100644 index 000000000..3eb94b3ea --- /dev/null +++ b/server/tests/unit/auth/autumn-auth-route-alias.test.ts @@ -0,0 +1,31 @@ +import { expect, test } from "bun:test"; +import { rewriteAutumnAuthRequest } from "@/initHono.js"; + +test("legacy Autumn SDK route rewrites to the better-auth Autumn endpoint", async () => { + const request = new Request( + "https://autumn-api.bowong.cc/api/autumn/getOrCreateCustomer?expand=balances", + { + method: "POST", + headers: { + Cookie: "__Secure-better-auth.session_token=session-token", + Origin: "http://192.168.0.15:3000", + "Content-Type": "application/json", + }, + body: JSON.stringify({ errorOnNotFound: false }), + }, + ); + + const rewritten = rewriteAutumnAuthRequest(request); + const rewrittenUrl = new URL(rewritten.url); + + expect(rewrittenUrl.pathname).toBe( + "/api/auth/autumn/getOrCreateCustomer", + ); + expect(rewrittenUrl.search).toBe("?expand=balances"); + expect(rewritten.method).toBe("POST"); + expect(rewritten.headers.get("cookie")).toContain( + "__Secure-better-auth.session_token=session-token", + ); + const body = (await rewritten.json()) as { errorOnNotFound: boolean }; + expect(body).toMatchObject({ errorOnNotFound: false }); +}); diff --git a/server/tests/unit/auth/email-password-auth-config.test.ts b/server/tests/unit/auth/email-password-auth-config.test.ts index a5dc3217a..24084d8c7 100644 --- a/server/tests/unit/auth/email-password-auth-config.test.ts +++ b/server/tests/unit/auth/email-password-auth-config.test.ts @@ -3,6 +3,7 @@ import { createEmailOtpOptions, createEmailVerificationOptions, createJwtOptions, + getAutumnBetterAuthApiUrl, getAuthCookieAdvancedOptions, getAuthTrustedOrigins, } from "@/utils/auth.js"; @@ -76,6 +77,17 @@ test("production Worker auth cookies are cross-site secure even when base URL en }); }); +test("production Worker Autumn better-auth API URL falls back from stale localhost config", () => { + expect( + getAutumnBetterAuthApiUrl({ + NODE_ENV: "production", + WORKER: "true", + BETTER_AUTH_URL: "http://localhost:8080", + SERVER_URL: "http://localhost:8080", + } as unknown as Env), + ).toBe("https://autumn-api.bowong.cc"); +}); + test("session responses do not mint unused JWT headers", () => { expect(createJwtOptions()).toEqual({ disableSettingJwtHeader: true, diff --git a/server/tests/unit/cloudflare/auth-startup-imports.test.ts b/server/tests/unit/cloudflare/auth-startup-imports.test.ts new file mode 100644 index 000000000..47c871d3c --- /dev/null +++ b/server/tests/unit/cloudflare/auth-startup-imports.test.ts @@ -0,0 +1,8 @@ +import { readFileSync } from "node:fs"; +import { expect, test } from "bun:test"; + +test("auth setup does not import the generated Autumn better-auth plugin at startup", () => { + const source = readFileSync("src/utils/auth.ts", "utf8"); + + expect(source).not.toContain("autumn-js/better-auth"); +}); diff --git a/server/tests/unit/router/mounted-route-prefix.test.ts b/server/tests/unit/router/mounted-route-prefix.test.ts new file mode 100644 index 000000000..963095219 --- /dev/null +++ b/server/tests/unit/router/mounted-route-prefix.test.ts @@ -0,0 +1,74 @@ +import { expect, test } from "bun:test"; +import { + createHonoApp, + isPublicDevRoute, + rewriteMountedRequestPath, +} from "@/initHono.js"; + +const createExecutionContext = (): ExecutionContext => + ({ + waitUntil: () => undefined, + passThroughOnException: () => undefined, + props: {}, + }) as unknown as ExecutionContext; + +test("mounted API router requests strip the /v1 prefix before reaching apiRouter", async () => { + const request = new Request( + "https://autumn-api.bowong.cc/v1/organization/flags?env=sandbox", + { + method: "GET", + headers: { + Accept: "application/json", + }, + }, + ); + + const rewritten = rewriteMountedRequestPath(request, "/v1"); + const rewrittenUrl = new URL(rewritten.url); + + expect(rewrittenUrl.pathname).toBe("/organization/flags"); + expect(rewrittenUrl.search).toBe("?env=sandbox"); + expect(rewritten.method).toBe("GET"); + expect(rewritten.headers.get("accept")).toBe("application/json"); +}); + +test("mounted API router root requests rewrite to /", () => { + const request = new Request("https://autumn-api.bowong.cc/v1"); + + const rewritten = rewriteMountedRequestPath(request, "/v1"); + + expect(new URL(rewritten.url).pathname).toBe("/"); +}); + +test("only unauthenticated dev routes stay on the public router", () => { + expect(isPublicDevRoute("GET", "/dev/otp/123456")).toBe(true); + expect(isPublicDevRoute("POST", "/dev/cli/stripe")).toBe(true); + + expect(isPublicDevRoute("GET", "/dev/data")).toBe(false); + expect(isPublicDevRoute("POST", "/dev/otp")).toBe(false); + expect(isPublicDevRoute("POST", "/dev/api_key")).toBe(false); +}); + +test("mounted internal router errors use the app error middleware", async () => { + const env = { + AWS_REGION: "test", + BETTER_AUTH_SECRET: "test-secret", + BETTER_AUTH_URL: "https://autumn-api.bowong.cc", + CLIENT_URL: "https://app.bowong.cc", + DATABASE_URL: "postgres://autumn:autumn@127.0.0.1:5432/autumn", + NODE_ENV: "test", + } as Env; + const app = createHonoApp(env); + + const response = await app.fetch( + new Request("https://autumn-api.bowong.cc/query/event_names/list"), + env, + createExecutionContext(), + ); + + expect(response.status).toBe(401); + await expect(response.json()).resolves.toMatchObject({ + message: "Unauthorized - no session found", + code: "no_auth_header", + }); +}); diff --git a/server/tests/unit/tinybird/initTinybird-config.test.ts b/server/tests/unit/tinybird/initTinybird-config.test.ts index 95f309709..75f27afc1 100644 --- a/server/tests/unit/tinybird/initTinybird-config.test.ts +++ b/server/tests/unit/tinybird/initTinybird-config.test.ts @@ -1,6 +1,9 @@ import { expect, test } from "bun:test"; import { getTinybirdPipes } from "@/external/tinybird/initTinybird.js"; -import { initTinybirdConfig } from "@/external/tinybird/tinybirdUtils.js"; +import { + initTinybirdConfig, + tinybirdConfig, +} from "@/external/tinybird/tinybirdUtils.js"; test("Tinybird pipes initialize after Worker env config arrives", () => { initTinybirdConfig({ @@ -10,3 +13,17 @@ test("Tinybird pipes initialize after Worker env config arrives", () => { expect(() => getTinybirdPipes()).not.toThrow(); }); + +test("Tinybird config prefers the new us-east workspace when both envs exist", () => { + initTinybirdConfig({ + TINYBIRD_API_URL: "https://api.tinybird.co", + TINYBIRD_TOKEN: "legacy-token", + TINYBIRD_US_EAST_API_URL: "https://api.us-east.aws.tinybird.co", + TINYBIRD_US_EAST_TOKEN: "new-token", + } as Env); + + expect(tinybirdConfig).toEqual({ + baseUrl: "https://api.us-east.aws.tinybird.co", + token: "new-token", + }); +}); diff --git a/server/tsconfig.json b/server/tsconfig.json index ea76062b2..141d7f400 100644 --- a/server/tsconfig.json +++ b/server/tsconfig.json @@ -50,6 +50,9 @@ "autumn-js": [ "../packages/autumn-js/src/sdk/index.ts" ], + "autumn-js/better-auth": [ + "../packages/autumn-js/src/better-auth/index.ts" + ], "autumn-js/backend/hono": [ "../packages/autumn-js/src/backend/adapters/hono.ts" ], diff --git a/server/worker-startup.cpuprofile b/server/worker-startup.cpuprofile index 85ec45eda..439b52eab 100644 --- a/server/worker-startup.cpuprofile +++ b/server/worker-startup.cpuprofile @@ -1 +1 @@ -{"nodes":[{"id":1,"callFrame":{"functionName":"(root)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[2,3,4,6,7,462],"positionTicks":[]},{"id":462,"callFrame":{"functionName":"fetch","scriptId":"3","url":"Volumes/sker/autumn/server/47b31cce-02ab-4395-b795-f1c90c76f679","lineNumber":5,"columnNumber":17},"hitCount":0,"children":[463],"positionTicks":[]},{"id":463,"callFrame":{"functionName":"Response","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":8,"ticks":1}]},{"id":7,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":-1,"columnNumber":-1},"hitCount":96,"children":[8,11,13,21,28,29,37,44,55,68,72,73,86,97,107,115,123,126,132,141,152,162,174,193,194,215,242,244,246,249,256,265,274,283,299,314,322,343,355,363,388,391,392,393,395,397,399,402,410,411,425,426,444,447,450,454,458],"positionTicks":[]},{"id":458,"callFrame":{"functionName":"queryInteger","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":74983,"columnNumber":21},"hitCount":0,"children":[459],"positionTicks":[]},{"id":459,"callFrame":{"functionName":"preprocess","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73536,"columnNumber":19},"hitCount":0,"children":[460],"positionTicks":[]},{"id":460,"callFrame":{"functionName":"transform","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73292,"columnNumber":18},"hitCount":0,"children":[461],"positionTicks":[]},{"id":461,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":62576,"ticks":1}]},{"id":454,"callFrame":{"functionName":"route","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":230994,"columnNumber":7},"hitCount":0,"children":[455],"positionTicks":[]},{"id":455,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":230996,"columnNumber":19},"hitCount":0,"children":[456],"positionTicks":[]},{"id":456,"callFrame":{"functionName":"#addRoute","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231142,"columnNumber":11},"hitCount":0,"children":[457],"positionTicks":[]},{"id":457,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":120595,"columnNumber":39},"hitCount":0,"children":[],"positionTicks":[]},{"id":450,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":230924,"columnNumber":21},"hitCount":0,"children":[451],"positionTicks":[]},{"id":451,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":230930,"columnNumber":21},"hitCount":0,"children":[452],"positionTicks":[]},{"id":452,"callFrame":{"functionName":"#addRoute","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231142,"columnNumber":11},"hitCount":0,"children":[453],"positionTicks":[]},{"id":453,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231650,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":447,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":335645,"columnNumber":2},"hitCount":0,"children":[448],"positionTicks":[]},{"id":448,"callFrame":{"functionName":"extractRelationMetadata","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":335592,"columnNumber":32},"hitCount":0,"children":[449],"positionTicks":[]},{"id":449,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":444,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":312514,"columnNumber":2},"hitCount":0,"children":[445],"positionTicks":[]},{"id":445,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[446],"positionTicks":[]},{"id":446,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":426,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274420,"columnNumber":18},"hitCount":0,"children":[427],"positionTicks":[]},{"id":427,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274270,"columnNumber":18},"hitCount":0,"children":[428],"positionTicks":[]},{"id":428,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274276,"columnNumber":14},"hitCount":1,"children":[],"positionTicks":[{"line":274305,"ticks":1}]},{"id":425,"callFrame":{"functionName":"__decorate","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274449,"columnNumber":19},"hitCount":1,"children":[429],"positionTicks":[{"line":274452,"ticks":1}]},{"id":429,"callFrame":{"functionName":"decorate","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":47355,"columnNumber":25},"hitCount":0,"children":[430],"positionTicks":[]},{"id":430,"callFrame":{"functionName":"DecorateConstructor","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":47474,"columnNumber":36},"hitCount":0,"children":[431],"positionTicks":[]},{"id":431,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":279476,"columnNumber":17},"hitCount":0,"children":[432],"positionTicks":[]},{"id":432,"callFrame":{"functionName":"getParamInfo","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":278843,"columnNumber":21},"hitCount":0,"children":[433],"positionTicks":[]},{"id":433,"callFrame":{"functionName":"getOwnMetadata","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":47426,"columnNumber":31},"hitCount":1,"children":[],"positionTicks":[{"line":47432,"ticks":1}]},{"id":411,"callFrame":{"functionName":"url2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144753,"columnNumber":13},"hitCount":0,"children":[412],"positionTicks":[]},{"id":412,"callFrame":{"functionName":"_url2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142091,"columnNumber":14},"hitCount":0,"children":[413],"positionTicks":[]},{"id":413,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[414],"positionTicks":[]},{"id":414,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[415],"positionTicks":[]},{"id":415,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144749,"columnNumber":54},"hitCount":0,"children":[416],"positionTicks":[]},{"id":416,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[417],"positionTicks":[]},{"id":417,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133935,"columnNumber":56},"hitCount":0,"children":[418],"positionTicks":[]},{"id":418,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[419],"positionTicks":[]},{"id":419,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133903,"columnNumber":74},"hitCount":0,"children":[420],"positionTicks":[]},{"id":420,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[421],"positionTicks":[]},{"id":421,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133883,"columnNumber":62},"hitCount":0,"children":[422,424],"positionTicks":[]},{"id":424,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133139,"columnNumber":37},"hitCount":0,"children":[],"positionTicks":[]},{"id":422,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[423],"positionTicks":[]},{"id":423,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":410,"callFrame":{"functionName":"defineErrorCodes","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":35,"columnNumber":25},"hitCount":1,"children":[],"positionTicks":[{"line":37,"ticks":1}]},{"id":402,"callFrame":{"functionName":"xor2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145256,"columnNumber":13},"hitCount":0,"children":[403],"positionTicks":[]},{"id":403,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[404],"positionTicks":[]},{"id":404,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[405],"positionTicks":[]},{"id":405,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145250,"columnNumber":53},"hitCount":0,"children":[406],"positionTicks":[]},{"id":406,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[407],"positionTicks":[]},{"id":407,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145236,"columnNumber":58},"hitCount":0,"children":[408],"positionTicks":[]},{"id":408,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[409],"positionTicks":[]},{"id":409,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134727,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":399,"callFrame":{"functionName":"nonempty","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144648,"columnNumber":12},"hitCount":0,"children":[400],"positionTicks":[]},{"id":400,"callFrame":{"functionName":"_minLength2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142644,"columnNumber":20},"hitCount":0,"children":[401],"positionTicks":[]},{"id":401,"callFrame":{"functionName":"normalizeParams2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132368,"columnNumber":25},"hitCount":0,"children":[],"positionTicks":[]},{"id":397,"callFrame":{"functionName":"number5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144976,"columnNumber":16},"hitCount":0,"children":[398],"positionTicks":[]},{"id":398,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142329,"columnNumber":17},"hitCount":0,"children":[],"positionTicks":[]},{"id":395,"callFrame":{"functionName":"any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145083,"columnNumber":13},"hitCount":0,"children":[396],"positionTicks":[]},{"id":396,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142483,"columnNumber":14},"hitCount":0,"children":[],"positionTicks":[]},{"id":393,"callFrame":{"functionName":"meta","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144593,"columnNumber":8},"hitCount":0,"children":[394],"positionTicks":[]},{"id":394,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144527,"columnNumber":9},"hitCount":1,"children":[],"positionTicks":[{"line":144529,"ticks":1}]},{"id":392,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":391,"callFrame":{"functionName":"u2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":118013,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":118026,"ticks":1}]},{"id":388,"callFrame":{"functionName":"boolean11","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182540,"columnNumber":18},"hitCount":0,"children":[389],"positionTicks":[]},{"id":389,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181559,"columnNumber":19},"hitCount":0,"children":[390],"positionTicks":[]},{"id":390,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":131980,"ticks":1}]},{"id":363,"callFrame":{"functionName":"nullable3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181583,"columnNumber":18},"hitCount":0,"children":[364],"positionTicks":[]},{"id":364,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[365],"positionTicks":[]},{"id":365,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[366],"positionTicks":[]},{"id":366,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181578,"columnNumber":71},"hitCount":0,"children":[367],"positionTicks":[]},{"id":367,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[368],"positionTicks":[]},{"id":368,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135445,"columnNumber":66},"hitCount":0,"children":[369],"positionTicks":[]},{"id":369,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":355,"callFrame":{"functionName":"string9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182530,"columnNumber":16},"hitCount":0,"children":[356,371,379],"positionTicks":[]},{"id":379,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181610,"columnNumber":14},"hitCount":0,"children":[380],"positionTicks":[]},{"id":380,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[381],"positionTicks":[]},{"id":381,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[382],"positionTicks":[]},{"id":382,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181605,"columnNumber":63},"hitCount":0,"children":[383],"positionTicks":[]},{"id":383,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[384],"positionTicks":[]},{"id":384,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135602,"columnNumber":58},"hitCount":0,"children":[385],"positionTicks":[]},{"id":385,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[386],"positionTicks":[]},{"id":386,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":0,"children":[387],"positionTicks":[]},{"id":387,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":371,"callFrame":{"functionName":"any3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181441,"columnNumber":13},"hitCount":0,"children":[372],"positionTicks":[]},{"id":372,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142483,"columnNumber":14},"hitCount":1,"children":[],"positionTicks":[{"line":142485,"ticks":1}]},{"id":356,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182609,"columnNumber":30},"hitCount":0,"children":[357],"positionTicks":[]},{"id":357,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181559,"columnNumber":19},"hitCount":0,"children":[358],"positionTicks":[]},{"id":358,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[359],"positionTicks":[]},{"id":359,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[360],"positionTicks":[]},{"id":360,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181554,"columnNumber":73},"hitCount":0,"children":[361],"positionTicks":[]},{"id":361,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[362],"positionTicks":[]},{"id":362,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181348,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181356,"ticks":1}]},{"id":343,"callFrame":{"functionName":"nullable4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182600,"columnNumber":18},"hitCount":0,"children":[344,373],"positionTicks":[]},{"id":373,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181559,"columnNumber":19},"hitCount":0,"children":[374],"positionTicks":[]},{"id":374,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[375],"positionTicks":[]},{"id":375,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[376],"positionTicks":[]},{"id":376,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181554,"columnNumber":73},"hitCount":0,"children":[377],"positionTicks":[]},{"id":377,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[378],"positionTicks":[]},{"id":378,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135381,"columnNumber":68},"hitCount":1,"children":[],"positionTicks":[{"line":135385,"ticks":1}]},{"id":344,"callFrame":{"functionName":"_undefined7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181423,"columnNumber":20},"hitCount":0,"children":[345],"positionTicks":[]},{"id":345,"callFrame":{"functionName":"_undefined5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142467,"columnNumber":20},"hitCount":0,"children":[346],"positionTicks":[]},{"id":346,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[347],"positionTicks":[]},{"id":347,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[348],"positionTicks":[]},{"id":348,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181418,"columnNumber":73},"hitCount":0,"children":[349],"positionTicks":[]},{"id":349,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[350],"positionTicks":[]},{"id":350,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181348,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181377,"ticks":1}]},{"id":322,"callFrame":{"functionName":"object3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181477,"columnNumber":16},"hitCount":0,"children":[323],"positionTicks":[]},{"id":323,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[324],"positionTicks":[]},{"id":324,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":1,"children":[325],"positionTicks":[{"line":131958,"ticks":1}]},{"id":325,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181471,"columnNumber":67},"hitCount":0,"children":[326],"positionTicks":[]},{"id":326,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[327],"positionTicks":[]},{"id":327,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134515,"columnNumber":62},"hitCount":0,"children":[328],"positionTicks":[]},{"id":328,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":131960,"ticks":1}]},{"id":314,"callFrame":{"functionName":"_enum5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181532,"columnNumber":15},"hitCount":0,"children":[315],"positionTicks":[]},{"id":315,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[316],"positionTicks":[]},{"id":316,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[317],"positionTicks":[]},{"id":317,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181526,"columnNumber":63},"hitCount":0,"children":[318],"positionTicks":[]},{"id":318,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[319],"positionTicks":[]},{"id":319,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135324,"columnNumber":58},"hitCount":0,"children":[320],"positionTicks":[]},{"id":320,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135329,"columnNumber":99},"hitCount":0,"children":[321],"positionTicks":[]},{"id":321,"callFrame":{"functionName":"escapeRegex2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132357,"columnNumber":21},"hitCount":1,"children":[],"positionTicks":[{"line":132359,"ticks":1}]},{"id":299,"callFrame":{"functionName":"inboundSchema","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182840,"columnNumber":22},"hitCount":0,"children":[300],"positionTicks":[]},{"id":300,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182843,"columnNumber":19},"hitCount":0,"children":[301],"positionTicks":[]},{"id":301,"callFrame":{"functionName":"literal3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181546,"columnNumber":17},"hitCount":0,"children":[302],"positionTicks":[]},{"id":302,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[303],"positionTicks":[]},{"id":303,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[304],"positionTicks":[]},{"id":304,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181541,"columnNumber":69},"hitCount":0,"children":[305],"positionTicks":[]},{"id":305,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[306],"positionTicks":[]},{"id":306,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135344,"columnNumber":64},"hitCount":1,"children":[],"positionTicks":[{"line":135346,"ticks":1}]},{"id":283,"callFrame":{"functionName":"number9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182563,"columnNumber":16},"hitCount":0,"children":[284,329,336],"positionTicks":[]},{"id":336,"callFrame":{"functionName":"union4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181496,"columnNumber":15},"hitCount":0,"children":[337],"positionTicks":[]},{"id":337,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[338],"positionTicks":[]},{"id":338,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[339],"positionTicks":[]},{"id":339,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181491,"columnNumber":65},"hitCount":0,"children":[340],"positionTicks":[]},{"id":340,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[341],"positionTicks":[]},{"id":341,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134727,"columnNumber":60},"hitCount":0,"children":[342],"positionTicks":[]},{"id":342,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":329,"callFrame":{"functionName":"number7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181392,"columnNumber":16},"hitCount":0,"children":[330],"positionTicks":[]},{"id":330,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142329,"columnNumber":17},"hitCount":0,"children":[331,335],"positionTicks":[]},{"id":335,"callFrame":{"functionName":"normalizeParams2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132368,"columnNumber":25},"hitCount":1,"children":[],"positionTicks":[{"line":132372,"ticks":1}]},{"id":331,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[332],"positionTicks":[]},{"id":332,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[333],"positionTicks":[]},{"id":333,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181387,"columnNumber":67},"hitCount":0,"children":[334],"positionTicks":[]},{"id":334,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":1,"children":[351],"positionTicks":[{"line":131958,"ticks":1}]},{"id":351,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134211,"columnNumber":62},"hitCount":0,"children":[352],"positionTicks":[]},{"id":352,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[353],"positionTicks":[]},{"id":353,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":0,"children":[354],"positionTicks":[]},{"id":354,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":284,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181559,"columnNumber":19},"hitCount":0,"children":[285],"positionTicks":[]},{"id":285,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[286],"positionTicks":[]},{"id":286,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[287],"positionTicks":[]},{"id":287,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181554,"columnNumber":73},"hitCount":0,"children":[288],"positionTicks":[]},{"id":288,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":1,"children":[289],"positionTicks":[{"line":131960,"ticks":1}]},{"id":289,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135381,"columnNumber":68},"hitCount":0,"children":[290],"positionTicks":[]},{"id":290,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[291],"positionTicks":[]},{"id":291,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":0,"children":[292],"positionTicks":[]},{"id":292,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":274,"callFrame":{"functionName":"optional4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182592,"columnNumber":18},"hitCount":0,"children":[275,293,307],"positionTicks":[]},{"id":307,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181559,"columnNumber":19},"hitCount":0,"children":[308],"positionTicks":[]},{"id":308,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[309],"positionTicks":[]},{"id":309,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[310],"positionTicks":[]},{"id":310,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181554,"columnNumber":73},"hitCount":0,"children":[311],"positionTicks":[]},{"id":311,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[312],"positionTicks":[]},{"id":312,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135381,"columnNumber":68},"hitCount":0,"children":[313],"positionTicks":[]},{"id":313,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":131960,"ticks":1}]},{"id":293,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181610,"columnNumber":14},"hitCount":0,"children":[294],"positionTicks":[]},{"id":294,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[295],"positionTicks":[]},{"id":295,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[296],"positionTicks":[]},{"id":296,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181605,"columnNumber":63},"hitCount":0,"children":[297],"positionTicks":[]},{"id":297,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[298],"positionTicks":[]},{"id":298,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181348,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181356,"ticks":1}]},{"id":275,"callFrame":{"functionName":"optional3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181571,"columnNumber":18},"hitCount":0,"children":[276],"positionTicks":[]},{"id":276,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[277],"positionTicks":[]},{"id":277,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[278],"positionTicks":[]},{"id":278,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181566,"columnNumber":71},"hitCount":0,"children":[279],"positionTicks":[]},{"id":279,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[280],"positionTicks":[]},{"id":280,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135412,"columnNumber":66},"hitCount":0,"children":[281],"positionTicks":[]},{"id":281,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[282],"positionTicks":[]},{"id":282,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":133780,"ticks":1}]},{"id":265,"callFrame":{"functionName":"smartUnion","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182675,"columnNumber":19},"hitCount":0,"children":[266],"positionTicks":[]},{"id":266,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181610,"columnNumber":14},"hitCount":0,"children":[267],"positionTicks":[]},{"id":267,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[268],"positionTicks":[]},{"id":268,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[269],"positionTicks":[]},{"id":269,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181605,"columnNumber":63},"hitCount":0,"children":[270],"positionTicks":[]},{"id":270,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[271],"positionTicks":[]},{"id":271,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135602,"columnNumber":58},"hitCount":0,"children":[272,370],"positionTicks":[]},{"id":370,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":272,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[273],"positionTicks":[]},{"id":273,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":256,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181383,"columnNumber":16},"hitCount":0,"children":[257],"positionTicks":[]},{"id":257,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142005,"columnNumber":17},"hitCount":0,"children":[258],"positionTicks":[]},{"id":258,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[259],"positionTicks":[]},{"id":259,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[260],"positionTicks":[]},{"id":260,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181378,"columnNumber":67},"hitCount":0,"children":[261],"positionTicks":[]},{"id":261,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[262],"positionTicks":[]},{"id":262,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133883,"columnNumber":62},"hitCount":0,"children":[263],"positionTicks":[]},{"id":263,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[264],"positionTicks":[]},{"id":264,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":133779,"ticks":1}]},{"id":249,"callFrame":{"functionName":"ZodObject2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":101344,"columnNumber":20},"hitCount":0,"children":[250],"positionTicks":[]},{"id":250,"callFrame":{"functionName":"_ZodObject","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":101034,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":101036,"ticks":1}]},{"id":246,"callFrame":{"functionName":"ZodString2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":100180,"columnNumber":20},"hitCount":0,"children":[247],"positionTicks":[]},{"id":247,"callFrame":{"functionName":"_ZodString3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":99639,"columnNumber":17},"hitCount":0,"children":[248],"positionTicks":[]},{"id":248,"callFrame":{"functionName":"ZodType2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":99446,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":99452,"ticks":1}]},{"id":244,"callFrame":{"functionName":"create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":101553,"columnNumber":15},"hitCount":0,"children":[245],"positionTicks":[]},{"id":245,"callFrame":{"functionName":"get shape","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":101134,"columnNumber":11},"hitCount":1,"children":[],"positionTicks":[{"line":101136,"ticks":1}]},{"id":242,"callFrame":{"functionName":"ZodUnknown2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":100849,"columnNumber":21},"hitCount":0,"children":[243],"positionTicks":[]},{"id":243,"callFrame":{"functionName":"ZodUnknown2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":100841,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":100844,"ticks":1}]},{"id":215,"callFrame":{"functionName":"string5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144705,"columnNumber":16},"hitCount":0,"children":[216],"positionTicks":[]},{"id":216,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142005,"columnNumber":17},"hitCount":0,"children":[217],"positionTicks":[]},{"id":217,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[218],"positionTicks":[]},{"id":218,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[219],"positionTicks":[]},{"id":219,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144674,"columnNumber":60},"hitCount":1,"children":[220],"positionTicks":[{"line":144692,"ticks":1}]},{"id":220,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[221],"positionTicks":[]},{"id":221,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133883,"columnNumber":62},"hitCount":1,"children":[],"positionTicks":[{"line":133886,"ticks":1}]},{"id":194,"callFrame":{"functionName":"extend","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145186,"columnNumber":10},"hitCount":0,"children":[195],"positionTicks":[]},{"id":195,"callFrame":{"functionName":"extend2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132496,"columnNumber":16},"hitCount":0,"children":[196],"positionTicks":[]},{"id":196,"callFrame":{"functionName":"clone3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132361,"columnNumber":15},"hitCount":0,"children":[197],"positionTicks":[]},{"id":197,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131975,"columnNumber":13},"hitCount":0,"children":[198],"positionTicks":[]},{"id":198,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[199],"positionTicks":[]},{"id":199,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145160,"columnNumber":60},"hitCount":0,"children":[200],"positionTicks":[]},{"id":200,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[201],"positionTicks":[]},{"id":201,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134579,"columnNumber":67},"hitCount":0,"children":[202],"positionTicks":[]},{"id":202,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[203],"positionTicks":[]},{"id":203,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134515,"columnNumber":62},"hitCount":0,"children":[204],"positionTicks":[]},{"id":204,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131942,"columnNumber":16},"hitCount":0,"children":[205],"positionTicks":[]},{"id":205,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133772,"columnNumber":58},"hitCount":0,"children":[206],"positionTicks":[]},{"id":206,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132160,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132163,"ticks":1}]},{"id":193,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[207,222],"positionTicks":[{"line":9,"ticks":1}]},{"id":222,"callFrame":{"functionName":"../node_modules/.bun/@better-auth+kysely-adapter@1.6.5+04a7fca1abceb4e4/node_modules/@better-auth/kysely-adapter/dist/index.mjs","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":38050,"columnNumber":131},"hitCount":0,"children":[223],"positionTicks":[]},{"id":223,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[224],"positionTicks":[]},{"id":224,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":37270,"columnNumber":77},"hitCount":0,"children":[225],"positionTicks":[]},{"id":225,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[226],"positionTicks":[]},{"id":226,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/kysely.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":32878,"columnNumber":78},"hitCount":0,"children":[227],"positionTicks":[]},{"id":227,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[228],"positionTicks":[]},{"id":228,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/schema/schema.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":32023,"columnNumber":85},"hitCount":0,"children":[229],"positionTicks":[]},{"id":229,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[230],"positionTicks":[{"line":9,"ticks":1}]},{"id":230,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/table-parser.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":28741,"columnNumber":91},"hitCount":0,"children":[231],"positionTicks":[]},{"id":231,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[232],"positionTicks":[]},{"id":232,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/expression-parser.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":28640,"columnNumber":96},"hitCount":0,"children":[233],"positionTicks":[]},{"id":233,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[234],"positionTicks":[]},{"id":234,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/expression/expression-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":28589,"columnNumber":101},"hitCount":0,"children":[235],"positionTicks":[]},{"id":235,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[236],"positionTicks":[]},{"id":236,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/query-builder/select-query-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":27191,"columnNumber":106},"hitCount":0,"children":[237],"positionTicks":[]},{"id":237,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[238],"positionTicks":[]},{"id":238,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/join-parser.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":26892,"columnNumber":90},"hitCount":0,"children":[239],"positionTicks":[]},{"id":239,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[240],"positionTicks":[]},{"id":240,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/parse-utils.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":26856,"columnNumber":90},"hitCount":0,"children":[241],"positionTicks":[]},{"id":241,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[],"positionTicks":[{"line":9,"ticks":1}]},{"id":207,"callFrame":{"functionName":"../node_modules/.bun/@better-auth+core@1.6.5+c637e6fd07c35fe7/node_modules/@better-auth/core/dist/instrumentation/attributes.mjs","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17438,"columnNumber":132},"hitCount":0,"children":[208],"positionTicks":[]},{"id":208,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[209],"positionTicks":[]},{"id":209,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17408,"columnNumber":135},"hitCount":0,"children":[210],"positionTicks":[]},{"id":210,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[211,214],"positionTicks":[]},{"id":214,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/stable_attributes.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17179,"columnNumber":147},"hitCount":1,"children":[],"positionTicks":[{"line":17297,"ticks":1}]},{"id":211,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/trace/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":16707,"columnNumber":141},"hitCount":0,"children":[212],"positionTicks":[]},{"id":212,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[213],"positionTicks":[]},{"id":213,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/trace/SemanticAttributes.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":15887,"columnNumber":154},"hitCount":1,"children":[],"positionTicks":[{"line":16074,"ticks":1}]},{"id":174,"callFrame":{"functionName":"createStripe","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":117529,"columnNumber":21},"hitCount":0,"children":[175],"positionTicks":[]},{"id":175,"callFrame":{"functionName":"determineProcessUserAgentProperties","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":111787,"columnNumber":44},"hitCount":1,"children":[176],"positionTicks":[{"line":111789,"ticks":1}]},{"id":176,"callFrame":{"functionName":"get process","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[177],"positionTicks":[]},{"id":177,"callFrame":{"functionName":"","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[178],"positionTicks":[]},{"id":178,"callFrame":{"functionName":"","scriptId":"36","url":"node-internal:internal_process","lineNumber":14,"columnNumber":19},"hitCount":1,"children":[],"positionTicks":[{"line":17,"ticks":1}]},{"id":162,"callFrame":{"functionName":"genTtable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":110490,"columnNumber":18},"hitCount":1,"children":[],"positionTicks":[{"line":110502,"ticks":1}]},{"id":152,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[153,161,163,179,251,434],"positionTicks":[]},{"id":434,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client@1.20.0/node_modules/@clickhouse/client/dist/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52869,"columnNumber":96},"hitCount":0,"children":[435],"positionTicks":[]},{"id":435,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[436],"positionTicks":[]},{"id":436,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client@1.20.0/node_modules/@clickhouse/client/dist/client.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52840,"columnNumber":97},"hitCount":0,"children":[437],"positionTicks":[]},{"id":437,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[438],"positionTicks":[]},{"id":438,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client-common@1.20.0/node_modules/@clickhouse/client-common/dist/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":50641,"columnNumber":110},"hitCount":0,"children":[439],"positionTicks":[]},{"id":439,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[440],"positionTicks":[]},{"id":440,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client-common@1.20.0/node_modules/@clickhouse/client-common/dist/client.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":49820,"columnNumber":111},"hitCount":0,"children":[441],"positionTicks":[]},{"id":441,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[442],"positionTicks":[]},{"id":442,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client-common@1.20.0/node_modules/@clickhouse/client-common/dist/parse/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":49347,"columnNumber":116},"hitCount":0,"children":[443],"positionTicks":[]},{"id":443,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":251,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":44463,"columnNumber":100},"hitCount":0,"children":[252],"positionTicks":[]},{"id":252,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[253],"positionTicks":[]},{"id":253,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/trace-api.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":44452,"columnNumber":104},"hitCount":0,"children":[254],"positionTicks":[]},{"id":254,"callFrame":{"functionName":"getInstance","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":44410,"columnNumber":24},"hitCount":0,"children":[255],"positionTicks":[]},{"id":255,"callFrame":{"functionName":"_TraceAPI","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":44398,"columnNumber":17},"hitCount":1,"children":[],"positionTicks":[{"line":44400,"ticks":1}]},{"id":179,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":15074,"columnNumber":68},"hitCount":0,"children":[180],"positionTicks":[]},{"id":180,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[181,187],"positionTicks":[]},{"id":187,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/webhook.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":14683,"columnNumber":70},"hitCount":0,"children":[188],"positionTicks":[]},{"id":188,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[189],"positionTicks":[]},{"id":189,"callFrame":{"functionName":"../node_modules/.bun/standardwebhooks@1.0.0/node_modules/standardwebhooks/dist/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":14567,"columnNumber":91},"hitCount":0,"children":[190],"positionTicks":[]},{"id":190,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[191],"positionTicks":[]},{"id":191,"callFrame":{"functionName":"../node_modules/.bun/fast-sha256@1.3.0/node_modules/fast-sha256/sha256.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":14135,"columnNumber":77},"hitCount":0,"children":[192],"positionTicks":[]},{"id":192,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":14136,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":14138,"ticks":1}]},{"id":181,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/ingest.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":9817,"columnNumber":73},"hitCount":0,"children":[182],"positionTicks":[]},{"id":182,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[183],"positionTicks":[]},{"id":183,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/ingestSource.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":9714,"columnNumber":79},"hitCount":0,"children":[184],"positionTicks":[]},{"id":184,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[185],"positionTicks":[]},{"id":185,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/models/ingestSourceIn.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":8720,"columnNumber":84},"hitCount":0,"children":[186],"positionTicks":[]},{"id":186,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":163,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":4900,"columnNumber":63},"hitCount":0,"children":[164],"positionTicks":[]},{"id":164,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[165],"positionTicks":[]},{"id":165,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/stringify.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":4294,"columnNumber":67},"hitCount":0,"children":[166],"positionTicks":[]},{"id":166,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[167],"positionTicks":[]},{"id":167,"callFrame":{"functionName":"../node_modules/.bun/side-channel@1.1.1/node_modules/side-channel/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3964,"columnNumber":78},"hitCount":0,"children":[168],"positionTicks":[]},{"id":168,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[169],"positionTicks":[]},{"id":169,"callFrame":{"functionName":"../node_modules/.bun/side-channel-map@1.0.1/node_modules/side-channel-map/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3835,"columnNumber":86},"hitCount":0,"children":[170],"positionTicks":[]},{"id":170,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[171],"positionTicks":[]},{"id":171,"callFrame":{"functionName":"../node_modules/.bun/call-bound@1.0.4/node_modules/call-bound/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3812,"columnNumber":74},"hitCount":0,"children":[172],"positionTicks":[]},{"id":172,"callFrame":{"functionName":"GetIntrinsic","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3746,"columnNumber":65},"hitCount":0,"children":[173],"positionTicks":[]},{"id":173,"callFrame":{"functionName":"stringToPath2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3709,"columnNumber":68},"hitCount":1,"children":[],"positionTicks":[{"line":3719,"ticks":1}]},{"id":161,"callFrame":{"functionName":"../node_modules/.bun/ksuid@3.0.0/node_modules/ksuid/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":2225,"columnNumber":64},"hitCount":24,"children":[],"positionTicks":[{"line":2238,"ticks":24}]},{"id":153,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":2026,"columnNumber":100},"hitCount":0,"children":[154],"positionTicks":[]},{"id":154,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[155],"positionTicks":[]},{"id":155,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":1428,"columnNumber":112},"hitCount":0,"children":[156],"positionTicks":[]},{"id":156,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[157],"positionTicks":[]},{"id":157,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":1370,"columnNumber":111},"hitCount":0,"children":[158],"positionTicks":[]},{"id":158,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[159],"positionTicks":[]},{"id":159,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/trace/context-utils.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":1180,"columnNumber":114},"hitCount":0,"children":[160],"positionTicks":[]},{"id":160,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":141,"callFrame":{"functionName":"inst.default","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72562,"columnNumber":17},"hitCount":0,"children":[142],"positionTicks":[]},{"id":142,"callFrame":{"functionName":"_default2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73333,"columnNumber":18},"hitCount":0,"children":[143],"positionTicks":[]},{"id":143,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[144],"positionTicks":[]},{"id":144,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[145],"positionTicks":[]},{"id":145,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73327,"columnNumber":60},"hitCount":0,"children":[146],"positionTicks":[]},{"id":146,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[147],"positionTicks":[]},{"id":147,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72588,"ticks":1}]},{"id":132,"callFrame":{"functionName":"inst.gt","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72826,"columnNumber":12},"hitCount":0,"children":[133],"positionTicks":[]},{"id":133,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[134],"positionTicks":[]},{"id":134,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[135],"positionTicks":[]},{"id":135,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[136],"positionTicks":[]},{"id":136,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[137],"positionTicks":[]},{"id":137,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[138],"positionTicks":[]},{"id":138,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72823,"columnNumber":58},"hitCount":0,"children":[139],"positionTicks":[]},{"id":139,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[140],"positionTicks":[]},{"id":140,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64482,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":126,"callFrame":{"functionName":"inst.describe","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72567,"columnNumber":18},"hitCount":0,"children":[127],"positionTicks":[]},{"id":127,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[128],"positionTicks":[]},{"id":128,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[129],"positionTicks":[]},{"id":129,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[130],"positionTicks":[]},{"id":130,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[131],"positionTicks":[]},{"id":131,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":72632,"ticks":1}]},{"id":123,"callFrame":{"functionName":"createJSDocDescription","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":96345,"columnNumber":31},"hitCount":0,"children":[124],"positionTicks":[]},{"id":124,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":96346,"columnNumber":57},"hitCount":0,"children":[125],"positionTicks":[]},{"id":125,"callFrame":{"functionName":"isInternalField","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":96303,"columnNumber":24},"hitCount":1,"children":[],"positionTicks":[{"line":96315,"ticks":1}]},{"id":115,"callFrame":{"functionName":"inst.extend","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73019,"columnNumber":16},"hitCount":0,"children":[116],"positionTicks":[]},{"id":116,"callFrame":{"functionName":"extend","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":63003,"columnNumber":15},"hitCount":0,"children":[117],"positionTicks":[]},{"id":117,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[118],"positionTicks":[]},{"id":118,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[119],"positionTicks":[]},{"id":119,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[120],"positionTicks":[]},{"id":120,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73009,"columnNumber":58},"hitCount":0,"children":[121],"positionTicks":[]},{"id":121,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[122],"positionTicks":[]},{"id":122,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72558,"ticks":1}]},{"id":107,"callFrame":{"functionName":"inst.optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72554,"columnNumber":18},"hitCount":0,"children":[108],"positionTicks":[]},{"id":108,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73304,"columnNumber":17},"hitCount":0,"children":[109],"positionTicks":[]},{"id":109,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[110],"positionTicks":[]},{"id":110,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[111],"positionTicks":[]},{"id":111,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73299,"columnNumber":62},"hitCount":0,"children":[112],"positionTicks":[]},{"id":112,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[113,150],"positionTicks":[]},{"id":150,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65424,"columnNumber":64},"hitCount":0,"children":[151],"positionTicks":[]},{"id":151,"callFrame":{"functionName":"defineLazy","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62730,"columnNumber":19},"hitCount":1,"children":[],"positionTicks":[{"line":62733,"ticks":1}]},{"id":113,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72573,"ticks":1}]},{"id":97,"callFrame":{"functionName":"inst.max","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72602,"columnNumber":13},"hitCount":0,"children":[98],"positionTicks":[]},{"id":98,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[99],"positionTicks":[]},{"id":99,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[100],"positionTicks":[]},{"id":100,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[101],"positionTicks":[]},{"id":101,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[102],"positionTicks":[]},{"id":102,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[103],"positionTicks":[]},{"id":103,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":0,"children":[104],"positionTicks":[]},{"id":104,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[105],"positionTicks":[]},{"id":105,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[106],"positionTicks":[]},{"id":106,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":63483,"columnNumber":36},"hitCount":0,"children":[],"positionTicks":[]},{"id":86,"callFrame":{"functionName":"inst.regex","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72597,"columnNumber":15},"hitCount":0,"children":[87],"positionTicks":[]},{"id":87,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[88],"positionTicks":[]},{"id":88,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[89],"positionTicks":[]},{"id":89,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[90],"positionTicks":[]},{"id":90,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[91],"positionTicks":[]},{"id":91,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[92],"positionTicks":[]},{"id":92,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":0,"children":[93],"positionTicks":[]},{"id":93,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[94],"positionTicks":[]},{"id":94,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":73,"callFrame":{"functionName":"number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72848,"columnNumber":16},"hitCount":0,"children":[74],"positionTicks":[]},{"id":74,"callFrame":{"functionName":"_number","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":70910,"columnNumber":16},"hitCount":0,"children":[75],"positionTicks":[]},{"id":75,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[76],"positionTicks":[]},{"id":76,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[77],"positionTicks":[]},{"id":77,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72823,"columnNumber":58},"hitCount":1,"children":[78],"positionTicks":[{"line":72837,"ticks":1}]},{"id":78,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[79],"positionTicks":[]},{"id":79,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64482,"columnNumber":60},"hitCount":0,"children":[80],"positionTicks":[]},{"id":80,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[81],"positionTicks":[]},{"id":81,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64082,"columnNumber":56},"hitCount":0,"children":[],"positionTicks":[]},{"id":72,"callFrame":{"functionName":"clone2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":81152,"columnNumber":15},"hitCount":1,"children":[],"positionTicks":[{"line":81300,"ticks":1}]},{"id":68,"callFrame":{"functionName":"record","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73128,"columnNumber":15},"hitCount":0,"children":[69],"positionTicks":[]},{"id":69,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[70],"positionTicks":[]},{"id":70,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[71],"positionTicks":[]},{"id":71,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73122,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":73126,"ticks":1}]},{"id":55,"callFrame":{"functionName":"inst.nullable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72555,"columnNumber":18},"hitCount":0,"children":[56],"positionTicks":[]},{"id":56,"callFrame":{"functionName":"nullable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73316,"columnNumber":17},"hitCount":0,"children":[57],"positionTicks":[]},{"id":57,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[58],"positionTicks":[]},{"id":58,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[59],"positionTicks":[]},{"id":59,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73311,"columnNumber":62},"hitCount":0,"children":[60],"positionTicks":[]},{"id":60,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[61],"positionTicks":[]},{"id":61,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":0,"children":[62],"positionTicks":[]},{"id":62,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[63],"positionTicks":[]},{"id":63,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64082,"columnNumber":56},"hitCount":0,"children":[64],"positionTicks":[]},{"id":64,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":44,"callFrame":{"functionName":"object","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73028,"columnNumber":15},"hitCount":0,"children":[45],"positionTicks":[]},{"id":45,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[46],"positionTicks":[]},{"id":46,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[114],"positionTicks":[{"line":62555,"ticks":1}]},{"id":114,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73009,"columnNumber":58},"hitCount":2,"children":[148],"positionTicks":[{"line":73015,"ticks":1},{"line":73017,"ticks":1}]},{"id":148,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[149],"positionTicks":[]},{"id":149,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72543,"ticks":1}]},{"id":37,"callFrame":{"functionName":"inst.meta","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72578,"columnNumber":14},"hitCount":0,"children":[38,85],"positionTicks":[]},{"id":85,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":70581,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":38,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[39],"positionTicks":[]},{"id":39,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[40],"positionTicks":[]},{"id":40,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":1,"children":[41],"positionTicks":[{"line":62576,"ticks":1}]},{"id":41,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[42,65],"positionTicks":[]},{"id":65,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73299,"columnNumber":62},"hitCount":0,"children":[66],"positionTicks":[]},{"id":66,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[67],"positionTicks":[]},{"id":67,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72573,"ticks":1}]},{"id":42,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73327,"columnNumber":60},"hitCount":0,"children":[43],"positionTicks":[]},{"id":43,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":62555,"ticks":1}]},{"id":29,"callFrame":{"functionName":"inst.int","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72832,"columnNumber":13},"hitCount":0,"children":[30],"positionTicks":[]},{"id":30,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[31],"positionTicks":[]},{"id":31,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[32],"positionTicks":[]},{"id":32,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[33],"positionTicks":[]},{"id":33,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[34],"positionTicks":[]},{"id":34,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[35],"positionTicks":[]},{"id":35,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72823,"columnNumber":58},"hitCount":0,"children":[36],"positionTicks":[]},{"id":36,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":62555,"ticks":1}]},{"id":28,"callFrame":{"functionName":"_enum2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73214,"columnNumber":15},"hitCount":1,"children":[47],"positionTicks":[{"line":73220,"ticks":1}]},{"id":47,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[48],"positionTicks":[]},{"id":48,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[49],"positionTicks":[]},{"id":49,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73177,"columnNumber":54},"hitCount":0,"children":[50],"positionTicks":[]},{"id":50,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[51],"positionTicks":[]},{"id":51,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65354,"columnNumber":56},"hitCount":1,"children":[52],"positionTicks":[{"line":65359,"ticks":1}]},{"id":52,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65358,"columnNumber":98},"hitCount":0,"children":[53],"positionTicks":[]},{"id":53,"callFrame":{"functionName":"escapeRegex","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62880,"columnNumber":20},"hitCount":0,"children":[54],"positionTicks":[]},{"id":54,"callFrame":{"functionName":"RegExp: [.*+?^${}()|[\\]\\\\]","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[]},{"id":21,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":61012,"columnNumber":33},"hitCount":0,"children":[22],"positionTicks":[]},{"id":22,"callFrame":{"functionName":"pgTableWithSchema","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":56859,"columnNumber":26},"hitCount":0,"children":[23],"positionTicks":[]},{"id":23,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":56872,"columnNumber":38},"hitCount":0,"children":[24],"positionTicks":[]},{"id":24,"callFrame":{"functionName":"buildExtraConfigColumn","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":54039,"columnNumber":24},"hitCount":0,"children":[25],"positionTicks":[]},{"id":25,"callFrame":{"functionName":"ExtraConfigColumn","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":54056,"columnNumber":24},"hitCount":0,"children":[26],"positionTicks":[]},{"id":26,"callFrame":{"functionName":"PgColumn","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":54047,"columnNumber":13},"hitCount":0,"children":[27],"positionTicks":[]},{"id":27,"callFrame":{"functionName":"Column","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":53603,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":53616,"ticks":1}]},{"id":13,"callFrame":{"functionName":"string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72643,"columnNumber":16},"hitCount":0,"children":[14],"positionTicks":[]},{"id":14,"callFrame":{"functionName":"_string","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":70625,"columnNumber":16},"hitCount":0,"children":[15],"positionTicks":[]},{"id":15,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[16],"positionTicks":[]},{"id":16,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[17],"positionTicks":[{"line":62555,"ticks":1}]},{"id":17,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":1,"children":[18],"positionTicks":[{"line":72614,"ticks":1}]},{"id":18,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[19],"positionTicks":[]},{"id":19,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72590,"columnNumber":60},"hitCount":1,"children":[20],"positionTicks":[{"line":72592,"ticks":1}]},{"id":20,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[82,95],"positionTicks":[{"line":62555,"ticks":1}]},{"id":95,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[96],"positionTicks":[]},{"id":96,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":62555,"ticks":1}]},{"id":82,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[83],"positionTicks":[{"line":72528,"ticks":1}]},{"id":83,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[84],"positionTicks":[]},{"id":84,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64082,"columnNumber":56},"hitCount":1,"children":[],"positionTicks":[{"line":64100,"ticks":1}]},{"id":11,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":56893,"columnNumber":37},"hitCount":0,"children":[12],"positionTicks":[]},{"id":12,"callFrame":{"functionName":"pgTableWithSchema","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":56859,"columnNumber":26},"hitCount":1,"children":[],"positionTicks":[{"line":56863,"ticks":1}]},{"id":8,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":54964,"columnNumber":2},"hitCount":0,"children":[9],"positionTicks":[]},{"id":9,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[10],"positionTicks":[]},{"id":10,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":6,"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":71,"children":[],"positionTicks":[]},{"id":4,"callFrame":{"functionName":"","scriptId":"25","url":"node-internal:crypto_random","lineNumber":0,"columnNumber":0},"hitCount":0,"children":[5],"positionTicks":[]},{"id":5,"callFrame":{"functionName":"alloc","scriptId":"12","url":"node-internal:internal_buffer","lineNumber":206,"columnNumber":14},"hitCount":1,"children":[],"positionTicks":[{"line":215,"ticks":1}]},{"id":3,"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":6,"children":[],"positionTicks":[]},{"id":2,"callFrame":{"functionName":"(idle)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[],"positionTicks":[]}],"startTime":424523338375,"endTime":424523855862,"samples":[2,3,3,3,3,5,6,7,7,10,12,20,27,28,16,17,36,43,46,54,64,67,6,71,40,72,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,81,82,84,85,7,6,6,94,96,105,106,113,7,6,6,6,114,122,125,131,7,140,138,147,149,151,160,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,162,162,162,173,175,178,186,192,193,7,206,213,214,221,6,6,6,6,241,229,243,245,248,250,255,7,264,7,273,282,6,6,6,6,6,292,298,306,313,321,3,328,334,335,342,350,354,362,6,6,6,6,6,6,6,6,6,369,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,370,324,372,378,288,387,390,391,392,394,396,398,401,409,410,219,423,421,424,425,428,433,443,51,446,449,453,19,77,452,114,457,3,461,463,6,6,6,6,6,6,6],"timeDeltas":[89888,1557,1498,1503,1506,1506,1507,1508,1506,1501,1506,1496,1504,1498,1507,1507,1498,1507,1498,1505,1502,1504,1496,1504,1508,1503,1539,1529,1488,1520,1516,1517,1534,1508,1516,1518,1516,1342,1499,1534,1515,1519,1489,1530,1522,1519,1520,1417,1517,1516,1518,1517,1513,1494,1506,1509,1504,1530,1491,1510,1547,1511,1513,1510,1525,1524,1482,1530,1514,1521,1522,1514,1519,1492,1504,1533,1491,1530,1516,1489,1532,1516,1497,1543,1482,1502,1507,1534,1489,1530,1513,1512,1497,1533,1517,1519,1520,1518,1496,1384,1271,1513,1516,1514,1515,1518,1509,1517,1519,1512,1515,1535,1491,1505,1181,323,1491,1196,305,1209,1506,1129,373,874,5,615,1502,1180,1258,1503,1500,1501,1494,1510,1497,8,13,1482,1494,1502,1501,1511,1524,1488,1534,1510,1027,1289,1513,1516,1522,1483,1544,1510,1486,1537,1514,1517,1515,1519,1512,1526,1487,1531,1516,1300,181,150,1350,1504,1494,1506,1493,1473,1493,1507,1490,1503,1498,1428,1495,1505,1501,1506,1504,1484,1502,1495,1502,1498,1509,1490,1507,47,1448,1502,1507,1401,1508,1506,1504,1501,1494,1507,1500,1505,1502,1504,1503,1501,1506,1500,1503,1506,1506,1503,1501,1507,1504,1355,1255,1504,1505,1502,1499,1507,1507,1506,1504,1509,1501,1508,1507,1510,1503,1502,1507,1507,1506,1505,1502,1509,1505,1509,1507,1502,1502,1506,1507,1508,1503,1505,1505,1505,1503,1501,1496,1504,1504,1504,1503,1502,1505,1503,1373,1503,1495,1502,1499,1504,1503,1175,210,155,446,200,488,1491,340,11,5,1150,1488,1502,1493,1503,1491,1503,241,1253,1499,353,1152,80,1419,1503,1553,1458,1499,1508,1503,1504,1507,1506]} \ No newline at end of file +{"nodes":[{"id":1,"callFrame":{"functionName":"(root)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[2,3,4,5,98],"positionTicks":[]},{"id":98,"callFrame":{"functionName":"_refine","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":71506,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":71508,"ticks":1}]},{"id":5,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":-1,"columnNumber":-1},"hitCount":14,"children":[6,7,8,10,13,21,30,31,37,55,63,71,82,92,104,113,114,126,130,139,155,156,157,164,166,173,185,213,217,221,223,230,234,244,252,260,268,305,312,318,324,340,344,367,374,376,378,386,389,397,411,414,425,439,448,452,459],"positionTicks":[]},{"id":459,"callFrame":{"functionName":"route","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231353,"columnNumber":7},"hitCount":0,"children":[460],"positionTicks":[]},{"id":460,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231355,"columnNumber":19},"hitCount":0,"children":[461],"positionTicks":[]},{"id":461,"callFrame":{"functionName":"#addRoute","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231501,"columnNumber":11},"hitCount":0,"children":[462],"positionTicks":[]},{"id":462,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":120527,"columnNumber":39},"hitCount":0,"children":[],"positionTicks":[]},{"id":452,"callFrame":{"functionName":"discriminatedUnion","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73081,"columnNumber":27},"hitCount":0,"children":[453],"positionTicks":[]},{"id":453,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[454],"positionTicks":[]},{"id":454,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[455],"positionTicks":[]},{"id":455,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73077,"columnNumber":82},"hitCount":0,"children":[456],"positionTicks":[]},{"id":456,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[457],"positionTicks":[]},{"id":457,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64950,"columnNumber":84},"hitCount":1,"children":[],"positionTicks":[{"line":64970,"ticks":1}]},{"id":448,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231283,"columnNumber":21},"hitCount":0,"children":[449],"positionTicks":[]},{"id":449,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231289,"columnNumber":21},"hitCount":0,"children":[450],"positionTicks":[]},{"id":450,"callFrame":{"functionName":"#addRoute","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":231501,"columnNumber":11},"hitCount":1,"children":[451],"positionTicks":[{"line":231504,"ticks":1}]},{"id":451,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":232009,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":439,"callFrame":{"functionName":"inst.min","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72601,"columnNumber":13},"hitCount":0,"children":[440],"positionTicks":[]},{"id":440,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[441],"positionTicks":[]},{"id":441,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[442],"positionTicks":[]},{"id":442,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[443],"positionTicks":[]},{"id":443,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[444],"positionTicks":[]},{"id":444,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[445],"positionTicks":[]},{"id":445,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":0,"children":[446],"positionTicks":[]},{"id":446,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[447],"positionTicks":[]},{"id":447,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72590,"columnNumber":60},"hitCount":1,"children":[],"positionTicks":[{"line":72606,"ticks":1}]},{"id":425,"callFrame":{"functionName":"array","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73000,"columnNumber":14},"hitCount":0,"children":[426],"positionTicks":[]},{"id":426,"callFrame":{"functionName":"_array","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":71297,"columnNumber":15},"hitCount":0,"children":[427],"positionTicks":[]},{"id":427,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[428],"positionTicks":[]},{"id":428,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[429],"positionTicks":[]},{"id":429,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72990,"columnNumber":56},"hitCount":0,"children":[430],"positionTicks":[]},{"id":430,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":62555,"ticks":1}]},{"id":414,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274773,"columnNumber":18},"hitCount":0,"children":[415],"positionTicks":[]},{"id":415,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274623,"columnNumber":18},"hitCount":1,"children":[416],"positionTicks":[{"line":274628,"ticks":1}]},{"id":416,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274629,"columnNumber":14},"hitCount":0,"children":[417],"positionTicks":[]},{"id":417,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274623,"columnNumber":18},"hitCount":0,"children":[418],"positionTicks":[]},{"id":418,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274629,"columnNumber":14},"hitCount":0,"children":[419],"positionTicks":[]},{"id":419,"callFrame":{"functionName":"toAsnItem","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":274718,"columnNumber":18},"hitCount":0,"children":[420],"positionTicks":[]},{"id":420,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":273973,"columnNumber":32},"hitCount":0,"children":[421],"positionTicks":[]},{"id":421,"callFrame":{"functionName":"fromBER","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":271380,"columnNumber":16},"hitCount":0,"children":[422],"positionTicks":[]},{"id":422,"callFrame":{"functionName":"localFromBER","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":271172,"columnNumber":21},"hitCount":0,"children":[423],"positionTicks":[]},{"id":423,"callFrame":{"functionName":"fromBER","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":271726,"columnNumber":9},"hitCount":0,"children":[424],"positionTicks":[]},{"id":424,"callFrame":{"functionName":"fromBER","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":270959,"columnNumber":9},"hitCount":1,"children":[],"positionTicks":[{"line":270961,"ticks":1}]},{"id":411,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":269543,"columnNumber":2},"hitCount":0,"children":[412],"positionTicks":[]},{"id":412,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[413],"positionTicks":[]},{"id":413,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":397,"callFrame":{"functionName":"url2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144686,"columnNumber":13},"hitCount":0,"children":[398],"positionTicks":[]},{"id":398,"callFrame":{"functionName":"_url2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142024,"columnNumber":14},"hitCount":0,"children":[399],"positionTicks":[]},{"id":399,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[400],"positionTicks":[]},{"id":400,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[401],"positionTicks":[]},{"id":401,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144682,"columnNumber":54},"hitCount":0,"children":[402],"positionTicks":[]},{"id":402,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[403],"positionTicks":[]},{"id":403,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133868,"columnNumber":56},"hitCount":0,"children":[404],"positionTicks":[]},{"id":404,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[405],"positionTicks":[]},{"id":405,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133836,"columnNumber":74},"hitCount":0,"children":[406],"positionTicks":[]},{"id":406,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[407],"positionTicks":[]},{"id":407,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133816,"columnNumber":62},"hitCount":0,"children":[408,410],"positionTicks":[]},{"id":410,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133072,"columnNumber":37},"hitCount":0,"children":[],"positionTicks":[]},{"id":408,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[409],"positionTicks":[]},{"id":409,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133705,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":389,"callFrame":{"functionName":"xor2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145189,"columnNumber":13},"hitCount":0,"children":[390],"positionTicks":[]},{"id":390,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[391],"positionTicks":[]},{"id":391,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[392],"positionTicks":[]},{"id":392,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145183,"columnNumber":53},"hitCount":0,"children":[393],"positionTicks":[]},{"id":393,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[394],"positionTicks":[]},{"id":394,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145169,"columnNumber":58},"hitCount":0,"children":[395],"positionTicks":[]},{"id":395,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[396],"positionTicks":[]},{"id":396,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134660,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":386,"callFrame":{"functionName":"nonempty","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144581,"columnNumber":12},"hitCount":0,"children":[387],"positionTicks":[]},{"id":387,"callFrame":{"functionName":"_minLength2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142577,"columnNumber":20},"hitCount":0,"children":[388],"positionTicks":[]},{"id":388,"callFrame":{"functionName":"normalizeParams2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132301,"columnNumber":25},"hitCount":0,"children":[],"positionTicks":[]},{"id":378,"callFrame":{"functionName":"or","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144497,"columnNumber":6},"hitCount":0,"children":[379],"positionTicks":[]},{"id":379,"callFrame":{"functionName":"union3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145175,"columnNumber":15},"hitCount":0,"children":[380],"positionTicks":[]},{"id":380,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[381],"positionTicks":[]},{"id":381,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[382],"positionTicks":[]},{"id":382,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145169,"columnNumber":58},"hitCount":0,"children":[383],"positionTicks":[]},{"id":383,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[384],"positionTicks":[]},{"id":384,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144422,"columnNumber":56},"hitCount":0,"children":[385],"positionTicks":[]},{"id":385,"callFrame":{"functionName":"_installLazyMethods","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144385,"columnNumber":28},"hitCount":1,"children":[],"positionTicks":[{"line":144387,"ticks":1}]},{"id":376,"callFrame":{"functionName":"number5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144909,"columnNumber":16},"hitCount":0,"children":[377],"positionTicks":[]},{"id":377,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142262,"columnNumber":17},"hitCount":0,"children":[],"positionTicks":[]},{"id":374,"callFrame":{"functionName":"any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145016,"columnNumber":13},"hitCount":0,"children":[375],"positionTicks":[]},{"id":375,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142416,"columnNumber":14},"hitCount":0,"children":[],"positionTicks":[]},{"id":367,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":122121,"columnNumber":51},"hitCount":0,"children":[368],"positionTicks":[]},{"id":368,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":253396,"columnNumber":39},"hitCount":0,"children":[369],"positionTicks":[]},{"id":369,"callFrame":{"functionName":"inst.parse","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72546,"columnNumber":15},"hitCount":0,"children":[370],"positionTicks":[]},{"id":370,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":63328,"columnNumber":46},"hitCount":0,"children":[371],"positionTicks":[]},{"id":371,"callFrame":{"functionName":"inst._zod.parse","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64824,"columnNumber":20},"hitCount":0,"children":[372],"positionTicks":[]},{"id":372,"callFrame":{"functionName":"inst._zod.parse","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65466,"columnNumber":20},"hitCount":0,"children":[373],"positionTicks":[]},{"id":373,"callFrame":{"functionName":"get defaultValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73337,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":73339,"ticks":1}]},{"id":344,"callFrame":{"functionName":"any3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181367,"columnNumber":13},"hitCount":0,"children":[345],"positionTicks":[]},{"id":345,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142416,"columnNumber":14},"hitCount":0,"children":[346],"positionTicks":[]},{"id":346,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[347],"positionTicks":[]},{"id":347,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[348],"positionTicks":[]},{"id":348,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181362,"columnNumber":61},"hitCount":0,"children":[349],"positionTicks":[]},{"id":349,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[350],"positionTicks":[]},{"id":350,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134266,"columnNumber":56},"hitCount":0,"children":[351],"positionTicks":[]},{"id":351,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[352],"positionTicks":[]},{"id":352,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133705,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":133723,"ticks":1}]},{"id":340,"callFrame":{"functionName":"boolean9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181336,"columnNumber":17},"hitCount":0,"children":[341],"positionTicks":[]},{"id":341,"callFrame":{"functionName":"_boolean2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142336,"columnNumber":18},"hitCount":0,"children":[342],"positionTicks":[]},{"id":342,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[343],"positionTicks":[]},{"id":343,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":131887,"ticks":1}]},{"id":324,"callFrame":{"functionName":"inboundSchema","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182766,"columnNumber":22},"hitCount":0,"children":[325,353],"positionTicks":[]},{"id":353,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181485,"columnNumber":19},"hitCount":0,"children":[354],"positionTicks":[]},{"id":354,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[355],"positionTicks":[]},{"id":355,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[356],"positionTicks":[]},{"id":356,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181480,"columnNumber":73},"hitCount":0,"children":[357],"positionTicks":[]},{"id":357,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":131893,"ticks":1}]},{"id":325,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182769,"columnNumber":19},"hitCount":0,"children":[326],"positionTicks":[]},{"id":326,"callFrame":{"functionName":"literal3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181472,"columnNumber":17},"hitCount":1,"children":[],"positionTicks":[{"line":181474,"ticks":1}]},{"id":318,"callFrame":{"functionName":"record3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181435,"columnNumber":16},"hitCount":0,"children":[319],"positionTicks":[]},{"id":319,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[320],"positionTicks":[]},{"id":320,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[321],"positionTicks":[]},{"id":321,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181430,"columnNumber":67},"hitCount":0,"children":[322],"positionTicks":[]},{"id":322,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[323],"positionTicks":[]},{"id":323,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181285,"ticks":1}]},{"id":312,"callFrame":{"functionName":"object3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181403,"columnNumber":16},"hitCount":0,"children":[313],"positionTicks":[]},{"id":313,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[314],"positionTicks":[]},{"id":314,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":1,"children":[315],"positionTicks":[{"line":131878,"ticks":1}]},{"id":315,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181397,"columnNumber":67},"hitCount":0,"children":[316],"positionTicks":[]},{"id":316,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[317],"positionTicks":[]},{"id":317,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181284,"ticks":1}]},{"id":305,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181485,"columnNumber":19},"hitCount":0,"children":[306],"positionTicks":[]},{"id":306,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[307],"positionTicks":[]},{"id":307,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[308],"positionTicks":[]},{"id":308,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181480,"columnNumber":73},"hitCount":0,"children":[309],"positionTicks":[]},{"id":309,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[310],"positionTicks":[]},{"id":310,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181296,"ticks":1}]},{"id":268,"callFrame":{"functionName":"nullable4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182526,"columnNumber":18},"hitCount":0,"children":[269],"positionTicks":[]},{"id":269,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181536,"columnNumber":14},"hitCount":0,"children":[270],"positionTicks":[]},{"id":270,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[271],"positionTicks":[]},{"id":271,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[272],"positionTicks":[]},{"id":272,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181531,"columnNumber":63},"hitCount":0,"children":[273],"positionTicks":[]},{"id":273,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[274],"positionTicks":[]},{"id":274,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135535,"columnNumber":58},"hitCount":0,"children":[275],"positionTicks":[]},{"id":275,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132093,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132096,"ticks":1}]},{"id":260,"callFrame":{"functionName":"optional4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182518,"columnNumber":18},"hitCount":0,"children":[261],"positionTicks":[]},{"id":261,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181536,"columnNumber":14},"hitCount":0,"children":[262],"positionTicks":[]},{"id":262,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[263],"positionTicks":[]},{"id":263,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[264],"positionTicks":[]},{"id":264,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181531,"columnNumber":63},"hitCount":0,"children":[265],"positionTicks":[]},{"id":265,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[266],"positionTicks":[]},{"id":266,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135535,"columnNumber":58},"hitCount":0,"children":[267],"positionTicks":[]},{"id":267,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132093,"columnNumber":20},"hitCount":2,"children":[],"positionTicks":[{"line":132096,"ticks":1},{"line":132094,"ticks":1}]},{"id":252,"callFrame":{"functionName":"number9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182489,"columnNumber":16},"hitCount":0,"children":[253,276,358],"positionTicks":[]},{"id":358,"callFrame":{"functionName":"union4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181422,"columnNumber":15},"hitCount":0,"children":[359],"positionTicks":[]},{"id":359,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[360],"positionTicks":[]},{"id":360,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[361],"positionTicks":[]},{"id":361,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181417,"columnNumber":65},"hitCount":0,"children":[362],"positionTicks":[]},{"id":362,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[363],"positionTicks":[]},{"id":363,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181282,"ticks":1}]},{"id":276,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182535,"columnNumber":30},"hitCount":0,"children":[277,289],"positionTicks":[]},{"id":289,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181536,"columnNumber":14},"hitCount":0,"children":[290],"positionTicks":[]},{"id":290,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[291],"positionTicks":[]},{"id":291,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[292],"positionTicks":[]},{"id":292,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181531,"columnNumber":63},"hitCount":0,"children":[293],"positionTicks":[]},{"id":293,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[294],"positionTicks":[]},{"id":294,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135535,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":135542,"ticks":1}]},{"id":277,"callFrame":{"functionName":"any3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181367,"columnNumber":13},"hitCount":0,"children":[278],"positionTicks":[]},{"id":278,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142416,"columnNumber":14},"hitCount":0,"children":[279],"positionTicks":[]},{"id":279,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[280],"positionTicks":[]},{"id":280,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[281],"positionTicks":[]},{"id":281,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181362,"columnNumber":61},"hitCount":0,"children":[282],"positionTicks":[]},{"id":282,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[283],"positionTicks":[]},{"id":283,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181282,"ticks":1}]},{"id":253,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181309,"columnNumber":16},"hitCount":0,"children":[254],"positionTicks":[]},{"id":254,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":141938,"columnNumber":17},"hitCount":0,"children":[255],"positionTicks":[]},{"id":255,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[256],"positionTicks":[]},{"id":256,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[257],"positionTicks":[]},{"id":257,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181304,"columnNumber":67},"hitCount":0,"children":[258],"positionTicks":[]},{"id":258,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[259],"positionTicks":[]},{"id":259,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":2,"children":[],"positionTicks":[{"line":181280,"ticks":1},{"line":181283,"ticks":1}]},{"id":244,"callFrame":{"functionName":"_default5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181521,"columnNumber":18},"hitCount":0,"children":[245],"positionTicks":[]},{"id":245,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[246],"positionTicks":[]},{"id":246,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[247],"positionTicks":[]},{"id":247,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181516,"columnNumber":69},"hitCount":0,"children":[248],"positionTicks":[]},{"id":248,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[249],"positionTicks":[]},{"id":249,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135395,"columnNumber":64},"hitCount":0,"children":[250],"positionTicks":[]},{"id":250,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[251],"positionTicks":[]},{"id":251,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133705,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":133723,"ticks":1}]},{"id":234,"callFrame":{"functionName":"string9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182456,"columnNumber":16},"hitCount":0,"children":[235,284,295,327],"positionTicks":[]},{"id":327,"callFrame":{"functionName":"union4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181422,"columnNumber":15},"hitCount":0,"children":[328],"positionTicks":[]},{"id":328,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[329],"positionTicks":[]},{"id":329,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":1,"children":[364],"positionTicks":[{"line":131877,"ticks":1}]},{"id":364,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181417,"columnNumber":65},"hitCount":0,"children":[365],"positionTicks":[]},{"id":365,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[366],"positionTicks":[]},{"id":366,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181279,"ticks":1}]},{"id":295,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181536,"columnNumber":14},"hitCount":0,"children":[296],"positionTicks":[]},{"id":296,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[297],"positionTicks":[]},{"id":297,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[298],"positionTicks":[]},{"id":298,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181531,"columnNumber":63},"hitCount":0,"children":[299],"positionTicks":[]},{"id":299,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[300,301],"positionTicks":[]},{"id":301,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135535,"columnNumber":58},"hitCount":0,"children":[302],"positionTicks":[]},{"id":302,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[303],"positionTicks":[]},{"id":303,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133705,"columnNumber":58},"hitCount":0,"children":[304],"positionTicks":[]},{"id":304,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132093,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":132096,"ticks":1}]},{"id":300,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":2,"children":[],"positionTicks":[{"line":181298,"ticks":1},{"line":181285,"ticks":1}]},{"id":284,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182535,"columnNumber":30},"hitCount":0,"children":[285,334],"positionTicks":[]},{"id":334,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181485,"columnNumber":19},"hitCount":0,"children":[335],"positionTicks":[]},{"id":335,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[336],"positionTicks":[]},{"id":336,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[337],"positionTicks":[]},{"id":337,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181480,"columnNumber":73},"hitCount":0,"children":[338],"positionTicks":[]},{"id":338,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[339],"positionTicks":[]},{"id":339,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181284,"ticks":1}]},{"id":285,"callFrame":{"functionName":"any3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181367,"columnNumber":13},"hitCount":0,"children":[286],"positionTicks":[]},{"id":286,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":142416,"columnNumber":14},"hitCount":0,"children":[287],"positionTicks":[]},{"id":287,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[288,330],"positionTicks":[]},{"id":330,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[331],"positionTicks":[]},{"id":331,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181362,"columnNumber":61},"hitCount":0,"children":[332],"positionTicks":[]},{"id":332,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[333],"positionTicks":[]},{"id":333,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181280,"ticks":1}]},{"id":288,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181362,"columnNumber":61},"hitCount":1,"children":[],"positionTicks":[{"line":181364,"ticks":1}]},{"id":235,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181309,"columnNumber":16},"hitCount":0,"children":[236],"positionTicks":[]},{"id":236,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":141938,"columnNumber":17},"hitCount":0,"children":[237],"positionTicks":[]},{"id":237,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[238],"positionTicks":[]},{"id":238,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[239],"positionTicks":[]},{"id":239,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181304,"columnNumber":67},"hitCount":0,"children":[240],"positionTicks":[]},{"id":240,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[241,311],"positionTicks":[]},{"id":311,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181274,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":181285,"ticks":1}]},{"id":241,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133816,"columnNumber":62},"hitCount":0,"children":[242],"positionTicks":[]},{"id":242,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[243],"positionTicks":[]},{"id":243,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133705,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":230,"callFrame":{"functionName":"boolean11","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":182466,"columnNumber":18},"hitCount":0,"children":[231],"positionTicks":[]},{"id":231,"callFrame":{"functionName":"union4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181422,"columnNumber":15},"hitCount":0,"children":[232],"positionTicks":[]},{"id":232,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[233],"positionTicks":[]},{"id":233,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133722,"columnNumber":29},"hitCount":1,"children":[],"positionTicks":[{"line":133724,"ticks":1}]},{"id":223,"callFrame":{"functionName":"_enum5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181458,"columnNumber":15},"hitCount":0,"children":[224],"positionTicks":[]},{"id":224,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[225],"positionTicks":[]},{"id":225,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[226],"positionTicks":[]},{"id":226,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":181452,"columnNumber":63},"hitCount":0,"children":[227],"positionTicks":[]},{"id":227,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[228],"positionTicks":[]},{"id":228,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":135257,"columnNumber":58},"hitCount":0,"children":[229],"positionTicks":[]},{"id":229,"callFrame":{"functionName":"getEnumValues2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132043,"columnNumber":23},"hitCount":1,"children":[],"positionTicks":[{"line":132046,"ticks":1}]},{"id":221,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":175529,"columnNumber":33},"hitCount":0,"children":[222],"positionTicks":[]},{"id":222,"callFrame":{"functionName":"createParamValidator","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":175485,"columnNumber":29},"hitCount":1,"children":[],"positionTicks":[{"line":175488,"ticks":1}]},{"id":217,"callFrame":{"functionName":"ZodString2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":100180,"columnNumber":20},"hitCount":0,"children":[218],"positionTicks":[]},{"id":218,"callFrame":{"functionName":"_ZodString3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":99639,"columnNumber":17},"hitCount":1,"children":[219],"positionTicks":[{"line":99640,"ticks":1}]},{"id":219,"callFrame":{"functionName":"ZodType2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":99446,"columnNumber":13},"hitCount":0,"children":[220],"positionTicks":[]},{"id":220,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":213,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":99479,"columnNumber":10},"hitCount":0,"children":[214],"positionTicks":[]},{"id":214,"callFrame":{"functionName":"ZodOptional2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":102419,"columnNumber":22},"hitCount":0,"children":[215],"positionTicks":[]},{"id":215,"callFrame":{"functionName":"ZodOptional2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":102404,"columnNumber":19},"hitCount":0,"children":[216],"positionTicks":[]},{"id":216,"callFrame":{"functionName":"ZodType2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":99446,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":99473,"ticks":1}]},{"id":185,"callFrame":{"functionName":"and","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144500,"columnNumber":7},"hitCount":0,"children":[186],"positionTicks":[]},{"id":186,"callFrame":{"functionName":"intersection2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145216,"columnNumber":22},"hitCount":0,"children":[187],"positionTicks":[]},{"id":187,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[188],"positionTicks":[]},{"id":188,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":131891,"ticks":1}]},{"id":173,"callFrame":{"functionName":"string5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144638,"columnNumber":16},"hitCount":0,"children":[174],"positionTicks":[]},{"id":174,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":141938,"columnNumber":17},"hitCount":0,"children":[175],"positionTicks":[]},{"id":175,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[176],"positionTicks":[]},{"id":176,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[177],"positionTicks":[]},{"id":177,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144607,"columnNumber":60},"hitCount":0,"children":[178],"positionTicks":[]},{"id":178,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[179],"positionTicks":[]},{"id":179,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144551,"columnNumber":62},"hitCount":0,"children":[180],"positionTicks":[]},{"id":180,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[181],"positionTicks":[]},{"id":181,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":144422,"columnNumber":56},"hitCount":0,"children":[182],"positionTicks":[]},{"id":182,"callFrame":{"functionName":"get","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":132096,"columnNumber":7},"hitCount":0,"children":[183],"positionTicks":[]},{"id":183,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":133803,"columnNumber":33},"hitCount":0,"children":[184],"positionTicks":[]},{"id":184,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":166,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[167,189],"positionTicks":[]},{"id":189,"callFrame":{"functionName":"../node_modules/.bun/@better-auth+kysely-adapter@1.6.5+04a7fca1abceb4e4/node_modules/@better-auth/kysely-adapter/dist/index.mjs","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":38050,"columnNumber":131},"hitCount":0,"children":[190],"positionTicks":[]},{"id":190,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[191],"positionTicks":[]},{"id":191,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":37270,"columnNumber":77},"hitCount":0,"children":[192],"positionTicks":[]},{"id":192,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[193,211],"positionTicks":[]},{"id":211,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/dialect/sqlite/sqlite-dialect.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":35859,"columnNumber":101},"hitCount":0,"children":[212],"positionTicks":[]},{"id":212,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[],"positionTicks":[{"line":9,"ticks":1}]},{"id":193,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/kysely.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":32878,"columnNumber":78},"hitCount":0,"children":[194],"positionTicks":[]},{"id":194,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[195],"positionTicks":[]},{"id":195,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/schema/schema.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":32023,"columnNumber":85},"hitCount":0,"children":[196],"positionTicks":[]},{"id":196,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[197],"positionTicks":[]},{"id":197,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/table-parser.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":28741,"columnNumber":91},"hitCount":0,"children":[198],"positionTicks":[]},{"id":198,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[199],"positionTicks":[]},{"id":199,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/expression-parser.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":28640,"columnNumber":96},"hitCount":0,"children":[200],"positionTicks":[]},{"id":200,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[201],"positionTicks":[]},{"id":201,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/expression/expression-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":28589,"columnNumber":101},"hitCount":0,"children":[202],"positionTicks":[]},{"id":202,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[203],"positionTicks":[]},{"id":203,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/query-builder/select-query-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":27191,"columnNumber":106},"hitCount":0,"children":[204],"positionTicks":[]},{"id":204,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[205],"positionTicks":[]},{"id":205,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/join-parser.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":26892,"columnNumber":90},"hitCount":0,"children":[206],"positionTicks":[]},{"id":206,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[207],"positionTicks":[]},{"id":207,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/parse-utils.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":26856,"columnNumber":90},"hitCount":0,"children":[208],"positionTicks":[]},{"id":208,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[209],"positionTicks":[]},{"id":209,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/query-creator.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":26218,"columnNumber":85},"hitCount":0,"children":[210],"positionTicks":[]},{"id":210,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[],"positionTicks":[{"line":9,"ticks":1}]},{"id":167,"callFrame":{"functionName":"../node_modules/.bun/@better-auth+core@1.6.5+c637e6fd07c35fe7/node_modules/@better-auth/core/dist/instrumentation/attributes.mjs","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17438,"columnNumber":132},"hitCount":0,"children":[168],"positionTicks":[]},{"id":168,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[169],"positionTicks":[]},{"id":169,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17408,"columnNumber":135},"hitCount":0,"children":[170],"positionTicks":[]},{"id":170,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[171],"positionTicks":[]},{"id":171,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/resource/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17154,"columnNumber":144},"hitCount":0,"children":[172],"positionTicks":[]},{"id":172,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":164,"callFrame":{"functionName":"createAuthEndpoint","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":148535,"columnNumber":27},"hitCount":0,"children":[165],"positionTicks":[]},{"id":165,"callFrame":{"functionName":"createEndpoint","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":147904,"columnNumber":23},"hitCount":1,"children":[],"positionTicks":[{"line":147910,"ticks":1}]},{"id":157,"callFrame":{"functionName":"object2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145142,"columnNumber":16},"hitCount":0,"children":[158],"positionTicks":[]},{"id":158,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131908,"columnNumber":13},"hitCount":0,"children":[159],"positionTicks":[]},{"id":159,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[160],"positionTicks":[]},{"id":160,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":145093,"columnNumber":60},"hitCount":0,"children":[161],"positionTicks":[]},{"id":161,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":0,"children":[162],"positionTicks":[]},{"id":162,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":134512,"columnNumber":67},"hitCount":0,"children":[163],"positionTicks":[]},{"id":163,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131875,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":131891,"ticks":1}]},{"id":156,"callFrame":{"functionName":"__export","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":13,"columnNumber":15},"hitCount":1,"children":[],"positionTicks":[{"line":15,"ticks":1}]},{"id":155,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":124066,"columnNumber":9},"hitCount":1,"children":[],"positionTicks":[{"line":124100,"ticks":1}]},{"id":139,"callFrame":{"functionName":"createStripe","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":117461,"columnNumber":21},"hitCount":0,"children":[140],"positionTicks":[]},{"id":140,"callFrame":{"functionName":"determineProcessUserAgentProperties","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":111719,"columnNumber":44},"hitCount":0,"children":[141],"positionTicks":[]},{"id":141,"callFrame":{"functionName":"get process","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[142],"positionTicks":[]},{"id":142,"callFrame":{"functionName":"","scriptId":"75","url":"node-internal:public_process","lineNumber":0,"columnNumber":0},"hitCount":0,"children":[143],"positionTicks":[]},{"id":143,"callFrame":{"functionName":"ReadStream","scriptId":"77","url":"node-internal:internal_fs_streams","lineNumber":423,"columnNumber":26},"hitCount":1,"children":[],"positionTicks":[{"line":459,"ticks":1}]},{"id":130,"callFrame":{"functionName":"genTtable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":110422,"columnNumber":18},"hitCount":1,"children":[],"positionTicks":[{"line":110427,"ticks":1}]},{"id":126,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[127,131,144,431],"positionTicks":[]},{"id":431,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client@1.20.0/node_modules/@clickhouse/client/dist/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52869,"columnNumber":96},"hitCount":0,"children":[432],"positionTicks":[]},{"id":432,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[433],"positionTicks":[]},{"id":433,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client@1.20.0/node_modules/@clickhouse/client/dist/client.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52840,"columnNumber":97},"hitCount":0,"children":[434],"positionTicks":[]},{"id":434,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[435],"positionTicks":[]},{"id":435,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client@1.20.0/node_modules/@clickhouse/client/dist/config.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52755,"columnNumber":97},"hitCount":0,"children":[436],"positionTicks":[]},{"id":436,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[437],"positionTicks":[]},{"id":437,"callFrame":{"functionName":"../node_modules/.bun/@clickhouse+client@1.20.0/node_modules/@clickhouse/client/dist/connection/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52546,"columnNumber":107},"hitCount":0,"children":[438],"positionTicks":[]},{"id":438,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":144,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":15074,"columnNumber":68},"hitCount":0,"children":[145],"positionTicks":[]},{"id":145,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[146,150],"positionTicks":[]},{"id":150,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/streaming.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":13700,"columnNumber":76},"hitCount":0,"children":[151],"positionTicks":[]},{"id":151,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[152],"positionTicks":[]},{"id":152,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/streamingEvents.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":12006,"columnNumber":82},"hitCount":0,"children":[153],"positionTicks":[]},{"id":153,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[154],"positionTicks":[]},{"id":154,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/models/eventStreamOut.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":11980,"columnNumber":84},"hitCount":1,"children":[],"positionTicks":[{"line":11984,"ticks":1}]},{"id":146,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/endpoint.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6934,"columnNumber":75},"hitCount":0,"children":[147],"positionTicks":[]},{"id":147,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[148],"positionTicks":[]},{"id":148,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/models/bulkReplayIn.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6328,"columnNumber":82},"hitCount":0,"children":[149],"positionTicks":[]},{"id":149,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":131,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":4900,"columnNumber":63},"hitCount":0,"children":[132],"positionTicks":[]},{"id":132,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[133],"positionTicks":[]},{"id":133,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/stringify.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":4294,"columnNumber":67},"hitCount":0,"children":[134],"positionTicks":[]},{"id":134,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[135],"positionTicks":[]},{"id":135,"callFrame":{"functionName":"../node_modules/.bun/side-channel@1.1.1/node_modules/side-channel/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3964,"columnNumber":78},"hitCount":0,"children":[136],"positionTicks":[]},{"id":136,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[137],"positionTicks":[]},{"id":137,"callFrame":{"functionName":"../node_modules/.bun/side-channel-map@1.0.1/node_modules/side-channel-map/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3835,"columnNumber":86},"hitCount":0,"children":[138],"positionTicks":[]},{"id":138,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":127,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/index.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":2026,"columnNumber":100},"hitCount":0,"children":[128],"positionTicks":[]},{"id":128,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[129],"positionTicks":[]},{"id":129,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":1428,"columnNumber":112},"hitCount":1,"children":[],"positionTicks":[{"line":1434,"ticks":1}]},{"id":114,"callFrame":{"functionName":"inst.nullable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72555,"columnNumber":18},"hitCount":0,"children":[115],"positionTicks":[]},{"id":115,"callFrame":{"functionName":"nullable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73316,"columnNumber":17},"hitCount":0,"children":[116],"positionTicks":[]},{"id":116,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[117],"positionTicks":[]},{"id":117,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[118],"positionTicks":[]},{"id":118,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73311,"columnNumber":62},"hitCount":0,"children":[119],"positionTicks":[]},{"id":119,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[120],"positionTicks":[]},{"id":120,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72547,"ticks":1}]},{"id":113,"callFrame":{"functionName":"regex","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":100037,"columnNumber":7},"hitCount":1,"children":[],"positionTicks":[{"line":100042,"ticks":1}]},{"id":104,"callFrame":{"functionName":"inst.gt","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72826,"columnNumber":12},"hitCount":0,"children":[105],"positionTicks":[]},{"id":105,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[106],"positionTicks":[]},{"id":106,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[107],"positionTicks":[]},{"id":107,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[108],"positionTicks":[]},{"id":108,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[109],"positionTicks":[]},{"id":109,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[110],"positionTicks":[]},{"id":110,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72823,"columnNumber":58},"hitCount":0,"children":[111],"positionTicks":[]},{"id":111,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[112],"positionTicks":[]},{"id":112,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64482,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":92,"callFrame":{"functionName":"_enum2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73214,"columnNumber":15},"hitCount":0,"children":[93],"positionTicks":[]},{"id":93,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[94],"positionTicks":[]},{"id":94,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[95],"positionTicks":[]},{"id":95,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73177,"columnNumber":54},"hitCount":0,"children":[96],"positionTicks":[]},{"id":96,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[97,99],"positionTicks":[]},{"id":99,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65354,"columnNumber":56},"hitCount":0,"children":[100],"positionTicks":[]},{"id":100,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[101],"positionTicks":[]},{"id":101,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64082,"columnNumber":56},"hitCount":0,"children":[102],"positionTicks":[]},{"id":102,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[103],"positionTicks":[]},{"id":103,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":97,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72555,"ticks":1}]},{"id":82,"callFrame":{"functionName":"inst.max","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72602,"columnNumber":13},"hitCount":0,"children":[83],"positionTicks":[]},{"id":83,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[84],"positionTicks":[]},{"id":84,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[85],"positionTicks":[]},{"id":85,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[86],"positionTicks":[]},{"id":86,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[87],"positionTicks":[]},{"id":87,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[88],"positionTicks":[]},{"id":88,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":0,"children":[89],"positionTicks":[]},{"id":89,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[90],"positionTicks":[]},{"id":90,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[91],"positionTicks":[]},{"id":91,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":63483,"columnNumber":36},"hitCount":0,"children":[],"positionTicks":[]},{"id":71,"callFrame":{"functionName":"inst.regex","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72597,"columnNumber":15},"hitCount":0,"children":[72],"positionTicks":[]},{"id":72,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72528,"columnNumber":15},"hitCount":0,"children":[73],"positionTicks":[]},{"id":73,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[74],"positionTicks":[]},{"id":74,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[75],"positionTicks":[]},{"id":75,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[76],"positionTicks":[]},{"id":76,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[77],"positionTicks":[]},{"id":77,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":0,"children":[78],"positionTicks":[]},{"id":78,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[79],"positionTicks":[]},{"id":79,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":63,"callFrame":{"functionName":"object","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73028,"columnNumber":15},"hitCount":0,"children":[64],"positionTicks":[]},{"id":64,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":1,"children":[65],"positionTicks":[{"line":62574,"ticks":1}]},{"id":65,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[66],"positionTicks":[]},{"id":66,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73009,"columnNumber":58},"hitCount":1,"children":[67],"positionTicks":[{"line":73025,"ticks":1}]},{"id":67,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[68],"positionTicks":[{"line":62549,"ticks":1}]},{"id":68,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72526,"ticks":1}]},{"id":55,"callFrame":{"functionName":"inst.default","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72562,"columnNumber":17},"hitCount":0,"children":[56],"positionTicks":[]},{"id":56,"callFrame":{"functionName":"_default2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73333,"columnNumber":18},"hitCount":0,"children":[57],"positionTicks":[]},{"id":57,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[58],"positionTicks":[]},{"id":58,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[59],"positionTicks":[]},{"id":59,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73327,"columnNumber":60},"hitCount":0,"children":[60],"positionTicks":[]},{"id":60,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[61],"positionTicks":[]},{"id":61,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65462,"columnNumber":62},"hitCount":0,"children":[62],"positionTicks":[]},{"id":62,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":62555,"ticks":1}]},{"id":37,"callFrame":{"functionName":"inst.nullish","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72556,"columnNumber":17},"hitCount":0,"children":[38,121],"positionTicks":[]},{"id":121,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73304,"columnNumber":17},"hitCount":0,"children":[122],"positionTicks":[]},{"id":122,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[123],"positionTicks":[]},{"id":123,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[124],"positionTicks":[]},{"id":124,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73299,"columnNumber":62},"hitCount":0,"children":[125],"positionTicks":[]},{"id":125,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65424,"columnNumber":64},"hitCount":1,"children":[],"positionTicks":[{"line":65425,"ticks":1}]},{"id":38,"callFrame":{"functionName":"nullable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73316,"columnNumber":17},"hitCount":0,"children":[39],"positionTicks":[]},{"id":39,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[40],"positionTicks":[]},{"id":40,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[41],"positionTicks":[]},{"id":41,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73311,"columnNumber":62},"hitCount":0,"children":[42],"positionTicks":[]},{"id":42,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[43],"positionTicks":[]},{"id":43,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":65445,"columnNumber":64},"hitCount":0,"children":[44],"positionTicks":[]},{"id":44,"callFrame":{"functionName":"defineLazy","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62730,"columnNumber":19},"hitCount":1,"children":[],"positionTicks":[{"line":62733,"ticks":1}]},{"id":31,"callFrame":{"functionName":"_null3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72941,"columnNumber":15},"hitCount":0,"children":[32],"positionTicks":[]},{"id":32,"callFrame":{"functionName":"_null2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":71041,"columnNumber":15},"hitCount":0,"children":[33],"positionTicks":[]},{"id":33,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[34],"positionTicks":[]},{"id":34,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[35],"positionTicks":[]},{"id":35,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72937,"columnNumber":54},"hitCount":0,"children":[36],"positionTicks":[]},{"id":36,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":62549,"ticks":1}]},{"id":30,"callFrame":{"functionName":"inst.min","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72994,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":72995,"ticks":1}]},{"id":21,"callFrame":{"functionName":"number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72848,"columnNumber":16},"hitCount":0,"children":[22],"positionTicks":[]},{"id":22,"callFrame":{"functionName":"_number","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":70910,"columnNumber":16},"hitCount":0,"children":[23],"positionTicks":[]},{"id":23,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[24],"positionTicks":[]},{"id":24,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[25],"positionTicks":[]},{"id":25,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72823,"columnNumber":58},"hitCount":0,"children":[26],"positionTicks":[]},{"id":26,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[27,70],"positionTicks":[{"line":62555,"ticks":1}]},{"id":70,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72573,"ticks":1}]},{"id":27,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64482,"columnNumber":60},"hitCount":0,"children":[28],"positionTicks":[]},{"id":28,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[29],"positionTicks":[]},{"id":29,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64082,"columnNumber":56},"hitCount":0,"children":[],"positionTicks":[]},{"id":13,"callFrame":{"functionName":"inst.meta","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72578,"columnNumber":14},"hitCount":1,"children":[14,69],"positionTicks":[{"line":72581,"ticks":1}]},{"id":69,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":70581,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":14,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72540,"columnNumber":15},"hitCount":0,"children":[15],"positionTicks":[]},{"id":15,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62884,"columnNumber":14},"hitCount":0,"children":[16],"positionTicks":[]},{"id":16,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":0,"children":[17],"positionTicks":[]},{"id":17,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[18],"positionTicks":[]},{"id":18,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":73299,"columnNumber":62},"hitCount":0,"children":[19],"positionTicks":[]},{"id":19,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[20],"positionTicks":[]},{"id":20,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72563,"ticks":1}]},{"id":10,"callFrame":{"functionName":"string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72643,"columnNumber":16},"hitCount":0,"children":[11],"positionTicks":[]},{"id":11,"callFrame":{"functionName":"_string","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":70625,"columnNumber":16},"hitCount":0,"children":[12],"positionTicks":[]},{"id":12,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62570,"columnNumber":13},"hitCount":1,"children":[45],"positionTicks":[{"line":62576,"ticks":1}]},{"id":45,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[46],"positionTicks":[]},{"id":46,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72612,"columnNumber":58},"hitCount":1,"children":[47],"positionTicks":[{"line":72614,"ticks":1}]},{"id":47,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":1,"children":[48,80],"positionTicks":[{"line":62549,"ticks":1}]},{"id":80,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[81],"positionTicks":[]},{"id":81,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":63483,"columnNumber":36},"hitCount":1,"children":[],"positionTicks":[{"line":63486,"ticks":1}]},{"id":48,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72590,"columnNumber":60},"hitCount":1,"children":[49],"positionTicks":[{"line":72605,"ticks":1}]},{"id":49,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[50,458],"positionTicks":[]},{"id":458,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":72524,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":72562,"ticks":1}]},{"id":50,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64166,"columnNumber":60},"hitCount":0,"children":[51],"positionTicks":[]},{"id":51,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62546,"columnNumber":16},"hitCount":0,"children":[52],"positionTicks":[]},{"id":52,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":64082,"columnNumber":56},"hitCount":0,"children":[53],"positionTicks":[]},{"id":53,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[54],"positionTicks":[]},{"id":54,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":8,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":56893,"columnNumber":37},"hitCount":0,"children":[9],"positionTicks":[]},{"id":9,"callFrame":{"functionName":"pgTableWithSchema","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":56859,"columnNumber":26},"hitCount":1,"children":[],"positionTicks":[{"line":56880,"ticks":1}]},{"id":7,"callFrame":{"functionName":"array","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":53995,"columnNumber":7},"hitCount":1,"children":[],"positionTicks":[{"line":53997,"ticks":1}]},{"id":6,"callFrame":{"functionName":"$constructor","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":62545,"columnNumber":21},"hitCount":1,"children":[],"positionTicks":[{"line":62565,"ticks":1}]},{"id":4,"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":73,"children":[],"positionTicks":[]},{"id":3,"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":6,"children":[],"positionTicks":[]},{"id":2,"callFrame":{"functionName":"(idle)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[],"positionTicks":[]}],"startTime":431429882530,"endTime":431430244611,"samples":[2,3,3,3,3,4,5,3,6,7,9,12,4,20,29,30,5,4,36,44,4,54,62,3,5,5,5,5,5,68,64,69,70,4,4,79,81,90,91,46,97,4,4,4,26,13,98,103,112,110,113,120,48,125,129,130,130,130,138,5,143,149,154,155,156,163,165,172,184,188,210,4,4,4,4,212,216,5,220,218,5,222,229,233,243,251,4,4,4,4,4,259,267,275,283,288,294,300,304,310,267,5,300,259,311,317,323,326,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,329,333,339,343,314,352,357,363,366,66,5,373,375,377,385,388,396,5,409,407,410,413,415,424,430,438,67,447,451,457,47,450,458,462,450,5,4,4,4,4,4,4,4,4],"timeDeltas":[92364,1565,1500,1505,1507,1502,1505,1504,1508,1496,1508,1497,1512,1493,354,1150,1494,1512,1497,1500,1497,1505,1503,1394,1509,1504,1504,1507,1517,1493,1188,1182,72,1512,1501,1121,381,841,5,646,1503,1511,1501,1502,1503,1501,1501,1510,1051,11,430,1497,1503,1502,1504,1503,611,301,590,1493,1505,1498,1506,1495,1506,1499,1505,1493,1506,1498,1507,1499,1514,1499,1503,1504,1502,1490,1383,1501,1505,1501,1504,1502,130,1370,1256,1509,1504,1512,1509,1502,1502,1494,1504,1497,1501,1498,1507,1496,1514,1066,1258,1375,1499,1508,1501,1509,1500,1505,1506,1507,1506,1504,1507,1507,1504,1504,1504,1503,1506,1509,1503,1407,1505,1506,1503,1503,1504,1505,1504,1507,1507,1508,1508,1506,1504,1507,1505,1503,1502,1505,1505,1503,1506,1508,1503,1508,1507,1505,1502,1496,1508,1504,1506,1512,1507,1496,1508,1500,1500,1511,1498,1504,1506,1506,1499,1140,146,220,200,205,1086,1174,11,4,197,1493,1507,1494,1510,1402,1505,962,534,1499,1097,408,947,554,1499,1502,1507,1504,1504,1505,1507,1507,1503]} \ No newline at end of file diff --git a/vite/.env.example b/vite/.env.example index 4c54df38a..a6106e213 100644 --- a/vite/.env.example +++ b/vite/.env.example @@ -1,2 +1,3 @@ VITE_FRONTEND_URL=https://autumn-api.bowong.cc VITE_BACKEND_URL=https://autumn-api.bowong.cc +AUTUMN_API_KEY=sk_test_51SBUgtGv9HLu1VZC7T2KRIfwcmcxlUmodws3pddPIUDtgOI5998PTHenfEOkzXBuk88lFKGP1ZxPIya7GZgDAjBN00vLLZoZTW \ No newline at end of file diff --git a/vite/src/app/OnboardingLayout.tsx b/vite/src/app/OnboardingLayout.tsx index 115f33f77..e2bf0e3e3 100644 --- a/vite/src/app/OnboardingLayout.tsx +++ b/vite/src/app/OnboardingLayout.tsx @@ -33,6 +33,7 @@ export function OnboardingLayout() { "$1", )} includeCredentials={true} + useBetterAuth={true} >
@@ -54,6 +55,7 @@ export function OnboardingLayout() { "$1", )} includeCredentials={true} + useBetterAuth={true} >
diff --git a/vite/src/app/layout.tsx b/vite/src/app/layout.tsx index e17bd7119..f16164bf3 100644 --- a/vite/src/app/layout.tsx +++ b/vite/src/app/layout.tsx @@ -73,6 +73,7 @@ export function MainLayout() {
@@ -100,6 +101,7 @@ export function MainLayout() { backendUrl={import.meta.env.VITE_BACKEND_URL} // backendUrl="http://localhost:8080" includeCredentials={true} + useBetterAuth={true} >