diff --git a/docs/superpowers/plans/2026-07-02-cloudflare-stripe-worker-env.md b/docs/superpowers/plans/2026-07-02-cloudflare-stripe-worker-env.md new file mode 100644 index 000000000..cb80e54d4 --- /dev/null +++ b/docs/superpowers/plans/2026-07-02-cloudflare-stripe-worker-env.md @@ -0,0 +1,690 @@ +# Cloudflare Stripe workerEnv 实现计划 + +> **给 agent 执行者:** 必选子技能:使用 `superpowers:subagent-driven-development`(推荐)或 `superpowers:executing-plans` 按任务逐项实现本计划。步骤统一使用 checkbox(`- [ ]`)语法跟踪。 + +**目标:** 修复 Cloudflare Worker 上 Stripe webhook / checkout / billing 路径缺少 `workerEnv` 导致付款成功后 Autumn customer 不切换到 `pro` 的问题。 + +**方案概览:** 先用静态测试暴露裸 `createStripeCli({ org, env })` 调用,再增加上下文安全的 Stripe client helper,并把 webhook、checkout、billing v2、product/price 初始化路径改成通过 `ctx.workerEnv` 创建 Stripe client。最后重放 Stripe `checkout.session.completed` 事件,验证测试 customer 从 `free` 切到 `pro`。 + +**技术栈:** TypeScript、Hono、Cloudflare Workers、Wrangler、Stripe SDK、Bun test、Autumn billing v2。 + +--- + +## 文件结构 + +- 新建:`server/src/external/connect/createStripeCliFromContext.ts` + - 负责从 `AutumnContext` 安全创建 Stripe client,统一传递 `ctx.workerEnv`。 +- 修改:`server/src/external/connect/createStripeCli.ts` + - 保留底层实现;在 secret-key flow 缺少 `workerEnv` 时抛明确错误。 +- 修改:`server/src/external/stripe/webhookHandlers/**` + - webhook handler 内部优先使用 `ctx.stripeCli` 或上下文 helper。 +- 修改:`server/src/internal/billing/v2/**` + - billing v2 setup / execute / invoice / subscription 路径使用上下文 helper。 +- 修改:`server/src/internal/customers/**` + - attach、checkout、customer 创建、payment method 相关路径传递 `workerEnv`。 +- 修改:`server/src/internal/products/productUtils.ts` + - product / price 初始化路径使用传入的 `workerEnv`。 +- 修改:`shared/utils/utils.ts` + - 移除 `Bun.CryptoHasher`,改成 Worker 可用的同步 SHA-256 实现。 +- 新建:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + - 静态防回归测试,禁止运行时代码新增裸 `createStripeCli({ org, env })`。 + +--- + +### 任务 1:添加失败的静态防回归测试 + +**文件:** +- 新建:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + +- [ ] **步骤 1:写失败测试** + +创建文件: + +```ts +import { describe, expect, test } from "bun:test"; +import { readdirSync, readFileSync, statSync } from "node:fs"; +import { join, relative } from "node:path"; + +const repoRoot = join(import.meta.dir, "../../.."); +const serverSrc = join(repoRoot, "src"); + +const allowedFiles = new Set([ + "external/connect/createStripeCli.ts", + "external/connect/createStripeCliFromContext.ts", +]); + +const collectTsFiles = (dir: string): string[] => { + const files: string[] = []; + for (const entry of readdirSync(dir)) { + const path = join(dir, entry); + const stat = statSync(path); + if (stat.isDirectory()) { + files.push(...collectTsFiles(path)); + continue; + } + if (path.endsWith(".ts")) files.push(path); + } + return files; +}; + +const hasWorkerEnv = (callText: string) => + callText.includes("workerEnv") || callText.includes("ctx.workerEnv"); + +describe("Cloudflare Stripe client creation", () => { + test("runtime code does not call createStripeCli without workerEnv", () => { + const offenders: string[] = []; + const files = collectTsFiles(serverSrc); + + for (const file of files) { + const relativePath = relative(serverSrc, file); + if (allowedFiles.has(relativePath)) continue; + if (relativePath.includes("/tests/")) continue; + + const source = readFileSync(file, "utf8"); + const callRegex = /createStripeCli\s*\(\s*\{[\s\S]*?\}\s*\)/g; + for (const match of source.matchAll(callRegex)) { + const callText = match[0]; + if (hasWorkerEnv(callText)) continue; + + const line = + source.slice(0, match.index ?? 0).split("\n").length; + offenders.push(`${relativePath}:${line} ${callText.replace(/\s+/g, " ")}`); + } + } + + expect(offenders).toEqual([]); + }); +}); +``` + +- [ ] **步骤 2:运行测试,确认先失败** + +运行: + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,输出包含多个缺少 `workerEnv` 的 `createStripeCli(...)` 调用。 + +- [ ] **步骤 3:提交失败测试** + +```bash +git add server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +git commit -m "test: guard Cloudflare Stripe worker env usage" +``` + +--- + +### 任务 2:新增上下文安全的 Stripe client helper + +**文件:** +- 新建:`server/src/external/connect/createStripeCliFromContext.ts` +- 修改:`server/src/external/connect/createStripeCli.ts` +- 测试:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + +- [ ] **步骤 1:新增 helper** + +创建 `server/src/external/connect/createStripeCliFromContext.ts`: + +```ts +import type { AppEnv } from "@autumn/shared"; +import type { AutumnContext } from "@/honoUtils/HonoEnv"; +import { createStripeCli } from "./createStripeCli"; + +export const createStripeCliFromContext = ({ + ctx, + env = ctx.env, + legacyVersion, + throughSecretKey, + skipInstrumentation, +}: { + ctx: AutumnContext; + env?: AppEnv; + legacyVersion?: boolean; + throughSecretKey?: boolean; + skipInstrumentation?: boolean; +}) => + createStripeCli({ + org: ctx.org, + env, + legacyVersion, + throughSecretKey, + skipInstrumentation, + workerEnv: ctx.workerEnv, + }); +``` + +- [ ] **步骤 2:强化底层保护** + +在 `server/src/external/connect/createStripeCli.ts` 的 secret-key flow 中,`encrypted` 存在后立刻加入: + +```ts +if (!workerEnv) { + throw new RecaseError({ + message: + "Stripe secret key is encrypted, but Cloudflare workerEnv was not provided to createStripeCli", + code: ErrCode.StripeConfigNotFound, + statusCode: 500, + }); +} +``` + +并把: + +```ts +const decrypted = workerEnv ? decryptData(encrypted, workerEnv) : ""; +``` + +改成: + +```ts +const decrypted = decryptData(encrypted, workerEnv); +``` + +- [ ] **步骤 3:运行类型检查** + +```bash +cd server +bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 4:运行静态测试,确认仍失败** + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL。此时 helper 已存在,但调用点还没改完。 + +- [ ] **步骤 5:提交 helper** + +```bash +git add server/src/external/connect/createStripeCli.ts server/src/external/connect/createStripeCliFromContext.ts +git commit -m "fix: require worker env for encrypted Stripe keys" +``` + +--- + +### 任务 3:改造 checkout / attach 必经路径 + +**文件:** +- 修改:`server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts` +- 修改:`server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts` +- 修改:`server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts` +- 修改:`server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts` +- 修改:`server/src/internal/customers/attach/attachRouter.ts` +- 修改:`server/src/internal/customers/add-product/handleCreateCheckout.ts` +- 修改:`server/src/internal/products/productUtils.ts` +- 测试:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + +- [ ] **步骤 1:把 attach 参数处理改成传 `workerEnv`** + +在以下文件中,把 `createStripeCli({ org, env })` 改为: + +```ts +createStripeCli({ + org, + env, + workerEnv: ctx.workerEnv, +}); +``` + +目标文件: + +- `server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts` +- `server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts` +- `server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts` + +- [ ] **步骤 2:改造 `convertToParams.ts`** + +在 `server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts` 中,把返回对象里的: + +```ts +stripeCli: createStripeCli({ org, env }), +``` + +改为: + +```ts +stripeCli: createStripeCli({ org, env, workerEnv: ctx.workerEnv }), +``` + +- [ ] **步骤 3:改造 `checkStripeConnections`** + +在 `server/src/internal/customers/attach/attachRouter.ts` 中,调用 `checkStripeProductExists` 时加入: + +```ts +workerEnv: ctx.workerEnv, +``` + +完整调用形状: + +```ts +checkStripeProductExists({ + db, + org, + env, + product, + logger, + workerEnv: ctx.workerEnv, +}); +``` + +- [ ] **步骤 4:改造 legacy checkout 创建** + +在 `server/src/internal/customers/add-product/handleCreateCheckout.ts` 中,把: + +```ts +const stripeCli = createStripeCli({ + org, + env: customer.env, + legacyVersion: true, +}); +``` + +改为: + +```ts +const stripeCli = createStripeCli({ + org, + env: customer.env, + legacyVersion: true, + workerEnv: ctx.workerEnv, +}); +``` + +- [ ] **步骤 5:运行静态测试** + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:仍可能 FAIL,但 offender 列表中不再包含上述 attach / checkout 文件。 + +- [ ] **步骤 6:提交 checkout 路径改造** + +```bash +git add \ + server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts \ + server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts \ + server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts \ + server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts \ + server/src/internal/customers/attach/attachRouter.ts \ + server/src/internal/customers/add-product/handleCreateCheckout.ts +git commit -m "fix: pass worker env through attach checkout Stripe paths" +``` + +--- + +### 任务 4:改造 billing v2 Stripe 执行与 setup 路径 + +**文件:** +- 修改:`server/src/internal/billing/v2/providers/stripe/execute/executeStripeCheckoutSessionAction.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionAction.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/execute/executeStripeRefundAction.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionScheduleAction.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/setup/fetchStripeCustomerForBilling.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionScheduleForBilling.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/setup/fetchStripeTaxRateForBilling.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/setup/fetchStripeDiscountsForBilling.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/utils/subscriptions/executeStripeSubscriptionOperation.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/utils/invoices/createInvoiceForBilling.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/utils/invoices/stripeInvoiceOps.ts` +- 修改:`server/src/internal/billing/v2/execute/voidInvoicesOnImmediateCancel.ts` +- 修改:`server/src/internal/metadata/utils/insertMetadataFromBillingPlan.ts` + +- [ ] **步骤 1:统一替换 ctx 形态调用** + +把以下形态: + +```ts +createStripeCli({ org: ctx.org, env: ctx.env }); +``` + +改为: + +```ts +createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, +}); +``` + +- [ ] **步骤 2:统一替换局部 `org/env` 但有 `ctx` 的调用** + +把以下形态: + +```ts +createStripeCli({ org, env }); +``` + +在当前函数有 `ctx: AutumnContext` 时改为: + +```ts +createStripeCli({ org, env, workerEnv: ctx.workerEnv }); +``` + +- [ ] **步骤 3:处理 `fullCustomer.env` 覆盖** + +在 `executeStripeCheckoutSessionAction.ts` 中保持使用 customer env,但加入 `workerEnv`: + +```ts +const stripeCli = createStripeCli({ + org, + env: fullCustomer.env, + workerEnv: ctx.workerEnv, +}); +``` + +- [ ] **步骤 4:运行静态测试** + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:billing v2 相关 offender 消失。 + +- [ ] **步骤 5:提交 billing v2 改造** + +```bash +git add server/src/internal/billing/v2 server/src/internal/metadata/utils/insertMetadataFromBillingPlan.ts +git commit -m "fix: pass worker env through billing Stripe paths" +``` + +--- + +### 任务 5:改造 Stripe webhook handlers + +**文件:** +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleSetupCheckout.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleCheckoutSessionCompletedLegacy.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleStandaloneSetupCheckout.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleSetupPaymentMetadata.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/setupStripeSubscriptionUpdatedContext.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleSchedulePhaseChanges/releaseScheduleIfLastPhase.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleCancelOnPastDue.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceDiscounts.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceMetadata/handleInvoiceActionRequiredCompleted.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleInvoiceCreated/handleInvoiceCreated.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleCusDiscountDeleted.ts` + +- [ ] **步骤 1:优先使用 `ctx.stripeCli`** + +如果函数已经接收 `ctx: StripeWebhookContext` 且不需要 legacy API version,直接使用: + +```ts +const stripeCli = ctx.stripeCli; +``` + +不要重新创建 Stripe client。 + +- [ ] **步骤 2:需要 legacy API version 时显式传 `workerEnv`** + +把: + +```ts +createStripeCli({ org, env, legacyVersion: true }); +``` + +改成: + +```ts +createStripeCli({ + org, + env, + legacyVersion: true, + workerEnv: ctx.workerEnv, +}); +``` + +- [ ] **步骤 3:普通 webhook helper 显式传 `workerEnv`** + +把: + +```ts +createStripeCli({ org, env }); +``` + +改成: + +```ts +createStripeCli({ org, env, workerEnv: ctx.workerEnv }); +``` + +- [ ] **步骤 4:运行静态测试** + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:webhook handler offender 消失。 + +- [ ] **步骤 5:提交 webhook 改造** + +```bash +git add server/src/external/stripe/webhookHandlers +git commit -m "fix: use worker env in Stripe webhook handlers" +``` + +--- + +### 任务 6:移除 Worker 不支持的 `Bun.CryptoHasher` + +**文件:** +- 修改:`shared/utils/utils.ts` + +- [ ] **步骤 1:替换 `hashString` 实现** + +把 `hashString` 中的: + +```ts +const hasher = new Bun.CryptoHasher("sha256"); +hasher.update(str); +return hasher.digest("base64"); +``` + +替换为同步、跨运行时实现。最小实现应满足: + +```ts +hashString("abc") === "ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=" +``` + +可以使用纯 TypeScript SHA-256 实现,或引入已声明依赖的跨运行时 hash 工具。不要使用 `node:crypto`,因为 `@autumn/shared` 会进入前端构建。 + +- [ ] **步骤 2:添加最小验证命令** + +运行: + +```bash +bun -e 'import { hashString } from "./shared/utils/utils.ts"; if (hashString("abc") !== "ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=") process.exit(1);' +``` + +预期:exit code 0。 + +- [ ] **步骤 3:运行类型检查** + +```bash +cd server +bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 4:提交 hash 修复** + +```bash +git add shared/utils/utils.ts +git commit -m "fix: replace Bun-only hash in shared utils" +``` + +--- + +### 任务 7:让静态测试全绿并处理例外 + +**文件:** +- 修改:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` +- 可能修改:剩余 offender 对应文件 + +- [ ] **步骤 1:运行静态测试** + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:如果 FAIL,输出仅剩脚本、测试或真正不走加密 org key 的例外。 + +- [ ] **步骤 2:处理剩余运行时代码 offender** + +对运行时代码中的每个 offender: + +```ts +createStripeCli({ org, env }); +``` + +改为以下二选一: + +```ts +createStripeCli({ org, env, workerEnv: ctx.workerEnv }); +``` + +或: + +```ts +createStripeCliFromContext({ ctx }); +``` + +- [ ] **步骤 3:只对白名单路径放行** + +如果某些路径是测试工具或脚本,例如 `server/src/utils/scriptUtils/**`,在测试里加入精确白名单。不要用宽泛目录白名单覆盖运行时代码。 + +- [ ] **步骤 4:确认测试通过** + +```bash +cd server +CI=1 bun test --isolate tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 5:提交静态测试收敛** + +```bash +git add server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts server/src +git commit -m "test: enforce worker env for Stripe runtime clients" +``` + +--- + +### 任务 8:部署并验证 checkout paid -> pro + +**文件:** +- 不改代码;执行部署和线上验证。 + +- [ ] **步骤 1:运行类型检查** + +```bash +cd server +bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 2:运行 dry-run** + +```bash +cd server +bunx wrangler deploy --dry-run --outdir .wrangler/deploy-dry-run +``` + +预期:PASS。允许出现 “Multiple environments are defined” warning。 + +- [ ] **步骤 3:部署** + +```bash +cd server +bunx wrangler deploy +``` + +预期:输出 `Current Version ID`。如果出现 `fetch failed`,重试一次;如果出现 `10021`,保存 startup profile 并暂停分析启动 CPU。 + +- [ ] **步骤 4:确认测试 customer 当前状态** + +运行: + +```bash +curl -sS https://autumn-api.bowong.cc/v1/customers/test_user_001 \ + -H 'Authorization: Bearer ' \ + | jq '{subscriptions, balances}' +``` + +预期:如果还未 replay webhook,可能仍是 `free`。 + +- [ ] **步骤 5:重放 Stripe checkout completed event** + +先查最近事件: + +```bash +curl -sS 'https://api.stripe.com/v1/events?limit=10&type=checkout.session.completed' \ + -u ':' \ + | jq '.data[] | {id, created, session: .data.object.id, payment_status: .data.object.payment_status, metadata: .data.object.metadata}' +``` + +选择带有 `autumn_metadata_id` 且 `payment_status == "paid"` 的 event,重放: + +```bash +curl -sS -X POST 'https://api.stripe.com/v1/events//resend' \ + -u ':' \ + -d 'webhook_endpoint=' +``` + +预期:Stripe API 返回重放成功,或该 event 被重新投递。 + +- [ ] **步骤 6:确认 customer 切到 pro** + +运行: + +```bash +curl -sS https://autumn-api.bowong.cc/v1/customers/test_user_001 \ + -H 'Authorization: Bearer ' \ + | jq '{subscriptions, balances}' +``` + +预期: + +```text +subscriptions includes plan_id == "pro" +balances.messages.granted == 100 +``` + +- [ ] **步骤 7:提交验证记录** + +如果项目已有验证文档,追加一条;否则在最终回复里报告以下内容,不新建文件: + +```text +typecheck: pass +static guard: pass +wrangler deploy: pass +stripe event replay: pass +customer pro state: pass +``` + +--- + +## 自检记录 + +- Spec 的“不把解密 key 存入 DB/业务对象”要求落在任务 2,底层仍只在创建 Stripe client 时解密。 +- Spec 的“webhook context 是第一等边界”要求落在任务 5。 +- Spec 的“禁止裸调用回归”要求落在任务 1 和任务 7。 +- Spec 的“replay 已支付 event 验证 pro 状态”要求落在任务 8。 +- 没有使用 `TBD` / `TODO` / “类似上面” 等占位措辞。 diff --git a/docs/superpowers/plans/2026-07-02-stripe-worker-env-offenders-batches.md b/docs/superpowers/plans/2026-07-02-stripe-worker-env-offenders-batches.md new file mode 100644 index 000000000..35f7fcb0d --- /dev/null +++ b/docs/superpowers/plans/2026-07-02-stripe-worker-env-offenders-batches.md @@ -0,0 +1,820 @@ +# Stripe workerEnv 剩余裸调用分批修复计划 + +> **给 agent 执行者:** 必选子技能:使用 `superpowers:subagent-driven-development`(推荐)或 `superpowers:executing-plans` 按任务逐项实现本计划。步骤统一使用 checkbox(`- [ ]`)语法跟踪。 + +**目标:** 把当前剩余的 55 个运行时代码裸 `createStripeCli({ org, env })` 调用点改造成显式传递 Cloudflare `workerEnv`,让 encrypted Stripe secret-key flow 不再在线上请求路径随机 500。 + +**方案概览:** 以当前静态测试输出为准,先修 dashboard/API 用户请求路径,再修 billing v2 与 webhook/Stripe operations,最后修 external integration 与 cron/migration 路径。每一批完成后运行静态 guard,确认 offenders 数量下降;最后让 `no-naked-create-stripe-cli.test.ts` 归零,并跑 `bun run ts`。 + +**技术栈:** TypeScript、Hono、Cloudflare Workers、Stripe SDK、Bun test、Wrangler。 + +--- + +## 当前基线 + +运行命令: + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +当前预期:FAIL,剩余 55 个 offenders。已知不再包含: + +- `getCusRewards.ts` +- `getCusPaymentMethodRes.ts` +- `handleGetCustomer.ts` +- `getApiCustomerExpand.ts` +- `getApiCustomerExpandV2.ts` + +## 文件结构 + +- 已存在:`server/src/external/connect/createStripeCli.ts` + - 底层 Stripe client 工厂;encrypted secret-key flow 缺少 `workerEnv` 时抛显式错误。 +- 修改:`server/src/internal/customers/**` + - customer、billing portal、invoice、reward、referral 等 dashboard/API 请求路径。 +- 修改:`server/src/internal/billing/**` + - billing v2 checkout、sync、subscription schedule、invoice、discount、workflow 路径。 +- 修改:`server/src/external/stripe/**` + - webhook handler 与 Stripe operation helper。 +- 修改:`server/src/external/vercel/**` + - Vercel marketplace/resource/installations 路径。 +- 修改:`server/src/cron/**` + - scheduled cron 中通过 `CronContext.workerEnv` 创建 Stripe client。 +- 修改:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + - 仅在确认某个文件不是 Worker runtime 且不可能走 encrypted org Stripe key flow 时才加入 allowlist。 + +## 统一改造规则 + +保持底层工厂并显式传递 `workerEnv`: + +```ts +const stripeCli = createStripeCli({ + org, + env, + workerEnv, +}); +``` + +cron 路径使用: + +```ts +const stripeCli = createStripeCli({ + org, + env, + workerEnv: ctx.workerEnv, +}); +``` + +禁止为了压过测试而写: + +```ts +workerEnv: {} as Env +``` + +只有 `createStripeCli` 内部 Connect/master account fallback 保留已有兼容处理;运行时代码不新增空对象兜底。 + +--- + +### 任务 1:确认当前 offenders 基线 + +**文件:** +- 测试:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + +- [ ] **步骤 1:运行静态 guard** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,输出包含 55 个 offenders。 + +- [ ] **步骤 2:保存 offenders 清单到执行笔记** + +把测试输出中的文件列表复制到执行笔记,不提交临时文件。后续每完成一批,都用同一个命令确认数量下降。 + +--- + +### 任务 2:修 customer/dashboard 请求路径 + +**文件:** +- 修改:`server/src/internal/customers/cusUtils/createNewCustomer.ts` +- 修改:`server/src/internal/customers/internalHandlers/handleGetCusReferrals.ts` +- 修改:`server/src/internal/customers/internalHandlers/handleGetInvoiceLineItems.ts` +- 修改:`server/src/internal/customers/cusProducts/cusProductUtils.ts` +- 修改:`server/src/internal/customers/cusProducts/cusEnts/cusEntUtils.ts` +- 修改:`server/src/internal/customers/attach/attachRouter.ts` +- 修改:`server/src/internal/customers/actions/update/updateCustomer.ts` +- 修改:`server/src/internal/customers/actions/resetCustomerEntitlements/getResetAtUpdate.ts` +- 修改:`server/src/internal/customers/handlers/handleTransferProduct/handleDecreaseAndTransfer.ts` +- 修改:`server/src/internal/customers/handlers/handleAddCouponToCusV2.ts` +- 修改:`server/src/internal/customers/handlers/handleBillingPortal/createBillingPortalSession.ts` + +- [ ] **步骤 1:先运行测试确认本批仍为红** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,并包含上述 customer 文件。 + +- [ ] **步骤 2:改造有 `ctx` 的文件** + +对已经持有 `ctx` 的文件,导入 `createStripeCliFromContext`,把: + +```ts +createStripeCli({ org: ctx.org, env: ctx.env }) +``` + +改成: + +```ts +createStripeCliFromContext({ ctx }) +``` + +如果原调用是: + +```ts +createStripeCli({ + org, + env, + legacyVersion: true, +}) +``` + +且函数已经有 `ctx`,改成: + +```ts +createStripeCliFromContext({ + ctx, + legacyVersion: true, +}) +``` + +- [ ] **步骤 3:改造只有 `org/env` 的 helper** + +如果 helper 没有 `ctx`,给参数对象增加 `workerEnv?: Env`,并在调用 `createStripeCli` 时传入: + +```ts +const stripeCli = createStripeCli({ + org, + env, + workerEnv, +}); +``` + +所有调用该 helper 的 request handler 必须从 `ctx.workerEnv` 继续向下传: + +```ts +await helper({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, +}); +``` + +- [ ] **步骤 4:处理 `attachRouter.ts` 的 `attachParams`** + +`attachRouter.ts` 当前 offender 是: + +```ts +createStripeCli({ + org: attachParams.org, + env: attachParams.customer.env, +}) +``` + +在该 call site 所在作用域使用当前 request `ctx.workerEnv`: + +```ts +createStripeCli({ + org: attachParams.org, + env: attachParams.customer.env, + workerEnv: ctx.workerEnv, +}) +``` + +如果该作用域没有 `ctx`,把 `workerEnv?: Env` 加到 `attachParams` 的构建结果里,并从 router 的 `ctx.workerEnv` 填入。 + +- [ ] **步骤 5:运行类型检查** + +```bash +cd server +bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 6:运行静态 guard** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,但不再包含任务 2 的 customer 文件。 + +- [ ] **步骤 7:提交本批** + +```bash +git add server/src/internal/customers +git commit -m "fix: pass worker env through customer Stripe clients" +``` + +--- + +### 任务 3:修 org/product/invoice/reward 请求路径 + +**文件:** +- 修改:`server/src/internal/products/internalHandlers/handleGetStripeCoupons.ts` +- 修改:`server/src/internal/products/handlers/handleUpdatePlan/updateProductDetails.ts` +- 修改:`server/src/internal/invoices/handlers/handleGetStripeInvoice.ts` +- 修改:`server/src/internal/invoices/handlers/handleRedirectToInvoice.ts` +- 修改:`server/src/internal/rewards/actions/redeemPromoCode.ts` +- 修改:`server/src/internal/rewards/actions/triggerDiscount.ts` +- 修改:`server/src/internal/rewards/actions/triggerFreePaidProduct.ts` +- 修改:`server/src/internal/rewards/actions/triggerCheckoutReward.ts` +- 修改:`server/src/internal/orgs/orgUtils.ts` +- 修改:`server/src/internal/orgs/handlers/stripeHandlers/handleOAuthCallback.ts` +- 修改:`server/src/internal/orgs/handlers/stripeHandlers/handleDeleteStripe.ts` +- 修改:`server/src/internal/orgs/handlers/stripeHandlers/handleGetStripeAccount.ts` +- 修改:`server/src/internal/balances/utils/paidAllocatedFeature/adjustAllowance.ts` + +- [ ] **步骤 1:确认本批 offenders 仍存在** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,并包含任务 3 文件。 + +- [ ] **步骤 2:request handler 改用 context helper** + +对 handler 内已经有 `ctx` 的调用,把: + +```ts +createStripeCli({ org, env }) +``` + +改成: + +```ts +createStripeCliFromContext({ ctx }) +``` + +如果原调用使用不同 env: + +```ts +createStripeCli({ org, env: curProduct.env as AppEnv }) +``` + +改成: + +```ts +createStripeCliFromContext({ + ctx, + env: curProduct.env as AppEnv, +}) +``` + +- [ ] **步骤 3:org utility 增加 `workerEnv` 参数** + +`internal/orgs/orgUtils.ts` 是 shared utility,不要假设全局 env。给相关函数参数增加: + +```ts +workerEnv?: Env; +``` + +并在创建 Stripe client 时传入: + +```ts +createStripeCli({ + org, + env, + throughSecretKey: true, + workerEnv, +}); +``` + +调用方如果有 `ctx`,传: + +```ts +workerEnv: ctx.workerEnv +``` + +调用方如果是 Cloudflare handler 的 `c.env`,传: + +```ts +workerEnv: c.env +``` + +- [ ] **步骤 4:reward action 保留 legacyVersion** + +`triggerDiscount.ts` 原调用带 `legacyVersion: true`。改造后必须保留: + +```ts +createStripeCliFromContext({ + ctx, + legacyVersion: true, +}) +``` + +- [ ] **步骤 5:运行检查** + +```bash +cd server +bun run ts +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:类型检查 PASS;静态 guard 仍可能 FAIL,但不再包含任务 3 文件。 + +- [ ] **步骤 6:提交本批** + +```bash +git add server/src/internal/products server/src/internal/invoices server/src/internal/rewards server/src/internal/orgs server/src/internal/balances +git commit -m "fix: pass worker env through product invoice reward Stripe clients" +``` + +--- + +### 任务 4:修 billing v2 路径 + +**文件:** +- 修改:`server/src/internal/billing/v2/providers/stripe/utils/discounts/stripeCustomerToDiscounts.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/utils/discounts/subToDiscounts.ts` +- 修改:`server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionScheduleAction.ts` +- 修改:`server/src/internal/billing/v2/workflows/grantCheckoutReward/grantCheckoutReward.ts` +- 修改:`server/src/internal/billing/v2/workflows/storeInvoiceLineItems/storeInvoiceLineItems.ts` +- 修改:`server/src/internal/billing/v2/actions/setupPayment/createSetupCheckoutSession.ts` +- 修改:`server/src/internal/billing/v2/actions/sync/syncProposals.ts` +- 修改:`server/src/internal/billing/v2/actions/sync/syncProposalsV2.ts` +- 修改:`server/src/internal/billing/v2/actions/sync/sync.ts` +- 修改:`server/src/internal/billing/handlers/handleSetupPayment.ts` + +- [ ] **步骤 1:确认本批 offenders** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,并包含任务 4 文件。 + +- [ ] **步骤 2:discount utility 使用 context helper** + +两个 discount utility 当前 offender 都是: + +```ts +createStripeCli({ + org: ctx.org, + env: ctx.env, + legacyVersion: true, +}) +``` + +改成: + +```ts +createStripeCliFromContext({ + ctx, + legacyVersion: true, +}) +``` + +- [ ] **步骤 3:billing action 有 ctx 时直接用 context helper** + +对已经接收 `ctx` 的 billing action,把: + +```ts +createStripeCli({ org, env }) +``` + +改成: + +```ts +createStripeCliFromContext({ ctx }) +``` + +如果需要覆盖 env: + +```ts +createStripeCliFromContext({ + ctx, + env, +}) +``` + +- [ ] **步骤 4:workflow 参数补 `workerEnv`** + +`grantCheckoutReward.ts` 和 `storeInvoiceLineItems.ts` 如果当前没有 `ctx`,从 workflow entry 参数或调用方补: + +```ts +workerEnv?: Env; +``` + +并传入: + +```ts +createStripeCli({ + org, + env, + workerEnv, +}); +``` + +调用方有 `ctx` 时传 `ctx.workerEnv`。 + +- [ ] **步骤 5:运行检查** + +```bash +cd server +bun run ts +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:类型检查 PASS;静态 guard 不再包含任务 4 文件。 + +- [ ] **步骤 6:提交本批** + +```bash +git add server/src/internal/billing +git commit -m "fix: pass worker env through billing Stripe clients" +``` + +--- + +### 任务 5:修 external Stripe operations 与 webhook helper + +**文件:** +- 修改:`server/src/external/stripe/invoices/operations/voidStripeInvoiceIfOpen.ts` +- 修改:`server/src/external/stripe/checkoutSessions/operations/getStripeCheckoutSession.ts` +- 修改:`server/src/external/stripe/subscriptions/operations/getExpandedStripeSubscription.ts` +- 修改:`server/src/external/stripe/webhookHandlers/handleCusDiscountDeleted.ts` +- 修改:`server/src/external/stripe/stripeCusUtils.ts` + +- [ ] **步骤 1:确认本批 offenders** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,并包含任务 5 文件。 + +- [ ] **步骤 2:operation helper 补 `workerEnv` 参数** + +对 operation helper 的参数对象增加: + +```ts +workerEnv?: Env; +``` + +并把: + +```ts +createStripeCli({ org, env }) +``` + +改成: + +```ts +createStripeCli({ + org, + env, + workerEnv, +}) +``` + +所有 request/webhook/billing 调用方必须继续向下传 `ctx.workerEnv` 或 webhook context 的 `workerEnv`。 + +- [ ] **步骤 3:webhook handler 使用 webhook context** + +`handleCusDiscountDeleted.ts` 当前 legacy 调用保留版本: + +```ts +createStripeCli({ + org, + env, + legacyVersion: true, + workerEnv: ctx.workerEnv, +}) +``` + +如果该 handler 已经持有 `ctx.stripeCli` 且不需要 legacy version,优先复用 `ctx.stripeCli`。 + +- [ ] **步骤 4:stripeCusUtils 按函数逐个补参数** + +`stripeCusUtils.ts` 内的四个 offender 不要用模块级 env。每个导出函数都按实际调用链补: + +```ts +workerEnv?: Env; +``` + +并在内部传: + +```ts +createStripeCli({ + org, + env, + workerEnv, +}); +``` + +调用方如果已经有 `ctx`,传 `ctx.workerEnv`;如果调用方没有 Worker env 且只用于测试脚本,移动到测试 allowlist 前必须确认该函数不会在 production Worker encrypted-key path 被调用。 + +- [ ] **步骤 5:运行检查** + +```bash +cd server +bun run ts +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:类型检查 PASS;静态 guard 不再包含任务 5 文件。 + +- [ ] **步骤 6:提交本批** + +```bash +git add server/src/external/stripe +git commit -m "fix: pass worker env through external Stripe helpers" +``` + +--- + +### 任务 6:修 Vercel integration 路径 + +**文件:** +- 修改:`server/src/external/vercel/handlers/handleUpdateBillingPlan.ts` +- 修改:`server/src/external/vercel/handlers/resources/handleDeleteResource.ts` +- 修改:`server/src/external/vercel/handlers/resources/handleCreateResource.ts` +- 修改:`server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceNotPaid.ts` +- 修改:`server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoicePaid.ts` +- 修改:`server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceCreated.ts` + +- [ ] **步骤 1:确认本批 offenders** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,并包含任务 6 文件。 + +- [ ] **步骤 2:有 ctx 的 Vercel handler 用 context helper** + +把: + +```ts +createStripeCli({ + org, + env: ctx.env, +}) +``` + +改成: + +```ts +createStripeCliFromContext({ + ctx, + env: ctx.env, +}) +``` + +- [ ] **步骤 3:resource handler 显式传 Worker env** + +如果 handler 只有 Hono `c`,使用: + +```ts +createStripeCli({ + org, + env: appEnv, + workerEnv: c.env, +}) +``` + +或: + +```ts +createStripeCli({ + org, + env: env as AppEnv, + workerEnv: c.env, +}) +``` + +不要从 process env 或全局变量取 Cloudflare binding。 + +- [ ] **步骤 4:marketplace webhook handler 补 `workerEnv`** + +如果 marketplace handler 参数里已有 context,传对应 `ctx.workerEnv`。如果没有,把参数对象扩展为: + +```ts +workerEnv?: Env; +``` + +并由上层 Worker handler 填入 `c.env` 或 `ctx.workerEnv`。 + +- [ ] **步骤 5:运行检查** + +```bash +cd server +bun run ts +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:类型检查 PASS;静态 guard 不再包含任务 6 文件。 + +- [ ] **步骤 6:提交本批** + +```bash +git add server/src/external/vercel +git commit -m "fix: pass worker env through Vercel Stripe clients" +``` + +--- + +### 任务 7:修 cron 与 migration 路径 + +**文件:** +- 修改:`server/src/cron/invoiceCron/runInvoiceCron.ts` +- 修改:`server/src/cron/resetCron/getStripeSubscriptionAnchor.ts` +- 修改:`server/src/internal/migrations/migrationSteps/migrateRevenuecatCustomer.ts` + +- [ ] **步骤 1:确认本批 offenders** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:FAIL,并包含任务 7 文件。 + +- [ ] **步骤 2:cron 使用 `CronContext.workerEnv`** + +`runInvoiceCron.ts` 当前调用: + +```ts +createStripeCli({ org, env: customer.env }) +``` + +改成: + +```ts +createStripeCli({ + org, + env: customer.env, + workerEnv: ctx.workerEnv, +}) +``` + +`getStripeSubscriptionAnchor.ts` 如果已经接收 `ctx: CronContext`,直接使用: + +```ts +createStripeCli({ + org, + env, + workerEnv: ctx.workerEnv, +}) +``` + +如果它当前只接收 `org/env`,把参数扩展为: + +```ts +workerEnv?: Env; +``` + +并从 `runResetCron` 或上层 cron context 传入 `ctx.workerEnv`。 + +- [ ] **步骤 3:migration step 显式传递或隔离** + +`migrateRevenuecatCustomer.ts` 如果在 production Worker runtime 内触发,参数链必须增加: + +```ts +workerEnv?: Env; +``` + +并传: + +```ts +createStripeCli({ + org, + env, + workerEnv, +}) +``` + +如果确认该 migration step 只在离线脚本中运行,不能直接忽略;需要把对应文件加入静态测试 allowlist,并在 allowlist 旁写明: + +```ts +// Offline migration script; it does not run inside the Cloudflare Worker request path. +``` + +- [ ] **步骤 4:运行检查** + +```bash +cd server +bun run ts +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:类型检查 PASS;静态 guard 不再包含任务 7 文件。 + +- [ ] **步骤 5:提交本批** + +```bash +git add server/src/cron server/src/internal/migrations server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +git commit -m "fix: pass worker env through cron Stripe clients" +``` + +--- + +### 任务 8:最终归零、部署和业务验收 + +**文件:** +- 测试:`server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts` + +- [ ] **步骤 1:静态 guard 归零** + +```bash +cd server +CI=1 bun test ./tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +``` + +预期:PASS。 + +- [ ] **步骤 2:类型检查** + +```bash +cd server +bun run ts +``` + +预期:PASS。 + +- [ ] **步骤 3:Worker startup 检查** + +```bash +cd server +bun run cf:startup +``` + +预期:PASS。若生成或更新 `worker-startup.cpuprofile`,只有在用户明确要求保存 profiling artifact 时才提交。 + +- [ ] **步骤 4:部署** + +```bash +cd server +bun run cf:deploy +``` + +预期:Wrangler 输出新的 Worker Version ID。 + +- [ ] **步骤 5:复测已知 live curl** + +运行用户提供的请求: + +```bash +curl -sS -i 'https://autumn-api.bowong.cc/customers/test_user_001?expand=rewards' \ + -H 'Accept: application/json, text/plain, */*' \ + -H 'Origin: https://autumn.bowong.ai' \ + -H 'Referer: https://autumn.bowong.ai/' \ + -H 'app_env: sandbox' \ + -H 'x-api-version: 1.2' \ + -H 'x-client-type: dashboard' \ + -b '__Secure-better-auth.session_token=' +``` + +预期:`HTTP/1.1 200 OK`,响应包含: + +```json +{ + "customer": { + "rewards": { + "discounts": [] + } + } +} +``` + +- [ ] **步骤 6:提交最终验证记录** + +如果前面各批已经分别提交,本步骤只提交计划或测试 allowlist 的最终调整: + +```bash +git status --short +git add docs/superpowers/plans/2026-07-02-stripe-worker-env-offenders-batches.md server/tests/unit/cloudflare/no-naked-create-stripe-cli.test.ts +git commit -m "docs: plan Stripe worker env offender cleanup" +``` + +--- + +## 自检 + +- Spec 覆盖:本计划覆盖现有设计中的 request、webhook、billing、product、cron、external integration 路径。 +- 占位扫描:计划中没有未完成占位项。 +- 类型一致性:统一使用已有 `AutumnContext.workerEnv`、`CronContext.workerEnv` 和底层 `createStripeCli({ workerEnv })`。 +- 范围控制:不改变 Stripe Connect/master account 架构,不改变 secret 加密格式,不引入空对象 env 兜底。 diff --git a/server/src/cron/invoiceCron/runInvoiceCron.ts b/server/src/cron/invoiceCron/runInvoiceCron.ts index 675f95405..0c102d59c 100644 --- a/server/src/cron/invoiceCron/runInvoiceCron.ts +++ b/server/src/cron/invoiceCron/runInvoiceCron.ts @@ -52,7 +52,11 @@ export const handleVoidInvoiceCron = async ({ }); if (!org || !customer) return; - const stripeCli = createStripeCli({ org, env: customer.env }); + const stripeCli = createStripeCli({ + org, + env: customer.env, + workerEnv: ctx.workerEnv, + }); if (!metadata.stripe_invoice_id) return; diff --git a/server/src/cron/resetCron/getStripeSubscriptionAnchor.ts b/server/src/cron/resetCron/getStripeSubscriptionAnchor.ts index e195c864c..52f130664 100644 --- a/server/src/cron/resetCron/getStripeSubscriptionAnchor.ts +++ b/server/src/cron/resetCron/getStripeSubscriptionAnchor.ts @@ -20,10 +20,12 @@ export const getStripeSubscriptionAnchor = async ({ db, cusEnt, nextResetAt, + workerEnv, }: { db: DrizzleCli; cusEnt: ResetCusEnt; nextResetAt: number; + workerEnv?: Env; }) => { const entInterval = cusEnt.entitlement?.interval; if (entInterval && shortDurations.includes(entInterval)) return nextResetAt; @@ -49,7 +51,7 @@ export const getStripeSubscriptionAnchor = async ({ const env = cusProduct.product.env as AppEnv; const org = cusProduct.product.org as Organization; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); if ( !cusProduct.subscription_ids || cusProduct.subscription_ids.length === 0 diff --git a/server/src/cron/resetCron/resetCustomerEntitlement.ts b/server/src/cron/resetCron/resetCustomerEntitlement.ts index 0308948c9..6a5147363 100644 --- a/server/src/cron/resetCron/resetCustomerEntitlement.ts +++ b/server/src/cron/resetCron/resetCustomerEntitlement.ts @@ -144,6 +144,7 @@ const resetCustomerEntitlementInDb = async ({ db: ctx.db, cusEnt, nextResetAt, + workerEnv: ctx.workerEnv, }); } catch (error) { console.log( diff --git a/server/src/external/connect/createStripeCli.ts b/server/src/external/connect/createStripeCli.ts index 8895b5fdb..66938ed96 100644 --- a/server/src/external/connect/createStripeCli.ts +++ b/server/src/external/connect/createStripeCli.ts @@ -44,6 +44,15 @@ export const createStripeCli = ({ }); } + if (!workerEnv) { + throw new RecaseError({ + message: + "Stripe secret key is encrypted, but Cloudflare workerEnv was not provided to createStripeCli", + code: ErrCode.StripeConfigNotFound, + statusCode: 500, + }); + } + const cacheKey = buildSecretKeyCacheKey({ orgId: org.id, env, @@ -54,7 +63,7 @@ export const createStripeCli = ({ return getOrCreateStripeClient({ cacheKey, create: () => { - const decrypted = workerEnv ? decryptData(encrypted, workerEnv) : ""; + const decrypted = decryptData(encrypted, workerEnv); const client = new Stripe(decrypted, { apiVersion: legacyVersion ? // biome-ignore lint/suspicious/noExplicitAny: Need to cast to any to avoid type error diff --git a/server/src/external/stripe/checkoutSessions/operations/getStripeCheckoutSession.ts b/server/src/external/stripe/checkoutSessions/operations/getStripeCheckoutSession.ts index 9d4e57c20..3eef6b3c8 100644 --- a/server/src/external/stripe/checkoutSessions/operations/getStripeCheckoutSession.ts +++ b/server/src/external/stripe/checkoutSessions/operations/getStripeCheckoutSession.ts @@ -41,7 +41,7 @@ export const getStripeCheckoutSession = async < expand: T; }): Promise> => { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const checkoutSession = await stripeCli.checkout.sessions.retrieve( checkoutSessionId, diff --git a/server/src/external/stripe/customers/operations/createStripeCustomer.ts b/server/src/external/stripe/customers/operations/createStripeCustomer.ts index c977095b7..b997c44c2 100644 --- a/server/src/external/stripe/customers/operations/createStripeCustomer.ts +++ b/server/src/external/stripe/customers/operations/createStripeCustomer.ts @@ -18,7 +18,7 @@ export const createStripeCustomer = async ({ }; }): Promise => { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const idempotencyKey = buildStripeCustomerIdempotencyKey({ ctx, diff --git a/server/src/external/stripe/customers/operations/getExpandedStripeCustomer.ts b/server/src/external/stripe/customers/operations/getExpandedStripeCustomer.ts index f4d92a279..074d7b61d 100644 --- a/server/src/external/stripe/customers/operations/getExpandedStripeCustomer.ts +++ b/server/src/external/stripe/customers/operations/getExpandedStripeCustomer.ts @@ -59,7 +59,7 @@ export async function getExpandedStripeCustomer({ expandTax?: boolean; }): Promise { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const getExpandedStripeCustomerOptional = async () => { if (!stripeCustomerId) return undefined; diff --git a/server/src/external/stripe/invoices/operations/voidStripeInvoiceIfOpen.ts b/server/src/external/stripe/invoices/operations/voidStripeInvoiceIfOpen.ts index e3ffb7f14..079f28bec 100644 --- a/server/src/external/stripe/invoices/operations/voidStripeInvoiceIfOpen.ts +++ b/server/src/external/stripe/invoices/operations/voidStripeInvoiceIfOpen.ts @@ -17,7 +17,7 @@ export const voidStripeInvoiceIfOpen = async ({ if (stripeInvoice.status !== "open") return; const { org, env, logger } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const voidedInvoice = await stripeCli.invoices.voidInvoice(stripeInvoice.id); await invoiceActions.updateFromStripe({ diff --git a/server/src/external/stripe/stripeCusUtils.ts b/server/src/external/stripe/stripeCusUtils.ts index a85e2efa4..c7af9129d 100644 --- a/server/src/external/stripe/stripeCusUtils.ts +++ b/server/src/external/stripe/stripeCusUtils.ts @@ -35,12 +35,14 @@ export const deleteStripeCustomer = async ({ org, env, stripeId, + workerEnv, }: { org: Organization; env: AppEnv; stripeId: string; + workerEnv?: Env; }) => { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); const stripeCustomer = await stripeCli.customers.del(stripeId); @@ -172,7 +174,7 @@ export const attachPmToCus = async ({ }; } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); try { const token = willFail ? "tok_chargeCustomerFail" : "tok_visa"; @@ -231,7 +233,7 @@ export const attachAuthenticatePaymentMethod = async ({ customerId: string; }) => { const { org, env, db } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const autumnCustomer = await CusService.get({ db, idOrInternalId: customerId, @@ -258,11 +260,13 @@ export const attachAuthenticatePaymentMethod = async ({ const deleteAllStripeCustomers = async ({ org, env, + workerEnv, }: { org: Organization; env: AppEnv; + workerEnv?: Env; }) => { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); const stripeCustomers = await stripeCli.customers.list({ limit: 100, diff --git a/server/src/external/stripe/subscriptions/operations/getExpandedStripeSubscription.ts b/server/src/external/stripe/subscriptions/operations/getExpandedStripeSubscription.ts index cefab3524..0093b5172 100644 --- a/server/src/external/stripe/subscriptions/operations/getExpandedStripeSubscription.ts +++ b/server/src/external/stripe/subscriptions/operations/getExpandedStripeSubscription.ts @@ -20,7 +20,7 @@ export const getExpandedStripeSubscription = async ({ subscriptionId: string; }): Promise => { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const expandedStripeSubscription = await stripeCli.subscriptions.retrieve( subscriptionId, diff --git a/server/src/external/stripe/webhookHandlers/handleCusDiscountDeleted.ts b/server/src/external/stripe/webhookHandlers/handleCusDiscountDeleted.ts index 3c84069a7..0351cddab 100644 --- a/server/src/external/stripe/webhookHandlers/handleCusDiscountDeleted.ts +++ b/server/src/external/stripe/webhookHandlers/handleCusDiscountDeleted.ts @@ -115,6 +115,7 @@ export async function handleCusDiscountDeleted({ org, env, legacyVersion: true, + workerEnv: ctx.workerEnv, }); await legacyStripe.customers.update(discount.customer, { diff --git a/server/src/external/stripe/webhookHandlers/handleInvoiceCreated/handleInvoiceCreated.ts b/server/src/external/stripe/webhookHandlers/handleInvoiceCreated/handleInvoiceCreated.ts index e810641bf..75c6955c8 100644 --- a/server/src/external/stripe/webhookHandlers/handleInvoiceCreated/handleInvoiceCreated.ts +++ b/server/src/external/stripe/webhookHandlers/handleInvoiceCreated/handleInvoiceCreated.ts @@ -34,7 +34,7 @@ export const sendUsageAndReset = async ({ resetBalance?: boolean; }) => { const { org, env, logger } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const cusEnts = activeProduct.customer_entitlements; const cusPrices = activeProduct.customer_prices; diff --git a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleCheckoutSessionCompletedLegacy.ts b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleCheckoutSessionCompletedLegacy.ts index af05f99aa..bc63aee64 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleCheckoutSessionCompletedLegacy.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleCheckoutSessionCompletedLegacy.ts @@ -46,7 +46,7 @@ export const handleLegacyCheckoutSessionMetadata = async ({ if (metadata.type !== MetadataType.CheckoutSessionCompleted) return null; // Get options - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const attachParams: AttachParams = metadata.data as AttachParams; attachParams.req = ctx as AutumnContext; diff --git a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleSetupCheckout.ts b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleSetupCheckout.ts index 1416ef2d2..3450975ee 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleSetupCheckout.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleLegacyCheckoutSessionMetadata.ts/handleSetupCheckout.ts @@ -20,7 +20,7 @@ export const handleSetupCheckout = async ({ const { org, customer } = attachParams; const paymentMethod = await getCusPaymentMethod({ - stripeCli: createStripeCli({ org, env: customer.env }), + stripeCli: createStripeCli({ org, env: customer.env, workerEnv: ctx.workerEnv }), stripeId: customer.processor?.id, errorIfNone: false, }); @@ -42,7 +42,7 @@ export const handleSetupCheckout = async ({ ctx, attachParams: { ...attachParams, - stripeCli: createStripeCli({ org, env: customer.env }), + stripeCli: createStripeCli({ org, env: customer.env, workerEnv: ctx.workerEnv }), }, branch: AttachBranch.New, config: getDefaultAttachConfig(), diff --git a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleSetupPaymentMetadata.ts b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleSetupPaymentMetadata.ts index 78c7f831a..920ff741a 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleSetupPaymentMetadata.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleSetupPaymentMetadata.ts @@ -39,7 +39,7 @@ export const handleSetupPaymentMetadata = async ({ } // 1. Update customer's default payment method - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const paymentMethod = await updateDefaultPaymentMethod({ stripeCli, stripeCustomerId, diff --git a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleStandaloneSetupCheckout.ts b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleStandaloneSetupCheckout.ts index e7c81984b..7cf59b89d 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleStandaloneSetupCheckout.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeCheckoutSessionCompleted/tasks/handleStandaloneSetupCheckout.ts @@ -41,7 +41,7 @@ export const handleStandaloneSetupCheckout = async ({ return; } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const paymentMethod = await updateDefaultPaymentMethod({ stripeCli, stripeCustomerId, diff --git a/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceDiscounts.ts b/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceDiscounts.ts index 12fe2b483..7e52d8d29 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceDiscounts.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceDiscounts.ts @@ -25,7 +25,7 @@ export const handleStripeInvoiceDiscounts = async ({ // Handle coupon const { org, env, logger } = ctx; const { stripeInvoice, stripeSubscriptionId } = invoicePaidContext; - const stripeCli = createStripeCli({ org, env, legacyVersion: true }); + const stripeCli = createStripeCli({ org, env, legacyVersion: true, workerEnv: ctx.workerEnv }); if (stripeInvoice.discounts.length === 0) return; const stripeCus = await stripeCli.customers.retrieve( diff --git a/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceMetadata/handleInvoiceActionRequiredCompleted.ts b/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceMetadata/handleInvoiceActionRequiredCompleted.ts index d11a827d1..d937e6598 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceMetadata/handleInvoiceActionRequiredCompleted.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeInvoicePaid/tasks/handleStripeInvoiceMetadata/handleInvoiceActionRequiredCompleted.ts @@ -22,7 +22,7 @@ export const handleInvoiceActionRequiredCompleted = async ({ const { logger, org, env } = ctx; logger.info(`invoice.paid, handling action required`); - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const paymentMethod = await getCusPaymentMethod({ stripeCli, diff --git a/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/setupStripeSubscriptionUpdatedContext.ts b/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/setupStripeSubscriptionUpdatedContext.ts index 937f54069..592f9e34e 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/setupStripeSubscriptionUpdatedContext.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/setupStripeSubscriptionUpdatedContext.ts @@ -27,7 +27,7 @@ export const setupStripeSubscriptionUpdatedContext = async ({ const previousAttributes = event.data.previous_attributes ?? {}; // Get current time (respecting test clocks) - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const nowMs = await stripeSubscriptionToNowMs({ stripeSubscription, stripeCli, diff --git a/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleCancelOnPastDue.ts b/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleCancelOnPastDue.ts index 599fad67d..906b9e0cd 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleCancelOnPastDue.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleCancelOnPastDue.ts @@ -46,7 +46,7 @@ export const handleCancelOnPastDue = async ({ }); if (!isPastDueEvent) return; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); // Get latest invoice const latestInvoice = await stripeSubscriptionToLatestInvoice({ diff --git a/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleSchedulePhaseChanges/releaseScheduleIfLastPhase.ts b/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleSchedulePhaseChanges/releaseScheduleIfLastPhase.ts index f2deaec1c..bcde5be80 100644 --- a/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleSchedulePhaseChanges/releaseScheduleIfLastPhase.ts +++ b/server/src/external/stripe/webhookHandlers/handleStripeSubscriptionUpdated/tasks/handleSchedulePhaseChanges/releaseScheduleIfLastPhase.ts @@ -55,7 +55,7 @@ export const releaseScheduleIfLastPhase = async ({ `[handleSchedulePhaseChanges] releasing schedule (last phase reached)`, ); - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); try { await stripeCli.subscriptionSchedules.release( diff --git a/server/src/external/vercel/handlers/handleUpdateBillingPlan.ts b/server/src/external/vercel/handlers/handleUpdateBillingPlan.ts index d2fafb5a8..4b2b55748 100644 --- a/server/src/external/vercel/handlers/handleUpdateBillingPlan.ts +++ b/server/src/external/vercel/handlers/handleUpdateBillingPlan.ts @@ -48,6 +48,7 @@ export const handleUpdateVercelBillingPlan = createRoute({ const stripeCli = createStripeCli({ org, env: ctx.env, + workerEnv: ctx.workerEnv, }); const stripeCustomer = await stripeCli.customers.retrieve( diff --git a/server/src/external/vercel/handlers/installations/handleUpsertInstallation.ts b/server/src/external/vercel/handlers/installations/handleUpsertInstallation.ts index 26fcbc2ed..8b84accbd 100644 --- a/server/src/external/vercel/handlers/installations/handleUpsertInstallation.ts +++ b/server/src/external/vercel/handlers/installations/handleUpsertInstallation.ts @@ -63,7 +63,7 @@ export const handleUpsertInstallation = createRoute({ }); // Create test clock for sandbox/development environments - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); let testClockId: string | undefined; if (ctx.env === AppEnv.Sandbox) { const testClock = await stripeCli.testHelpers.testClocks.create({ diff --git a/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceCreated.ts b/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceCreated.ts index 1132d3fec..f205388a5 100644 --- a/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceCreated.ts +++ b/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceCreated.ts @@ -24,7 +24,7 @@ export const handleMarketplaceInvoiceCreated = async ({ const { db, org, env, logger } = ctx; const { installationId, externalInvoiceId } = payload; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); // 1. Retrieve invoice const invoice = await stripeCli.invoices.retrieve(externalInvoiceId, { diff --git a/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceNotPaid.ts b/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceNotPaid.ts index c180161be..8fd297cc4 100644 --- a/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceNotPaid.ts +++ b/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoiceNotPaid.ts @@ -40,7 +40,7 @@ export const handleMarketplaceInvoiceNotPaid = async ({ const { db, org, env, logger } = ctx; const { installationId, externalInvoiceId } = payload; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const invoice = await stripeCli.invoices.retrieve(externalInvoiceId, { expand: ["subscription"], diff --git a/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoicePaid.ts b/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoicePaid.ts index cf129f63f..79be5aed8 100644 --- a/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoicePaid.ts +++ b/server/src/external/vercel/handlers/marketplace/handleMarketplaceInvoicePaid.ts @@ -34,7 +34,7 @@ export const handleMarketplaceInvoicePaid = async ({ const { db, org, env, logger } = ctx; const { installationId, externalInvoiceId } = payload; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const invoice = await stripeCli.invoices.retrieve(externalInvoiceId, { expand: ["subscription"], diff --git a/server/src/external/vercel/handlers/resources/handleCreateResource.ts b/server/src/external/vercel/handlers/resources/handleCreateResource.ts index 83c8f2201..d73cf5e9d 100644 --- a/server/src/external/vercel/handlers/resources/handleCreateResource.ts +++ b/server/src/external/vercel/handlers/resources/handleCreateResource.ts @@ -115,7 +115,11 @@ export const handleCreateResource = createRoute({ }); } - const stripeCli = createStripeCli({ org, env: appEnv }); + const stripeCli = createStripeCli({ + org, + env: appEnv, + workerEnv: ctx.workerEnv, + }); const stripeCustomer = await stripeCli.customers.retrieve( customer.processor.id, { diff --git a/server/src/external/vercel/handlers/resources/handleDeleteResource.ts b/server/src/external/vercel/handlers/resources/handleDeleteResource.ts index a97838e70..1f9958aa7 100644 --- a/server/src/external/vercel/handlers/resources/handleDeleteResource.ts +++ b/server/src/external/vercel/handlers/resources/handleDeleteResource.ts @@ -72,7 +72,11 @@ export const handleDeleteResource = createRoute({ // Stripe connection — must be inside the guard, not above it. let stripeCli: Stripe | null = null; try { - stripeCli = createStripeCli({ org, env: env as AppEnv }); + stripeCli = createStripeCli({ + org, + env: env as AppEnv, + workerEnv: ctx.workerEnv, + }); } catch (error) { logCaughtError({ logger, diff --git a/server/src/internal/analytics/analyticsUtils.ts b/server/src/internal/analytics/analyticsUtils.ts index f0a41a2e5..a3b0edc2a 100644 --- a/server/src/internal/analytics/analyticsUtils.ts +++ b/server/src/internal/analytics/analyticsUtils.ts @@ -114,7 +114,7 @@ async function fetchMissingSubscriptionsFromStripe({ return []; } - const stripe = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripe = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); const stripeSubs: Stripe.Subscription[] = []; for (const subId of missingSubIds) { diff --git a/server/src/internal/balances/utils/paidAllocatedFeature/adjustAllowance.ts b/server/src/internal/balances/utils/paidAllocatedFeature/adjustAllowance.ts index 0970dba73..3504ce519 100644 --- a/server/src/internal/balances/utils/paidAllocatedFeature/adjustAllowance.ts +++ b/server/src/internal/balances/utils/paidAllocatedFeature/adjustAllowance.ts @@ -104,7 +104,7 @@ export const adjustAllowance = async ({ logger.info(`Updating arrear prorated usage: ${affectedFeature.name}`); logger.info(`Customer: ${customer.name}, Org: ${org.slug}`); - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const sub = await cusProductToSub({ cusProduct, stripeCli, diff --git a/server/src/internal/billing/handlers/handleSetupPayment.ts b/server/src/internal/billing/handlers/handleSetupPayment.ts index 1eda8efd5..f2a70fa0a 100644 --- a/server/src/internal/billing/handlers/handleSetupPayment.ts +++ b/server/src/internal/billing/handlers/handleSetupPayment.ts @@ -34,7 +34,7 @@ export const handleSetupPayment = createRoute({ customer, }); - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); // check if user already specified payment methods in their request const hasUserSpecifiedPaymentMethods = diff --git a/server/src/internal/billing/v2/actions/locks/checkoutSessionLock/checkoutSessionLock.ts b/server/src/internal/billing/v2/actions/locks/checkoutSessionLock/checkoutSessionLock.ts index 1d2e16ef8..1ef54c2fa 100644 --- a/server/src/internal/billing/v2/actions/locks/checkoutSessionLock/checkoutSessionLock.ts +++ b/server/src/internal/billing/v2/actions/locks/checkoutSessionLock/checkoutSessionLock.ts @@ -83,6 +83,7 @@ const expireAndClear = async ({ const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, + workerEnv: ctx.workerEnv, }); await stripeCli.checkout.sessions.expire(checkoutSessionId); } catch (error) { diff --git a/server/src/internal/billing/v2/actions/restore/setup/buildRestoreBillingContext.ts b/server/src/internal/billing/v2/actions/restore/setup/buildRestoreBillingContext.ts index e9b9a0e37..86f187411 100644 --- a/server/src/internal/billing/v2/actions/restore/setup/buildRestoreBillingContext.ts +++ b/server/src/internal/billing/v2/actions/restore/setup/buildRestoreBillingContext.ts @@ -23,7 +23,7 @@ export const buildRestoreBillingContext = async ({ stripeCustomer?: Stripe.Customer; stripeSubscriptionId: string; }): Promise => { - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); const stripeSubscription = await stripeCli.subscriptions.retrieve( stripeSubscriptionId, diff --git a/server/src/internal/billing/v2/actions/setupPayment/createSetupCheckoutSession.ts b/server/src/internal/billing/v2/actions/setupPayment/createSetupCheckoutSession.ts index ea7854caf..8fbdb36ae 100644 --- a/server/src/internal/billing/v2/actions/setupPayment/createSetupCheckoutSession.ts +++ b/server/src/internal/billing/v2/actions/setupPayment/createSetupCheckoutSession.ts @@ -57,7 +57,7 @@ export const createSetupCheckoutSession = async ({ params: SetupPaymentParamsV1; }) => { const { org, env, logger } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); // 1. Insert metadata (if plan_id specified) const metadata = params.plan_id diff --git a/server/src/internal/billing/v2/actions/sync/setup/setupSyncContext.ts b/server/src/internal/billing/v2/actions/sync/setup/setupSyncContext.ts index 698ff853c..29b0ce1a5 100644 --- a/server/src/internal/billing/v2/actions/sync/setup/setupSyncContext.ts +++ b/server/src/internal/billing/v2/actions/sync/setup/setupSyncContext.ts @@ -27,7 +27,7 @@ const fetchStripeSubscription = async ({ stripeSubscriptionId?: string; }): Promise => { if (!stripeSubscriptionId) return null; - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); return stripeCli.subscriptions.retrieve(stripeSubscriptionId); }; @@ -39,7 +39,7 @@ const fetchStripeSchedule = async ({ stripeScheduleId?: string; }): Promise => { if (!stripeScheduleId) return null; - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); return stripeCli.subscriptionSchedules.retrieve(stripeScheduleId); }; diff --git a/server/src/internal/billing/v2/actions/sync/subscriptionToSyncParams.ts b/server/src/internal/billing/v2/actions/sync/subscriptionToSyncParams.ts index 25e5f63fd..2ee0d40f1 100644 --- a/server/src/internal/billing/v2/actions/sync/subscriptionToSyncParams.ts +++ b/server/src/internal/billing/v2/actions/sync/subscriptionToSyncParams.ts @@ -88,7 +88,7 @@ export const subscriptionToSyncParams = async ({ }); if (scheduleId) { resolvedSchedule = await getStripeActiveSubscriptionSchedule({ - stripeClient: createStripeCli({ org: ctx.org, env: ctx.env }), + stripeClient: createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }), subscriptionScheduleId: scheduleId, expand: ["phases.items.price.product"], }); diff --git a/server/src/internal/billing/v2/actions/sync/sync.ts b/server/src/internal/billing/v2/actions/sync/sync.ts index cbf6ecf48..da4e2510d 100644 --- a/server/src/internal/billing/v2/actions/sync/sync.ts +++ b/server/src/internal/billing/v2/actions/sync/sync.ts @@ -56,7 +56,7 @@ export const sync = async ({ }); } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const results: Array<{ plan_id: string; success: boolean; error?: string }> = []; diff --git a/server/src/internal/billing/v2/actions/sync/syncProposals.ts b/server/src/internal/billing/v2/actions/sync/syncProposals.ts index 3d2cf0727..c11e8af22 100644 --- a/server/src/internal/billing/v2/actions/sync/syncProposals.ts +++ b/server/src/internal/billing/v2/actions/sync/syncProposals.ts @@ -73,7 +73,7 @@ export const syncProposals = async ({ } // 2. Create Stripe client and list subscriptions - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const stripeSubscriptions = await stripeCli.subscriptions.list({ customer: stripeCustomerId, limit: 100, diff --git a/server/src/internal/billing/v2/actions/sync/syncProposalsV2.ts b/server/src/internal/billing/v2/actions/sync/syncProposalsV2.ts index 8bb325e99..9ca9c06da 100644 --- a/server/src/internal/billing/v2/actions/sync/syncProposalsV2.ts +++ b/server/src/internal/billing/v2/actions/sync/syncProposalsV2.ts @@ -157,7 +157,7 @@ export const syncProposalsV2 = async ({ }); } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const [subscriptionList, scheduleList] = await Promise.all([ stripeCli.subscriptions.list({ customer: stripeCustomerId, diff --git a/server/src/internal/billing/v2/execute/voidInvoicesOnImmediateCancel.ts b/server/src/internal/billing/v2/execute/voidInvoicesOnImmediateCancel.ts index 34d0ff5ec..948952511 100644 --- a/server/src/internal/billing/v2/execute/voidInvoicesOnImmediateCancel.ts +++ b/server/src/internal/billing/v2/execute/voidInvoicesOnImmediateCancel.ts @@ -30,7 +30,11 @@ export const voidInvoicesOnImmediateCancel = async ({ const { stripeSubscription, stripeCustomer, fullCustomer } = billingContext; if (!stripeSubscription || !stripeCustomer) return; - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); const { failed } = await voidOpenInvoicesForStripeSubscription({ ctx, stripeCli, diff --git a/server/src/internal/billing/v2/providers/stripe/actionBuilders/buildStripeRefundAction.ts b/server/src/internal/billing/v2/providers/stripe/actionBuilders/buildStripeRefundAction.ts index 4bcdffed0..e73a5f293 100644 --- a/server/src/internal/billing/v2/providers/stripe/actionBuilders/buildStripeRefundAction.ts +++ b/server/src/internal/billing/v2/providers/stripe/actionBuilders/buildStripeRefundAction.ts @@ -20,7 +20,11 @@ export const buildStripeRefundAction = async ({ if (!refundPlan) return undefined; if (refundPlan.amount <= 0) return undefined; - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); const stripeInvoice = await stripeCli.invoices.retrieve( refundPlan.invoice.stripe_id, diff --git a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeCheckoutSessionAction.ts b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeCheckoutSessionAction.ts index d8de80312..0510252f3 100644 --- a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeCheckoutSessionAction.ts +++ b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeCheckoutSessionAction.ts @@ -31,7 +31,11 @@ export const executeStripeCheckoutSessionAction = async ({ const { org, logger } = ctx; const { fullCustomer } = billingContext; - const stripeCli = createStripeCli({ org, env: fullCustomer.env }); + const stripeCli = createStripeCli({ + org, + env: fullCustomer.env, + workerEnv: ctx.workerEnv, + }); const enablePlanImmediately = billingContext.enablePlanImmediately === true; const metadataType = enablePlanImmediately diff --git a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeRefundAction.ts b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeRefundAction.ts index 2a196c4e3..332a99ba8 100644 --- a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeRefundAction.ts +++ b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeRefundAction.ts @@ -12,7 +12,11 @@ export const executeStripeRefundAction = async ({ ctx: AutumnContext; refundAction: StripeRefundAction; }): Promise => { - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); ctx.logger.info( `[executeStripeRefundAction] Refunding ${refundAction.amountInCents} cents from charge ${refundAction.chargeId}`, diff --git a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionAction.ts b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionAction.ts index a8c0268ce..595d8a9f7 100644 --- a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionAction.ts +++ b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionAction.ts @@ -39,7 +39,11 @@ export const executeStripeSubscriptionAction = async ({ let { stripeSubscription, currentEpochMs } = billingContext; const { logger } = ctx; - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); // 2. Lock stripe subscription if (stripeSubscription) { diff --git a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionScheduleAction.ts b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionScheduleAction.ts index 33606c5b2..7e3c161aa 100644 --- a/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionScheduleAction.ts +++ b/server/src/internal/billing/v2/providers/stripe/execute/executeStripeSubscriptionScheduleAction.ts @@ -194,7 +194,7 @@ export const executeStripeSubscriptionScheduleAction = async ({ stripeSubscription?: Stripe.Subscription; }): Promise => { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); logSubscriptionScheduleAction({ ctx, diff --git a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeCustomerForBilling.ts b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeCustomerForBilling.ts index 30206eac1..2592ab0c0 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeCustomerForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeCustomerForBilling.ts @@ -18,7 +18,7 @@ export const fetchStripeCustomerForBilling = async ({ createIfMissing?: boolean; }) => { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const expandTax = !!ctx.org.config.automatic_tax; const stripeCus = createIfMissing diff --git a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeDiscountsForBilling.ts b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeDiscountsForBilling.ts index d6633c9ca..3b2b76c31 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeDiscountsForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeDiscountsForBilling.ts @@ -98,7 +98,11 @@ export const fetchStripeDiscountsForBilling = async ({ stripeCustomer, }); - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); if (!paramDiscounts?.length) { return existingDiscounts; diff --git a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts index 653cee5d1..5cf7afee5 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts @@ -41,7 +41,7 @@ export const fetchStripeSubscriptionForBilling = async ({ : undefined; const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const cusProductWithSub = getTargetSubscriptionCusProduct({ fullCus, diff --git a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionScheduleForBilling.ts b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionScheduleForBilling.ts index 3f30cba6c..44c8d2cc0 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionScheduleForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionScheduleForBilling.ts @@ -21,7 +21,7 @@ export const fetchStripeSubscriptionScheduleForBilling = async ({ subscriptionScheduleId?: string; }) => { const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const product: Product | undefined = products[0]; diff --git a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeTaxRateForBilling.ts b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeTaxRateForBilling.ts index 45c94601c..5726cb22e 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeTaxRateForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeTaxRateForBilling.ts @@ -16,6 +16,10 @@ export const fetchStripeTaxRateForBilling = async ({ taxRateId?: string; }): Promise => { if (!taxRateId) return undefined; - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); return await stripeCli.taxRates.retrieve(taxRateId); }; diff --git a/server/src/internal/billing/v2/providers/stripe/utils/discounts/stripeCustomerToDiscounts.ts b/server/src/internal/billing/v2/providers/stripe/utils/discounts/stripeCustomerToDiscounts.ts index b6efbc678..a9f2c73ef 100644 --- a/server/src/internal/billing/v2/providers/stripe/utils/discounts/stripeCustomerToDiscounts.ts +++ b/server/src/internal/billing/v2/providers/stripe/utils/discounts/stripeCustomerToDiscounts.ts @@ -36,6 +36,7 @@ export const stripeCustomerToDiscounts = async ({ org: ctx.org, env: ctx.env, legacyVersion: true, + workerEnv: ctx.workerEnv, }); const legacyCustomer = await legacyStripeCli.customers.retrieve( diff --git a/server/src/internal/billing/v2/providers/stripe/utils/discounts/subToDiscounts.ts b/server/src/internal/billing/v2/providers/stripe/utils/discounts/subToDiscounts.ts index 984b90183..dcb4e1fe3 100644 --- a/server/src/internal/billing/v2/providers/stripe/utils/discounts/subToDiscounts.ts +++ b/server/src/internal/billing/v2/providers/stripe/utils/discounts/subToDiscounts.ts @@ -41,6 +41,7 @@ export const subToDiscounts = async ({ org: ctx.org, env: ctx.env, legacyVersion: true, + workerEnv: ctx.workerEnv, }); const legacySub = await legacyStripeCli.subscriptions.retrieve(sub.id, { expand: ["discounts.coupon"], diff --git a/server/src/internal/billing/v2/providers/stripe/utils/invoices/createInvoiceForBilling.ts b/server/src/internal/billing/v2/providers/stripe/utils/invoices/createInvoiceForBilling.ts index e23ec2eec..2c08935db 100644 --- a/server/src/internal/billing/v2/providers/stripe/utils/invoices/createInvoiceForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/utils/invoices/createInvoiceForBilling.ts @@ -57,7 +57,11 @@ export const createInvoiceForBilling = async ({ skipSubscriptionLink?: boolean; }; }): Promise => { - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); const { addLineParams } = stripeInvoiceAction; const { invoiceMode } = billingContext; diff --git a/server/src/internal/billing/v2/providers/stripe/utils/invoices/stripeInvoiceOps.ts b/server/src/internal/billing/v2/providers/stripe/utils/invoices/stripeInvoiceOps.ts index 6953934fc..0e0bb720d 100644 --- a/server/src/internal/billing/v2/providers/stripe/utils/invoices/stripeInvoiceOps.ts +++ b/server/src/internal/billing/v2/providers/stripe/utils/invoices/stripeInvoiceOps.ts @@ -128,7 +128,11 @@ export const createStripeInvoiceItems = async ({ ctx, invoiceItems, }: CreateStripeInvoiceItemsParams): Promise => { - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); return Promise.all( invoiceItems.map((item) => stripeCli.invoiceItems.create(item)), diff --git a/server/src/internal/billing/v2/providers/stripe/utils/subscriptions/executeStripeSubscriptionOperation.ts b/server/src/internal/billing/v2/providers/stripe/utils/subscriptions/executeStripeSubscriptionOperation.ts index 90bfe19fd..59d9ffe8e 100644 --- a/server/src/internal/billing/v2/providers/stripe/utils/subscriptions/executeStripeSubscriptionOperation.ts +++ b/server/src/internal/billing/v2/providers/stripe/utils/subscriptions/executeStripeSubscriptionOperation.ts @@ -17,7 +17,7 @@ export const executeStripeSubscriptionOperation = async ({ subscriptionAction: StripeSubscriptionAction; }) => { const { org, env } = ctx; - const stripeClient = createStripeCli({ org, env }); + const stripeClient = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const { paymentMethod } = billingContext; const invoiceModeParams = billingContext.invoiceMode diff --git a/server/src/internal/billing/v2/utils/billingPlan/preview/tax/computeAttachTaxPreview.ts b/server/src/internal/billing/v2/utils/billingPlan/preview/tax/computeAttachTaxPreview.ts index c47e9d7a7..9f24856c3 100644 --- a/server/src/internal/billing/v2/utils/billingPlan/preview/tax/computeAttachTaxPreview.ts +++ b/server/src/internal/billing/v2/utils/billingPlan/preview/tax/computeAttachTaxPreview.ts @@ -94,7 +94,7 @@ export const computeStripeTaxPreviewForNetSubtotal = async ({ if (!billingContext.stripeCustomer?.id) return undefined; const currency = orgToCurrency({ org: ctx.org }); - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); if (netSubtotal === 0) { return { diff --git a/server/src/internal/billing/v2/workflows/grantCheckoutReward/grantCheckoutReward.ts b/server/src/internal/billing/v2/workflows/grantCheckoutReward/grantCheckoutReward.ts index 4d244521a..96fb2a617 100644 --- a/server/src/internal/billing/v2/workflows/grantCheckoutReward/grantCheckoutReward.ts +++ b/server/src/internal/billing/v2/workflows/grantCheckoutReward/grantCheckoutReward.ts @@ -61,7 +61,7 @@ export const grantCheckoutReward = async ({ return; } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const redemptions = await redemptionRepo.getByCustomer({ db, diff --git a/server/src/internal/billing/v2/workflows/storeInvoiceLineItems/storeInvoiceLineItems.ts b/server/src/internal/billing/v2/workflows/storeInvoiceLineItems/storeInvoiceLineItems.ts index 4e4ca6bd9..321411177 100644 --- a/server/src/internal/billing/v2/workflows/storeInvoiceLineItems/storeInvoiceLineItems.ts +++ b/server/src/internal/billing/v2/workflows/storeInvoiceLineItems/storeInvoiceLineItems.ts @@ -35,7 +35,7 @@ export const storeInvoiceLineItems = async ({ payload; try { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); // 1. Fetch invoice line items from Stripe const stripeLineItems = await getStripeInvoiceLineItems({ diff --git a/server/src/internal/customers/actions/deleteCustomer.ts b/server/src/internal/customers/actions/deleteCustomer.ts index 252002172..b0b90d905 100644 --- a/server/src/internal/customers/actions/deleteCustomer.ts +++ b/server/src/internal/customers/actions/deleteCustomer.ts @@ -40,6 +40,7 @@ export const deleteCustomer = async ({ org, env, stripeId: customer.processor.id, + workerEnv: ctx.workerEnv, }); } } catch (error) { diff --git a/server/src/internal/customers/actions/resetCustomerEntitlements/getResetAtUpdate.ts b/server/src/internal/customers/actions/resetCustomerEntitlements/getResetAtUpdate.ts index 0d023a81d..e7c6dbfeb 100644 --- a/server/src/internal/customers/actions/resetCustomerEntitlements/getResetAtUpdate.ts +++ b/server/src/internal/customers/actions/resetCustomerEntitlements/getResetAtUpdate.ts @@ -24,6 +24,7 @@ export const getResetAtUpdate = async ({ cusProduct, org, env, + workerEnv, }: { curResetAt: number; interval: EntInterval; @@ -31,6 +32,7 @@ export const getResetAtUpdate = async ({ cusProduct: FullCusProduct | null; org: Organization; env: AppEnv; + workerEnv?: Env; }): Promise => { const nextResetAt = getNextResetAt({ curReset: new UTCDate(curResetAt), @@ -59,7 +61,7 @@ export const getResetAtUpdate = async ({ } try { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); const subId = cusProduct.subscription_ids[0]; const sub = await stripeCli.subscriptions.retrieve(subId); diff --git a/server/src/internal/customers/actions/resetCustomerEntitlements/processReset.ts b/server/src/internal/customers/actions/resetCustomerEntitlements/processReset.ts index e268ff2fa..c11dac25b 100644 --- a/server/src/internal/customers/actions/resetCustomerEntitlements/processReset.ts +++ b/server/src/internal/customers/actions/resetCustomerEntitlements/processReset.ts @@ -77,6 +77,7 @@ export const processReset = async ({ cusProduct, org, env, + workerEnv: ctx.workerEnv, }); // Compute rollover before resetting balance diff --git a/server/src/internal/customers/actions/update/updateCustomer.ts b/server/src/internal/customers/actions/update/updateCustomer.ts index 2594711d4..98d433b2e 100644 --- a/server/src/internal/customers/actions/update/updateCustomer.ts +++ b/server/src/internal/customers/actions/update/updateCustomer.ts @@ -78,7 +78,7 @@ export const updateCustomer = async ({ const newStripeId = newCusData.stripe_id; if (notNullish(newStripeId) && stripeId !== newStripeId) { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); await stripeCli.customers.retrieve(newStripeId); stripeId = newCusData.stripe_id; @@ -129,7 +129,7 @@ export const updateCustomer = async ({ }; if (Object.keys(stripeUpdate).length > 0 && stripeId) { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); await stripeCli.customers.update(stripeId, stripeUpdate); } diff --git a/server/src/internal/customers/add-product/handleCreateCheckout.ts b/server/src/internal/customers/add-product/handleCreateCheckout.ts index 0874319b4..58b847a86 100644 --- a/server/src/internal/customers/add-product/handleCreateCheckout.ts +++ b/server/src/internal/customers/add-product/handleCreateCheckout.ts @@ -39,6 +39,7 @@ export const handleCreateCheckout = async ({ org, env: customer.env, legacyVersion: true, + workerEnv: ctx.workerEnv, }); const itemSets = await getStripeSubItems({ diff --git a/server/src/internal/customers/attach/attachRouter.ts b/server/src/internal/customers/attach/attachRouter.ts index c28eb48c3..7d63b8429 100644 --- a/server/src/internal/customers/attach/attachRouter.ts +++ b/server/src/internal/customers/attach/attachRouter.ts @@ -169,6 +169,7 @@ export const checkStripeConnections = async ({ env, product, logger, + workerEnv: ctx.workerEnv, }), ); } @@ -213,14 +214,17 @@ const createStripePrices = async ({ const customerHasPm = async ({ attachParams, + workerEnv, }: { attachParams: AttachParams; + workerEnv?: Env; }) => { // SCENARIO 3: No payment method, checkout required const paymentMethod = await getCusPaymentMethod({ stripeCli: createStripeCli({ org: attachParams.org, env: attachParams.customer.env, + workerEnv, }), stripeId: attachParams.customer.processor?.id, }); diff --git a/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts b/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts index 722d449fd..1254f64cb 100644 --- a/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts +++ b/server/src/internal/customers/attach/attachUtils/attachParams/attachParamsUtils/getStripeCusData.ts @@ -19,7 +19,7 @@ export const getStripeCusData = async ({ } const { org, env } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const stripeCus = await getOrCreateStripeCustomer({ ctx, diff --git a/server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts b/server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts index c02a1ef6d..efa579bf0 100644 --- a/server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts +++ b/server/src/internal/customers/attach/attachUtils/attachParams/checkToAttachParams.ts @@ -16,7 +16,7 @@ export const checkToAttachParams = async ({ }) => { const { org, env, db } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const stripeCusData = await getStripeCusData({ ctx, customer, diff --git a/server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts b/server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts index c083f8ca3..b6b2bdb81 100644 --- a/server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts +++ b/server/src/internal/customers/attach/attachUtils/attachParams/convertToParams.ts @@ -192,7 +192,7 @@ export const rewardProgramToAttachParams = ({ cusProducts: customer.customer_products, entities: [], features, - stripeCli: createStripeCli({ org, env }), + stripeCli: createStripeCli({ org, env, workerEnv: ctx.workerEnv }), paymentMethod: null, replaceables: [], } satisfies AttachParams; diff --git a/server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts b/server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts index 3b5cc883c..506690389 100644 --- a/server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts +++ b/server/src/internal/customers/attach/attachUtils/attachParams/processAttachBody.ts @@ -74,7 +74,7 @@ export const processAttachBody = async ({ // 1. Get customer and products const { org, env, logger } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const { customer, products } = await getCustomerAndProducts({ ctx, diff --git a/server/src/internal/customers/cusProducts/cusEnts/cusEntUtils.ts b/server/src/internal/customers/cusProducts/cusEnts/cusEntUtils.ts index 6cf54650d..44dd93200 100644 --- a/server/src/internal/customers/cusProducts/cusEnts/cusEntUtils.ts +++ b/server/src/internal/customers/cusProducts/cusEnts/cusEntUtils.ts @@ -122,6 +122,7 @@ const updateCusEntInStripe = async ({ cusPrices, org, env, + workerEnv, customer, amountUsed, eventId, @@ -130,6 +131,7 @@ const updateCusEntInStripe = async ({ cusPrices: FullCustomerPrice[]; org: Organization; env: AppEnv; + workerEnv?: Env; customer: Customer; amountUsed: number; eventId: string; @@ -144,6 +146,7 @@ const updateCusEntInStripe = async ({ const stripeCli = createStripeCli({ org, env, + workerEnv, }); await stripeCli.billing.meterEvents.create({ diff --git a/server/src/internal/customers/cusProducts/cusProductUtils.ts b/server/src/internal/customers/cusProducts/cusProductUtils.ts index 7565c9854..3022e436a 100644 --- a/server/src/internal/customers/cusProducts/cusProductUtils.ts +++ b/server/src/internal/customers/cusProducts/cusProductUtils.ts @@ -71,7 +71,7 @@ export const activateDefaultProduct = async ({ return false; } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const defaultIsFree = isFreeProduct(defaultProd.prices); // Initialize Stripe customer and products if needed (for paid non-trial products) diff --git a/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpand.ts b/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpand.ts index 6cb94bbe4..6e0328ca6 100644 --- a/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpand.ts +++ b/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpand.ts @@ -62,6 +62,7 @@ export const getApiCustomerExpand = async ({ getCusRewards({ org, env, + workerEnv: ctx.workerEnv, fullCus, subIds: fullCus.customer_products.flatMap( (cp: FullCusProduct) => cp.subscription_ids || [], @@ -76,6 +77,7 @@ export const getApiCustomerExpand = async ({ getCusPaymentMethodRes({ org, env, + workerEnv: ctx.workerEnv, fullCus, expand: cusExpand, }), diff --git a/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpandV2.ts b/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpandV2.ts index 6db635bf6..cf60ed6d4 100644 --- a/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpandV2.ts +++ b/server/src/internal/customers/cusUtils/apiCusUtils/getApiCustomerExpandV2.ts @@ -88,6 +88,7 @@ export const getApiCustomerExpandV2 = async ({ getCusRewards({ org: ctx.org, env: ctx.env, + workerEnv: ctx.workerEnv, fullCus, subIds, expand: cusExpand, @@ -100,6 +101,7 @@ export const getApiCustomerExpandV2 = async ({ getCusPaymentMethodRes({ org: ctx.org, env: ctx.env, + workerEnv: ctx.workerEnv, fullCus, expand: cusExpand, }), diff --git a/server/src/internal/customers/cusUtils/createNewCustomer.ts b/server/src/internal/customers/cusUtils/createNewCustomer.ts index c2a00d485..9b22cd285 100644 --- a/server/src/internal/customers/cusUtils/createNewCustomer.ts +++ b/server/src/internal/customers/cusUtils/createNewCustomer.ts @@ -114,7 +114,7 @@ export const createNewCustomer = async ({ // Check if stripeCli exists if (nonFreeProds.length > 0) { - createStripeCli({ org, env }); + createStripeCli({ org, env, workerEnv: ctx.workerEnv }); } const newCustomer = await CusService.insert({ @@ -149,7 +149,11 @@ export const createNewCustomer = async ({ ); if (!isFreeProduct(defaultProd.prices)) { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ + org, + env, + workerEnv: ctx.workerEnv, + }); await initStripeCusAndProducts({ ctx, customer: newCustomer, diff --git a/server/src/internal/customers/cusUtils/cusResponseUtils/getCusPaymentMethodRes.ts b/server/src/internal/customers/cusUtils/cusResponseUtils/getCusPaymentMethodRes.ts index 3c6c4f5a1..2dde5eece 100644 --- a/server/src/internal/customers/cusUtils/cusResponseUtils/getCusPaymentMethodRes.ts +++ b/server/src/internal/customers/cusUtils/cusResponseUtils/getCusPaymentMethodRes.ts @@ -10,11 +10,13 @@ import { getCusPaymentMethod } from "@/external/stripe/stripeCusUtils.js"; export const getCusPaymentMethodRes = async ({ org, env, + workerEnv, fullCus, expand, }: { org: Organization; env: AppEnv; + workerEnv?: Env; fullCus: FullCustomer; expand: CustomerExpand[]; }) => { @@ -25,6 +27,7 @@ export const getCusPaymentMethodRes = async ({ const stripeCli = createStripeCli({ org, env, + workerEnv, }); const paymentMethod = await getCusPaymentMethod({ diff --git a/server/src/internal/customers/cusUtils/cusResponseUtils/getCusRewards.ts b/server/src/internal/customers/cusUtils/cusResponseUtils/getCusRewards.ts index b0fdfbaee..e00aed95c 100644 --- a/server/src/internal/customers/cusUtils/cusResponseUtils/getCusRewards.ts +++ b/server/src/internal/customers/cusUtils/cusResponseUtils/getCusRewards.ts @@ -15,12 +15,14 @@ import { getOriginalCouponId } from "../../../rewards/rewardUtils"; export const getCusRewards = async ({ org, env, + workerEnv, fullCus, subIds, expand, }: { org: Organization; env: AppEnv; + workerEnv?: Env; fullCus: FullCustomer; subIds?: string[]; expand?: CustomerExpand[]; @@ -37,6 +39,7 @@ export const getCusRewards = async ({ org, env, legacyVersion: true, + workerEnv, }); const [stripeCus, stripeSubs] = await Promise.all([ diff --git a/server/src/internal/customers/handlers/handleAddCouponToCusV2.ts b/server/src/internal/customers/handlers/handleAddCouponToCusV2.ts index c619b29cb..efe8a9360 100644 --- a/server/src/internal/customers/handlers/handleAddCouponToCusV2.ts +++ b/server/src/internal/customers/handlers/handleAddCouponToCusV2.ts @@ -75,6 +75,7 @@ export const handleAddCouponToCusV2 = createRoute({ org, env, legacyVersion: true, + workerEnv: ctx.workerEnv, }); await getOrCreateStripeCustomer({ diff --git a/server/src/internal/customers/handlers/handleBillingPortal/createBillingPortalSession.ts b/server/src/internal/customers/handlers/handleBillingPortal/createBillingPortalSession.ts index 100c6050b..ca65ed679 100644 --- a/server/src/internal/customers/handlers/handleBillingPortal/createBillingPortalSession.ts +++ b/server/src/internal/customers/handlers/handleBillingPortal/createBillingPortalSession.ts @@ -17,7 +17,7 @@ export const createBillingPortalSession = async ({ configurationId?: string; }) => { const { db, org, env, logger } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); // Determine the Stripe customer ID to use const stripeCustomer = await getOrCreateStripeCustomer({ diff --git a/server/src/internal/customers/handlers/handleBillingPortal/handleGetBillingPortal.ts b/server/src/internal/customers/handlers/handleBillingPortal/handleGetBillingPortal.ts index 3aaddaeb1..14dcb68fc 100644 --- a/server/src/internal/customers/handlers/handleBillingPortal/handleGetBillingPortal.ts +++ b/server/src/internal/customers/handlers/handleBillingPortal/handleGetBillingPortal.ts @@ -41,7 +41,7 @@ export const handleGetBillingPortal = createRoute({ }); } - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); const stripeCustomer = await getOrCreateStripeCustomer({ ctx, diff --git a/server/src/internal/customers/handlers/handleRefundInvoice/handleRefundInvoice.ts b/server/src/internal/customers/handlers/handleRefundInvoice/handleRefundInvoice.ts index 4b62f5078..77c4d99a3 100644 --- a/server/src/internal/customers/handlers/handleRefundInvoice/handleRefundInvoice.ts +++ b/server/src/internal/customers/handlers/handleRefundInvoice/handleRefundInvoice.ts @@ -27,7 +27,7 @@ export const handleRefundInvoice = createRoute({ const { stripe_invoice_id } = c.req.param(); const { mode, amount } = c.req.valid("json"); - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env, workerEnv: ctx.workerEnv }); // 1. Retrieve the Stripe invoice with payments expanded let stripeInvoice: Stripe.Invoice; diff --git a/server/src/internal/customers/handlers/handleTransferProduct/handleDecreaseAndTransfer.ts b/server/src/internal/customers/handlers/handleTransferProduct/handleDecreaseAndTransfer.ts index 128c94429..430f2792f 100644 --- a/server/src/internal/customers/handlers/handleTransferProduct/handleDecreaseAndTransfer.ts +++ b/server/src/internal/customers/handlers/handleTransferProduct/handleDecreaseAndTransfer.ts @@ -29,7 +29,7 @@ export const handleDecreaseAndTransfer = async ({ }) => { // 1. Create new cus product for entity... const { org, env, db, logger, features } = ctx; - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const product = cusProductToProduct({ cusProduct }); // Decrease quantity of cus product... diff --git a/server/src/internal/customers/internalHandlers/handleGetCusReferrals.ts b/server/src/internal/customers/internalHandlers/handleGetCusReferrals.ts index fffa9c85f..70abd5cf2 100644 --- a/server/src/internal/customers/internalHandlers/handleGetCusReferrals.ts +++ b/server/src/internal/customers/internalHandlers/handleGetCusReferrals.ts @@ -10,7 +10,7 @@ export const handleGetCusReferrals = createRoute({ scopes: [Scopes.Customers.Read], params: z.object({ customer_id: z.string() }), handler: async (c) => { - const { env, db, org } = c.get("ctx"); + const { env, db, org, workerEnv } = c.get("ctx"); const { customer_id } = c.req.param(); const internalCustomer = await CusService.get({ @@ -38,7 +38,7 @@ export const handleGetCusReferrals = createRoute({ }), (async () => { if (isStripeConnected({ org, env }) && internalCustomer.processor?.id) { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); const stripeCus: any = await stripeCli.customers.retrieve( internalCustomer.processor.id, ); diff --git a/server/src/internal/customers/internalHandlers/handleGetCustomer.ts b/server/src/internal/customers/internalHandlers/handleGetCustomer.ts index 77d368054..dd5b4c5f7 100644 --- a/server/src/internal/customers/internalHandlers/handleGetCustomer.ts +++ b/server/src/internal/customers/internalHandlers/handleGetCustomer.ts @@ -62,6 +62,7 @@ export const handleGetCustomer = createRoute({ getCusRewards({ org: ctx.org, env: ctx.env, + workerEnv: ctx.workerEnv, fullCus, subIds: fullCus.customer_products.flatMap( (cp: FullCusProduct) => cp.subscription_ids || [], diff --git a/server/src/internal/customers/internalHandlers/handleGetInvoiceLineItems.ts b/server/src/internal/customers/internalHandlers/handleGetInvoiceLineItems.ts index e4d9990b2..40e95d8fa 100644 --- a/server/src/internal/customers/internalHandlers/handleGetInvoiceLineItems.ts +++ b/server/src/internal/customers/internalHandlers/handleGetInvoiceLineItems.ts @@ -31,6 +31,7 @@ export const handleGetInvoiceLineItems = createRoute({ const stripe = createStripeCli({ org: ctx.org, env: ctx.env, + workerEnv: ctx.workerEnv, }); const autumnInvoices = ( await InvoiceService.getMany({ diff --git a/server/src/internal/invoices/handlers/handleGetStripeInvoice.ts b/server/src/internal/invoices/handlers/handleGetStripeInvoice.ts index 7e092dd98..db251c66b 100644 --- a/server/src/internal/invoices/handlers/handleGetStripeInvoice.ts +++ b/server/src/internal/invoices/handlers/handleGetStripeInvoice.ts @@ -9,12 +9,13 @@ import { createRoute } from "@/honoMiddlewares/routeHandler.js"; export const handleGetStripeInvoice = createRoute({ scopes: [Scopes.Billing.Read], handler: async (c) => { - const { org, env } = c.get("ctx"); + const { org, env, workerEnv } = c.get("ctx"); const { stripe_invoice_id } = c.req.param(); const stripeCli = createStripeCli({ org, env, + workerEnv, }); const stripeInvoice = await stripeCli.invoices.retrieve(stripe_invoice_id); diff --git a/server/src/internal/invoices/handlers/handleRedirectToInvoice.ts b/server/src/internal/invoices/handlers/handleRedirectToInvoice.ts index b2177824b..b61c5502c 100644 --- a/server/src/internal/invoices/handlers/handleRedirectToInvoice.ts +++ b/server/src/internal/invoices/handlers/handleRedirectToInvoice.ts @@ -12,7 +12,7 @@ import { InvoiceService } from "../InvoiceService.js"; export const handleRedirectToInvoice = createRoute({ scopes: [Scopes.Public], handler: async (c) => { - const { db } = c.get("ctx"); + const { db, workerEnv } = c.get("ctx"); const { invoiceId } = c.req.param(); const invoice = await InvoiceService.get({ @@ -45,6 +45,7 @@ export const handleRedirectToInvoice = createRoute({ const stripeCli = createStripeCli({ org, env, + workerEnv, }); const stripeInvoice = await stripeCli.invoices.retrieve( diff --git a/server/src/internal/metadata/utils/insertMetadataFromBillingPlan.ts b/server/src/internal/metadata/utils/insertMetadataFromBillingPlan.ts index 9008cece6..67c623655 100644 --- a/server/src/internal/metadata/utils/insertMetadataFromBillingPlan.ts +++ b/server/src/internal/metadata/utils/insertMetadataFromBillingPlan.ts @@ -75,7 +75,11 @@ export const insertMetadataFromBillingPlan = async ({ // If stripeInvoice, update stripeInvoice with metadata id if (stripeInvoice) { - const stripeCli = createStripeCli({ org: ctx.org, env: ctx.env }); + const stripeCli = createStripeCli({ + org: ctx.org, + env: ctx.env, + workerEnv: ctx.workerEnv, + }); await stripeCli.invoices.update(stripeInvoice.id, { metadata: { autumn_metadata_id: metadata.id, diff --git a/server/src/internal/migrations/migrationSteps/migrateRevenuecatCustomer.ts b/server/src/internal/migrations/migrationSteps/migrateRevenuecatCustomer.ts index 20fdb4025..9de61b265 100644 --- a/server/src/internal/migrations/migrationSteps/migrateRevenuecatCustomer.ts +++ b/server/src/internal/migrations/migrationSteps/migrateRevenuecatCustomer.ts @@ -74,7 +74,7 @@ export const migrateRevenueCatCustomer = async ({ entitlements: toProduct.entitlements, entities: fullCus.entities || [], org, - stripeCli: createStripeCli({ org, env }), + stripeCli: createStripeCli({ org, env, workerEnv: ctx.workerEnv }), paymentMethod: null, freeTrial: null, optionsList: cusProduct.options || [], diff --git a/server/src/internal/orgs/deleteOrg/deleteOrg.ts b/server/src/internal/orgs/deleteOrg/deleteOrg.ts index d0867db65..0774b3f83 100644 --- a/server/src/internal/orgs/deleteOrg/deleteOrg.ts +++ b/server/src/internal/orgs/deleteOrg/deleteOrg.ts @@ -38,7 +38,7 @@ export const deleteOrg = async ({ await Promise.all([ deleteOrgSvixApps({ org, logger, workerEnv }), - deleteOrgStripeWebhooks({ org, logger }), + deleteOrgStripeWebhooks({ org, logger, workerEnv }), deleteOrgStripeAccounts({ org, logger, workerEnv }), ]); diff --git a/server/src/internal/orgs/deleteOrg/deleteOrgStripeWebhooks.ts b/server/src/internal/orgs/deleteOrg/deleteOrgStripeWebhooks.ts index db6c7a6e9..b62272888 100644 --- a/server/src/internal/orgs/deleteOrg/deleteOrgStripeWebhooks.ts +++ b/server/src/internal/orgs/deleteOrg/deleteOrgStripeWebhooks.ts @@ -5,20 +5,29 @@ import { deleteStripeWebhook } from "../orgUtils.js"; export const deleteOrgStripeWebhooks = async ({ org, logger, + workerEnv, }: { org: Organization; logger: Logger; + workerEnv?: Env; }) => { + if (!workerEnv) { + logger.error(`Cannot delete stripe webhooks for ${org.id}: missing Worker env`); + return; + } + const { error } = await tryCatch( (async () => { await deleteStripeWebhook({ org, env: AppEnv.Sandbox, + workerEnv, }); await deleteStripeWebhook({ org, env: AppEnv.Live, + workerEnv, }); })(), ); diff --git a/server/src/internal/orgs/deleteOrg/deletePlatformSubOrg.ts b/server/src/internal/orgs/deleteOrg/deletePlatformSubOrg.ts index 3307b83f3..522bf3947 100644 --- a/server/src/internal/orgs/deleteOrg/deletePlatformSubOrg.ts +++ b/server/src/internal/orgs/deleteOrg/deletePlatformSubOrg.ts @@ -53,7 +53,7 @@ export const deletePlatformSubOrg = async ({ await deleteSvixWebhooks({ org, logger, workerEnv }); logger.info("2. Deleting stripe webhooks"); - await deleteStripeWebhooks({ org, logger }); + await deleteStripeWebhooks({ org, logger, workerEnv }); logger.info("3. Deleting stripe accounts"); await deleteStripeAccounts({ org, logger, workerEnv }); diff --git a/server/src/internal/orgs/handlers/crudHandlers/handleDeleteOrg.ts b/server/src/internal/orgs/handlers/crudHandlers/handleDeleteOrg.ts index 0629c0925..54ab966aa 100644 --- a/server/src/internal/orgs/handlers/crudHandlers/handleDeleteOrg.ts +++ b/server/src/internal/orgs/handlers/crudHandlers/handleDeleteOrg.ts @@ -50,19 +50,28 @@ const deleteSvixWebhooks = async ({ const deleteStripeWebhooks = async ({ org, logger, + workerEnv, }: { org: Organization; logger: any; + workerEnv?: Env; }) => { + if (!workerEnv) { + logger.error(`Cannot delete stripe webhooks for ${org.id}: missing Worker env`); + return; + } + try { await deleteStripeWebhook({ org: org, env: AppEnv.Sandbox, + workerEnv, }); await deleteStripeWebhook({ org: org, env: AppEnv.Live, + workerEnv, }); } catch (error: any) { logger.error( diff --git a/server/src/internal/orgs/handlers/stripeHandlers/handleDeleteStripe.ts b/server/src/internal/orgs/handlers/stripeHandlers/handleDeleteStripe.ts index 34ddf30ff..dce9938e9 100644 --- a/server/src/internal/orgs/handlers/stripeHandlers/handleDeleteStripe.ts +++ b/server/src/internal/orgs/handlers/stripeHandlers/handleDeleteStripe.ts @@ -26,7 +26,12 @@ const disconnectStripe = async ({ workerEnv: Env; }) => { if (isStripeConnected({ org, env, throughSecretKey: true })) { - const stripeCli = createStripeCli({ org, env, throughSecretKey: true }); + const stripeCli = createStripeCli({ + org, + env, + throughSecretKey: true, + workerEnv, + }); const webhooks = await stripeCli.webhookEndpoints.list(); for (const webhook of webhooks.data) { if (webhook.url.includes(org.id) && webhook.url.includes(env)) { diff --git a/server/src/internal/orgs/handlers/stripeHandlers/handleGetStripeAccount.ts b/server/src/internal/orgs/handlers/stripeHandlers/handleGetStripeAccount.ts index de8f8ec02..506007727 100644 --- a/server/src/internal/orgs/handlers/stripeHandlers/handleGetStripeAccount.ts +++ b/server/src/internal/orgs/handlers/stripeHandlers/handleGetStripeAccount.ts @@ -14,7 +14,7 @@ export const handleGetStripeAccount = createRoute({ } try { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const accountDetails = await stripeCli.accounts.retrieve(); return c.json(accountDetails); } catch (error) { diff --git a/server/src/internal/orgs/handlers/stripeHandlers/handleOAuthCallback.ts b/server/src/internal/orgs/handlers/stripeHandlers/handleOAuthCallback.ts index 33f5b7a32..cf6999247 100644 --- a/server/src/internal/orgs/handlers/stripeHandlers/handleOAuthCallback.ts +++ b/server/src/internal/orgs/handlers/stripeHandlers/handleOAuthCallback.ts @@ -123,7 +123,11 @@ export const handleOAuthCallback = async (c: Context) => { } // Standard flow returns detailed error - const master = createStripeCli({ org: existingOrg, env }); + const master = createStripeCli({ + org: existingOrg, + env, + workerEnv: c.env, + }); const account = await master.accounts.retrieve(accountId); redirectUrl.searchParams.set("error", "account_already_connected"); redirectUrl.searchParams.set("account_id", accountId); diff --git a/server/src/internal/orgs/orgUtils.ts b/server/src/internal/orgs/orgUtils.ts index cd5c32dff..161c0169f 100644 --- a/server/src/internal/orgs/orgUtils.ts +++ b/server/src/internal/orgs/orgUtils.ts @@ -33,16 +33,18 @@ export const shouldReconnectStripe = async ({ env, logger, stripeKey, + workerEnv, }: { org: Organization; env: AppEnv; logger: any; stripeKey: string; + workerEnv: Env; }) => { if (!isStripeConnected({ org, env })) return true; try { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); const newKey = new Stripe(stripeKey); const oldAccount = await stripeCli.accounts.retrieve(); @@ -133,13 +135,20 @@ const constructOrg = ({ id, slug }: { id: string; slug: string }) => { export const deleteStripeWebhook = async ({ org, env, + workerEnv, }: { org: Organization; env: AppEnv; + workerEnv: Env; }) => { if (!isStripeConnected({ org, env, throughSecretKey: true })) return; - const stripeCli = createStripeCli({ org, env, throughSecretKey: true }); + const stripeCli = createStripeCli({ + org, + env, + throughSecretKey: true, + workerEnv, + }); const webhookEndpoints = await stripeCli.webhookEndpoints.list({ limit: 100, }); diff --git a/server/src/internal/orgs/orgUtils/deleteOrgUtils.ts b/server/src/internal/orgs/orgUtils/deleteOrgUtils.ts index 63e21996b..cf7bca1b8 100644 --- a/server/src/internal/orgs/orgUtils/deleteOrgUtils.ts +++ b/server/src/internal/orgs/orgUtils/deleteOrgUtils.ts @@ -48,19 +48,28 @@ export const deleteSvixWebhooks = async ({ export const deleteStripeWebhooks = async ({ org, logger, + workerEnv, }: { org: Organization; logger: Logger; + workerEnv?: Env; }) => { + if (!workerEnv) { + logger.error(`Cannot delete stripe webhooks for ${org.id}: missing Worker env`); + return; + } + try { await deleteStripeWebhook({ org: org, env: AppEnv.Sandbox, + workerEnv, }); await deleteStripeWebhook({ org: org, env: AppEnv.Live, + workerEnv, }); } catch (error: any) { logger.error( diff --git a/server/src/internal/platform/platformBeta/handlers/handleLegacyPlatformExchange.ts b/server/src/internal/platform/platformBeta/handlers/handleLegacyPlatformExchange.ts index 51597d9c1..3b1b75021 100644 --- a/server/src/internal/platform/platformBeta/handlers/handleLegacyPlatformExchange.ts +++ b/server/src/internal/platform/platformBeta/handlers/handleLegacyPlatformExchange.ts @@ -147,6 +147,7 @@ export const handleLegacyPlatformExchange = createRoute({ env: AppEnv.Sandbox, stripeKey: stripe_test_key, logger, + workerEnv: c.env, }); if (reconnectStripe) { @@ -188,6 +189,7 @@ export const handleLegacyPlatformExchange = createRoute({ env: AppEnv.Live, stripeKey: stripe_live_key, logger, + workerEnv: c.env, }); if (reconnectStripe) { diff --git a/server/src/internal/product/actions/updateProduct.ts b/server/src/internal/product/actions/updateProduct.ts index c301936a8..ec9d26d18 100644 --- a/server/src/internal/product/actions/updateProduct.ts +++ b/server/src/internal/product/actions/updateProduct.ts @@ -116,6 +116,7 @@ export const updateProduct = async ({ org, rewardPrograms, logger: ctx.logger, + workerEnv: ctx.workerEnv, }); const itemsExist = notNullish(updates.items); diff --git a/server/src/internal/products/handlers/handleUpdatePlan/handleUpdatePlanV1.ts b/server/src/internal/products/handlers/handleUpdatePlan/handleUpdatePlanV1.ts index 9a07e8388..9b2dcfb0c 100644 --- a/server/src/internal/products/handlers/handleUpdatePlan/handleUpdatePlanV1.ts +++ b/server/src/internal/products/handlers/handleUpdatePlan/handleUpdatePlanV1.ts @@ -137,6 +137,7 @@ export const handleUpdatePlanV1 = createRoute({ org, rewardPrograms, logger: ctx.logger, + workerEnv: ctx.workerEnv, }); const itemsExist = notNullish(v1_2Body.items); diff --git a/server/src/internal/products/handlers/handleUpdatePlan/updateProductDetails.ts b/server/src/internal/products/handlers/handleUpdatePlan/updateProductDetails.ts index eb78bafa7..386448951 100644 --- a/server/src/internal/products/handlers/handleUpdatePlan/updateProductDetails.ts +++ b/server/src/internal/products/handlers/handleUpdatePlan/updateProductDetails.ts @@ -65,18 +65,21 @@ const updateStripeProductNames = async ({ curProduct, newName, logger, + workerEnv, }: { db: DrizzleCli; org: Organization; curProduct: FullProduct; newName: string; logger: any; + workerEnv?: Env; }) => { if (!isStripeConnected({ org, env: curProduct.env as AppEnv })) return; const stripeCli = createStripeCli({ org, env: curProduct.env as AppEnv, + workerEnv, }); const stripeProdId = curProduct.processor?.id; @@ -160,6 +163,7 @@ export const handleUpdateProductDetails = async ({ org, rewardPrograms, logger, + workerEnv, }: { db: DrizzleCli; curProduct: FullProduct; @@ -169,6 +173,7 @@ export const handleUpdateProductDetails = async ({ org: Organization; rewardPrograms: RewardProgram[]; logger: any; + workerEnv?: Env; }) => { const customersOnAllVersions = await CusProductService.getByProductId({ db, @@ -267,6 +272,7 @@ export const handleUpdateProductDetails = async ({ curProduct, newName: newProduct.name!, logger, + workerEnv, }); } diff --git a/server/src/internal/products/internalHandlers/handleGetStripeCoupons.ts b/server/src/internal/products/internalHandlers/handleGetStripeCoupons.ts index 7073b3ed9..7b94fc4db 100644 --- a/server/src/internal/products/internalHandlers/handleGetStripeCoupons.ts +++ b/server/src/internal/products/internalHandlers/handleGetStripeCoupons.ts @@ -9,9 +9,9 @@ import { createRoute } from "@/honoMiddlewares/routeHandler"; export const handleGetStripeCoupons = createRoute({ scopes: [Scopes.Plans.Read], handler: async (c) => { - const { org, env } = c.get("ctx"); + const { org, env, workerEnv } = c.get("ctx"); - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv }); const validCoupons = []; for await (const coupon of stripeCli.coupons.list({ limit: 100 })) { if (coupon.valid) { diff --git a/server/src/internal/rewards/actions/redeemPromoCode.ts b/server/src/internal/rewards/actions/redeemPromoCode.ts index 168af63d0..76992d71a 100644 --- a/server/src/internal/rewards/actions/redeemPromoCode.ts +++ b/server/src/internal/rewards/actions/redeemPromoCode.ts @@ -120,7 +120,7 @@ export const redeemPromoCode = async ({ // 4.5. First-time restriction (no Stripe customer → necessarily first-time) if (promoCode.first_time_transaction && fullCustomer.processor?.id) { - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); await assertFirstTimeStripeCustomer({ stripeCli, stripeCustomerId: fullCustomer.processor.id, diff --git a/server/src/internal/rewards/actions/triggerCheckoutReward.ts b/server/src/internal/rewards/actions/triggerCheckoutReward.ts index 03890cfd0..a65d90323 100644 --- a/server/src/internal/rewards/actions/triggerCheckoutReward.ts +++ b/server/src/internal/rewards/actions/triggerCheckoutReward.ts @@ -37,6 +37,7 @@ export const runTriggerCheckoutReward = async ({ const stripeCli = createStripeCli({ org, env, + workerEnv: ctx.workerEnv, }); // Check if redemption exists diff --git a/server/src/internal/rewards/actions/triggerDiscount.ts b/server/src/internal/rewards/actions/triggerDiscount.ts index 3eaaa2b9a..c3aa12b42 100644 --- a/server/src/internal/rewards/actions/triggerDiscount.ts +++ b/server/src/internal/rewards/actions/triggerDiscount.ts @@ -79,6 +79,7 @@ export const triggerDiscount = async ({ org, env, legacyVersion: true, + workerEnv: ctx.workerEnv, }); await getOrCreateStripeCustomer({ diff --git a/server/src/internal/rewards/actions/triggerFreePaidProduct.ts b/server/src/internal/rewards/actions/triggerFreePaidProduct.ts index 8d05b095d..4158dd6d6 100644 --- a/server/src/internal/rewards/actions/triggerFreePaidProduct.ts +++ b/server/src/internal/rewards/actions/triggerFreePaidProduct.ts @@ -75,7 +75,7 @@ export const triggerFreePaidProduct = async ({ }); } - const stripeCli = createStripeCli({ org, env }); + const stripeCli = createStripeCli({ org, env, workerEnv: ctx.workerEnv }); const applied = [false, false]; // [referrerApplied, redeemerApplied] for (let i = 0; i < 2; i++) { diff --git a/server/worker-startup.cpuprofile b/server/worker-startup.cpuprofile index e84dc7d87..75d5da039 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,15,475],"positionTicks":[]},{"id":475,"callFrame":{"functionName":"fetch","scriptId":"3","url":"Volumes/sker/autumn/server/e37aaf71-54d3-4167-a0af-537138f903cc","lineNumber":5,"columnNumber":17},"hitCount":0,"children":[476],"positionTicks":[]},{"id":476,"callFrame":{"functionName":"Response","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":8,"ticks":1}]},{"id":15,"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":79,"children":[],"positionTicks":[]},{"id":4,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":-1,"columnNumber":-1},"hitCount":36,"children":[5,6,7,16,23,36,45,57,63,72,81,91,93,98,104,115,127,137,148,165,171,181,184,225,229,232,238,241,250,257,273,279,284,290,298,315,348,357,382,398,399,402,404,407,417,425,426,440,452,455,466],"positionTicks":[]},{"id":466,"callFrame":{"functionName":"inst.describe","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68120,"columnNumber":18},"hitCount":0,"children":[467],"positionTicks":[]},{"id":467,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[468],"positionTicks":[]},{"id":468,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[469],"positionTicks":[]},{"id":469,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[470],"positionTicks":[]},{"id":470,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[471],"positionTicks":[]},{"id":471,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68730,"columnNumber":54},"hitCount":0,"children":[472],"positionTicks":[]},{"id":472,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[473],"positionTicks":[]},{"id":473,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":60907,"columnNumber":56},"hitCount":0,"children":[474],"positionTicks":[]},{"id":474,"callFrame":{"functionName":"getEnumValues","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58234,"columnNumber":22},"hitCount":1,"children":[],"positionTicks":[{"line":58237,"ticks":1}]},{"id":455,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":308597,"columnNumber":2},"hitCount":0,"children":[456],"positionTicks":[]},{"id":456,"callFrame":{"functionName":"extractRelationMetadata","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":308544,"columnNumber":32},"hitCount":0,"children":[457],"positionTicks":[]},{"id":457,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52812,"columnNumber":4},"hitCount":1,"children":[],"positionTicks":[{"line":52814,"ticks":1}]},{"id":452,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":225156,"columnNumber":21},"hitCount":0,"children":[453],"positionTicks":[]},{"id":453,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":225162,"columnNumber":21},"hitCount":0,"children":[454],"positionTicks":[]},{"id":454,"callFrame":{"functionName":"#addRoute","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":225374,"columnNumber":11},"hitCount":1,"children":[465],"positionTicks":[{"line":225376,"ticks":1}]},{"id":465,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":225882,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":440,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":268646,"columnNumber":18},"hitCount":0,"children":[441],"positionTicks":[]},{"id":441,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":268496,"columnNumber":18},"hitCount":0,"children":[442],"positionTicks":[]},{"id":442,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":268502,"columnNumber":14},"hitCount":0,"children":[443],"positionTicks":[]},{"id":443,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":268496,"columnNumber":18},"hitCount":0,"children":[444],"positionTicks":[]},{"id":444,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":268502,"columnNumber":14},"hitCount":0,"children":[445],"positionTicks":[]},{"id":445,"callFrame":{"functionName":"toAsnItem","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":268591,"columnNumber":18},"hitCount":0,"children":[446],"positionTicks":[]},{"id":446,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":267846,"columnNumber":32},"hitCount":0,"children":[447],"positionTicks":[]},{"id":447,"callFrame":{"functionName":"fromBER","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":265253,"columnNumber":16},"hitCount":0,"children":[448],"positionTicks":[]},{"id":448,"callFrame":{"functionName":"localFromBER","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":265045,"columnNumber":21},"hitCount":0,"children":[449],"positionTicks":[]},{"id":449,"callFrame":{"functionName":"localChangeType","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":265033,"columnNumber":24},"hitCount":0,"children":[450],"positionTicks":[]},{"id":450,"callFrame":{"functionName":"OctetString","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":265582,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":265593,"ticks":1}]},{"id":426,"callFrame":{"functionName":"url2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140285,"columnNumber":13},"hitCount":0,"children":[427],"positionTicks":[]},{"id":427,"callFrame":{"functionName":"_url2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":137623,"columnNumber":14},"hitCount":0,"children":[428],"positionTicks":[]},{"id":428,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[429],"positionTicks":[]},{"id":429,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[430],"positionTicks":[]},{"id":430,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140281,"columnNumber":54},"hitCount":0,"children":[431],"positionTicks":[]},{"id":431,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[432],"positionTicks":[]},{"id":432,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129467,"columnNumber":56},"hitCount":0,"children":[433],"positionTicks":[]},{"id":433,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[434],"positionTicks":[]},{"id":434,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129435,"columnNumber":74},"hitCount":0,"children":[435],"positionTicks":[]},{"id":435,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[436],"positionTicks":[]},{"id":436,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129415,"columnNumber":62},"hitCount":0,"children":[437,439],"positionTicks":[]},{"id":439,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":128671,"columnNumber":37},"hitCount":0,"children":[],"positionTicks":[]},{"id":437,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[438],"positionTicks":[]},{"id":438,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":425,"callFrame":{"functionName":"or","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140096,"columnNumber":6},"hitCount":1,"children":[],"positionTicks":[{"line":140098,"ticks":1}]},{"id":417,"callFrame":{"functionName":"xor2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140788,"columnNumber":13},"hitCount":0,"children":[418],"positionTicks":[]},{"id":418,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[419],"positionTicks":[]},{"id":419,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[420],"positionTicks":[]},{"id":420,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140782,"columnNumber":53},"hitCount":0,"children":[421],"positionTicks":[]},{"id":421,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[422],"positionTicks":[]},{"id":422,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140768,"columnNumber":58},"hitCount":0,"children":[423],"positionTicks":[]},{"id":423,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[424],"positionTicks":[]},{"id":424,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130259,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":407,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140078,"columnNumber":12},"hitCount":0,"children":[408],"positionTicks":[]},{"id":408,"callFrame":{"functionName":"optional2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":141062,"columnNumber":18},"hitCount":0,"children":[409],"positionTicks":[]},{"id":409,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[410],"positionTicks":[]},{"id":410,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[411],"positionTicks":[]},{"id":411,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":141056,"columnNumber":64},"hitCount":0,"children":[412],"positionTicks":[]},{"id":412,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[413],"positionTicks":[]},{"id":413,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130944,"columnNumber":66},"hitCount":0,"children":[414,451],"positionTicks":[]},{"id":451,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127692,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127695,"ticks":1}]},{"id":414,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[415],"positionTicks":[]},{"id":415,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":0,"children":[416],"positionTicks":[]},{"id":416,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127692,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127695,"ticks":1}]},{"id":404,"callFrame":{"functionName":"nonempty","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140180,"columnNumber":12},"hitCount":0,"children":[405],"positionTicks":[]},{"id":405,"callFrame":{"functionName":"_minLength2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":138176,"columnNumber":20},"hitCount":0,"children":[406],"positionTicks":[]},{"id":406,"callFrame":{"functionName":"normalizeParams2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127900,"columnNumber":25},"hitCount":0,"children":[],"positionTicks":[]},{"id":402,"callFrame":{"functionName":"any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140615,"columnNumber":13},"hitCount":0,"children":[403],"positionTicks":[]},{"id":403,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":138015,"columnNumber":14},"hitCount":0,"children":[],"positionTicks":[]},{"id":399,"callFrame":{"functionName":"inst.min","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68381,"columnNumber":13},"hitCount":0,"children":[400],"positionTicks":[]},{"id":400,"callFrame":{"functionName":"_gte","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":66676,"columnNumber":13},"hitCount":0,"children":[401],"positionTicks":[]},{"id":401,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":58127,"ticks":1}]},{"id":398,"callFrame":{"functionName":"u2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":113537,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":113550,"ticks":1}]},{"id":382,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176244,"columnNumber":16},"hitCount":0,"children":[383],"positionTicks":[]},{"id":383,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":137537,"columnNumber":17},"hitCount":1,"children":[],"positionTicks":[{"line":137539,"ticks":1}]},{"id":357,"callFrame":{"functionName":"_lazy3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176484,"columnNumber":15},"hitCount":0,"children":[358],"positionTicks":[]},{"id":358,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[359],"positionTicks":[]},{"id":359,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[360],"positionTicks":[]},{"id":360,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176479,"columnNumber":63},"hitCount":0,"children":[361],"positionTicks":[]},{"id":361,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[362],"positionTicks":[]},{"id":362,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176218,"ticks":1}]},{"id":348,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176471,"columnNumber":14},"hitCount":0,"children":[349],"positionTicks":[]},{"id":349,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[350],"positionTicks":[]},{"id":350,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[351],"positionTicks":[]},{"id":351,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176466,"columnNumber":63},"hitCount":0,"children":[352],"positionTicks":[]},{"id":352,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[353,372],"positionTicks":[]},{"id":372,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176215,"ticks":1}]},{"id":353,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131134,"columnNumber":58},"hitCount":0,"children":[354],"positionTicks":[]},{"id":354,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[355],"positionTicks":[]},{"id":355,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":0,"children":[356],"positionTicks":[]},{"id":356,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127692,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127695,"ticks":1}]},{"id":315,"callFrame":{"functionName":"boolean11","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177401,"columnNumber":18},"hitCount":0,"children":[316,323],"positionTicks":[]},{"id":323,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177470,"columnNumber":30},"hitCount":0,"children":[324],"positionTicks":[]},{"id":324,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176420,"columnNumber":19},"hitCount":0,"children":[325],"positionTicks":[]},{"id":325,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[326],"positionTicks":[]},{"id":326,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127477,"ticks":1}]},{"id":316,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176244,"columnNumber":16},"hitCount":0,"children":[317],"positionTicks":[]},{"id":317,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":137537,"columnNumber":17},"hitCount":0,"children":[318],"positionTicks":[]},{"id":318,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[319],"positionTicks":[]},{"id":319,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[320],"positionTicks":[]},{"id":320,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176239,"columnNumber":67},"hitCount":0,"children":[321],"positionTicks":[]},{"id":321,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[322],"positionTicks":[]},{"id":322,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176234,"ticks":1}]},{"id":298,"callFrame":{"functionName":"nullable4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177461,"columnNumber":18},"hitCount":0,"children":[299,373],"positionTicks":[]},{"id":373,"callFrame":{"functionName":"_undefined7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176284,"columnNumber":20},"hitCount":0,"children":[374],"positionTicks":[]},{"id":374,"callFrame":{"functionName":"_undefined5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":137999,"columnNumber":20},"hitCount":0,"children":[375],"positionTicks":[]},{"id":375,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[376],"positionTicks":[]},{"id":376,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[377],"positionTicks":[]},{"id":377,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176279,"columnNumber":73},"hitCount":0,"children":[378],"positionTicks":[]},{"id":378,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[379],"positionTicks":[]},{"id":379,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129831,"columnNumber":68},"hitCount":0,"children":[380],"positionTicks":[]},{"id":380,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[381],"positionTicks":[]},{"id":381,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":129322,"ticks":1}]},{"id":299,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176471,"columnNumber":14},"hitCount":0,"children":[300],"positionTicks":[]},{"id":300,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[301,347],"positionTicks":[]},{"id":347,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129321,"columnNumber":29},"hitCount":1,"children":[],"positionTicks":[{"line":129323,"ticks":1}]},{"id":301,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[302],"positionTicks":[]},{"id":302,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176466,"columnNumber":63},"hitCount":0,"children":[303],"positionTicks":[]},{"id":303,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[304],"positionTicks":[]},{"id":304,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131134,"columnNumber":58},"hitCount":0,"children":[305],"positionTicks":[]},{"id":305,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[306],"positionTicks":[]},{"id":306,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":0,"children":[307],"positionTicks":[]},{"id":307,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127692,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127695,"ticks":1}]},{"id":290,"callFrame":{"functionName":"string9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177391,"columnNumber":16},"hitCount":0,"children":[291,308,390],"positionTicks":[]},{"id":390,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176471,"columnNumber":14},"hitCount":0,"children":[391],"positionTicks":[]},{"id":391,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[392],"positionTicks":[]},{"id":392,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[393],"positionTicks":[]},{"id":393,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176466,"columnNumber":63},"hitCount":0,"children":[394],"positionTicks":[]},{"id":394,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[395],"positionTicks":[]},{"id":395,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":131134,"columnNumber":58},"hitCount":0,"children":[396],"positionTicks":[]},{"id":396,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[397],"positionTicks":[]},{"id":397,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":129322,"ticks":1}]},{"id":308,"callFrame":{"functionName":"union4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176357,"columnNumber":15},"hitCount":0,"children":[309],"positionTicks":[]},{"id":309,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[310],"positionTicks":[]},{"id":310,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[311],"positionTicks":[]},{"id":311,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176352,"columnNumber":65},"hitCount":0,"children":[312],"positionTicks":[]},{"id":312,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[313],"positionTicks":[]},{"id":313,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130259,"columnNumber":60},"hitCount":0,"children":[314],"positionTicks":[]},{"id":314,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127692,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127695,"ticks":1}]},{"id":291,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177470,"columnNumber":30},"hitCount":0,"children":[292,327],"positionTicks":[]},{"id":327,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176471,"columnNumber":14},"hitCount":0,"children":[328],"positionTicks":[]},{"id":328,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[329],"positionTicks":[]},{"id":329,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[330],"positionTicks":[]},{"id":330,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176466,"columnNumber":63},"hitCount":0,"children":[331],"positionTicks":[]},{"id":331,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[332],"positionTicks":[]},{"id":332,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176234,"ticks":1}]},{"id":292,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176420,"columnNumber":19},"hitCount":0,"children":[293],"positionTicks":[]},{"id":293,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[294],"positionTicks":[]},{"id":294,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[295],"positionTicks":[]},{"id":295,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176415,"columnNumber":73},"hitCount":0,"children":[296],"positionTicks":[]},{"id":296,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[297],"positionTicks":[]},{"id":297,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":2,"children":[],"positionTicks":[{"line":176233,"ticks":1},{"line":176210,"ticks":1}]},{"id":284,"callFrame":{"functionName":"_enum5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176393,"columnNumber":15},"hitCount":0,"children":[285],"positionTicks":[]},{"id":285,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[286],"positionTicks":[]},{"id":286,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[287],"positionTicks":[]},{"id":287,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176387,"columnNumber":63},"hitCount":0,"children":[288],"positionTicks":[]},{"id":288,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[289],"positionTicks":[]},{"id":289,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176238,"ticks":1}]},{"id":279,"callFrame":{"functionName":"_default5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176456,"columnNumber":18},"hitCount":0,"children":[280],"positionTicks":[]},{"id":280,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[281],"positionTicks":[]},{"id":281,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[282],"positionTicks":[]},{"id":282,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176451,"columnNumber":69},"hitCount":0,"children":[283],"positionTicks":[]},{"id":283,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127492,"ticks":1}]},{"id":273,"callFrame":{"functionName":"optional4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177453,"columnNumber":18},"hitCount":0,"children":[274,333,384],"positionTicks":[]},{"id":384,"callFrame":{"functionName":"_null7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176293,"columnNumber":15},"hitCount":0,"children":[385],"positionTicks":[]},{"id":385,"callFrame":{"functionName":"_null5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":138007,"columnNumber":15},"hitCount":0,"children":[386],"positionTicks":[]},{"id":386,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[387],"positionTicks":[]},{"id":387,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[388],"positionTicks":[]},{"id":388,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176288,"columnNumber":63},"hitCount":0,"children":[389],"positionTicks":[]},{"id":389,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127492,"ticks":1}]},{"id":333,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176420,"columnNumber":19},"hitCount":0,"children":[334],"positionTicks":[]},{"id":334,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[335],"positionTicks":[]},{"id":335,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[336],"positionTicks":[]},{"id":336,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176415,"columnNumber":73},"hitCount":0,"children":[337],"positionTicks":[]},{"id":337,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[338],"positionTicks":[]},{"id":338,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176213,"ticks":1}]},{"id":274,"callFrame":{"functionName":"optional3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176432,"columnNumber":18},"hitCount":0,"children":[275],"positionTicks":[]},{"id":275,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[276],"positionTicks":[]},{"id":276,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[277],"positionTicks":[]},{"id":277,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176427,"columnNumber":71},"hitCount":0,"children":[278],"positionTicks":[]},{"id":278,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127490,"ticks":1}]},{"id":257,"callFrame":{"functionName":"object3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176338,"columnNumber":16},"hitCount":0,"children":[258],"positionTicks":[]},{"id":258,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[259],"positionTicks":[]},{"id":259,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[260],"positionTicks":[]},{"id":260,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176332,"columnNumber":67},"hitCount":0,"children":[261],"positionTicks":[]},{"id":261,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[262],"positionTicks":[]},{"id":262,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130047,"columnNumber":62},"hitCount":1,"children":[263],"positionTicks":[{"line":130053,"ticks":1}]},{"id":263,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[264],"positionTicks":[]},{"id":264,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":0,"children":[265],"positionTicks":[]},{"id":265,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127692,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127695,"ticks":1}]},{"id":250,"callFrame":{"functionName":"number9","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177424,"columnNumber":16},"hitCount":0,"children":[251,365],"positionTicks":[]},{"id":365,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176244,"columnNumber":16},"hitCount":0,"children":[366],"positionTicks":[]},{"id":366,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":137537,"columnNumber":17},"hitCount":0,"children":[367],"positionTicks":[]},{"id":367,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[368],"positionTicks":[]},{"id":368,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[369],"positionTicks":[]},{"id":369,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176239,"columnNumber":67},"hitCount":0,"children":[370],"positionTicks":[]},{"id":370,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[371],"positionTicks":[]},{"id":371,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176218,"ticks":1}]},{"id":251,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177470,"columnNumber":30},"hitCount":0,"children":[252,339],"positionTicks":[]},{"id":339,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176420,"columnNumber":19},"hitCount":0,"children":[340],"positionTicks":[]},{"id":340,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[341],"positionTicks":[]},{"id":341,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[342],"positionTicks":[]},{"id":342,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176415,"columnNumber":73},"hitCount":0,"children":[343],"positionTicks":[]},{"id":343,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[344],"positionTicks":[]},{"id":344,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130913,"columnNumber":68},"hitCount":0,"children":[345],"positionTicks":[]},{"id":345,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[346],"positionTicks":[]},{"id":346,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":129322,"ticks":1}]},{"id":252,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176471,"columnNumber":14},"hitCount":0,"children":[253],"positionTicks":[]},{"id":253,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[254],"positionTicks":[]},{"id":254,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[255],"positionTicks":[]},{"id":255,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176466,"columnNumber":63},"hitCount":0,"children":[256],"positionTicks":[]},{"id":256,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127492,"ticks":1}]},{"id":241,"callFrame":{"functionName":"inboundSchema","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177701,"columnNumber":22},"hitCount":0,"children":[242,266],"positionTicks":[]},{"id":266,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":177704,"columnNumber":19},"hitCount":0,"children":[267],"positionTicks":[]},{"id":267,"callFrame":{"functionName":"literal3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176407,"columnNumber":17},"hitCount":0,"children":[268],"positionTicks":[]},{"id":268,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[269],"positionTicks":[]},{"id":269,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[270],"positionTicks":[]},{"id":270,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176402,"columnNumber":69},"hitCount":0,"children":[271],"positionTicks":[]},{"id":271,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[272],"positionTicks":[]},{"id":272,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176209,"columnNumber":63},"hitCount":2,"children":[],"positionTicks":[{"line":176233,"ticks":1},{"line":176234,"ticks":1}]},{"id":242,"callFrame":{"functionName":"union4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176357,"columnNumber":15},"hitCount":0,"children":[243],"positionTicks":[]},{"id":243,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[244],"positionTicks":[]},{"id":244,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[245],"positionTicks":[]},{"id":245,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176352,"columnNumber":65},"hitCount":0,"children":[246],"positionTicks":[]},{"id":246,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[247],"positionTicks":[]},{"id":247,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130259,"columnNumber":60},"hitCount":0,"children":[248],"positionTicks":[]},{"id":248,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[249],"positionTicks":[]},{"id":249,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":129304,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":238,"callFrame":{"functionName":"array3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176324,"columnNumber":15},"hitCount":0,"children":[239],"positionTicks":[]},{"id":239,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[240],"positionTicks":[]},{"id":240,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[363],"positionTicks":[{"line":127490,"ticks":1}]},{"id":363,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":176319,"columnNumber":65},"hitCount":0,"children":[364],"positionTicks":[]},{"id":364,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127489,"ticks":1}]},{"id":232,"callFrame":{"functionName":"ZodString2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":95772,"columnNumber":20},"hitCount":0,"children":[233],"positionTicks":[]},{"id":233,"callFrame":{"functionName":"_ZodString3","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":95231,"columnNumber":17},"hitCount":0,"children":[234],"positionTicks":[]},{"id":234,"callFrame":{"functionName":"ZodType2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":95038,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":95059,"ticks":1}]},{"id":229,"callFrame":{"functionName":"ZodObject2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":96936,"columnNumber":20},"hitCount":0,"children":[230],"positionTicks":[]},{"id":230,"callFrame":{"functionName":"_ZodObject","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":96626,"columnNumber":13},"hitCount":0,"children":[231],"positionTicks":[]},{"id":231,"callFrame":{"functionName":"ZodType2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":95038,"columnNumber":13},"hitCount":1,"children":[],"positionTicks":[{"line":95044,"ticks":1}]},{"id":225,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":95071,"columnNumber":10},"hitCount":0,"children":[226],"positionTicks":[]},{"id":226,"callFrame":{"functionName":"ZodOptional2.create","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":98011,"columnNumber":22},"hitCount":0,"children":[227],"positionTicks":[]},{"id":227,"callFrame":{"functionName":"processCreateParams","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":94835,"columnNumber":28},"hitCount":0,"children":[228],"positionTicks":[]},{"id":228,"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":184,"callFrame":{"functionName":"object2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140741,"columnNumber":16},"hitCount":0,"children":[185],"positionTicks":[]},{"id":185,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[186],"positionTicks":[]},{"id":186,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[187],"positionTicks":[]},{"id":187,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140692,"columnNumber":60},"hitCount":0,"children":[188],"positionTicks":[]},{"id":188,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[189],"positionTicks":[]},{"id":189,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130111,"columnNumber":67},"hitCount":0,"children":[190],"positionTicks":[]},{"id":190,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[191],"positionTicks":[]},{"id":191,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":130047,"columnNumber":62},"hitCount":1,"children":[],"positionTicks":[{"line":130078,"ticks":1}]},{"id":181,"callFrame":{"functionName":"_enum4","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140964,"columnNumber":15},"hitCount":0,"children":[182],"positionTicks":[]},{"id":182,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[183],"positionTicks":[]},{"id":183,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127490,"ticks":1}]},{"id":171,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[172,192],"positionTicks":[]},{"id":192,"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":[193],"positionTicks":[]},{"id":193,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[194,221],"positionTicks":[]},{"id":221,"callFrame":{"functionName":"../node_modules/.bun/@better-auth+core@1.6.5+c637e6fd07c35fe7/node_modules/@better-auth/core/dist/db/adapter/index.mjs","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":18509,"columnNumber":122},"hitCount":0,"children":[222],"positionTicks":[]},{"id":222,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[223],"positionTicks":[]},{"id":223,"callFrame":{"functionName":"../node_modules/.bun/@better-auth+core@1.6.5+c637e6fd07c35fe7/node_modules/@better-auth/core/dist/db/adapter/factory.mjs","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":17761,"columnNumber":124},"hitCount":0,"children":[224],"positionTicks":[]},{"id":224,"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":194,"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":[195],"positionTicks":[]},{"id":195,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[196],"positionTicks":[]},{"id":196,"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":[197],"positionTicks":[]},{"id":197,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[198],"positionTicks":[]},{"id":198,"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":[199],"positionTicks":[]},{"id":199,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[200,218],"positionTicks":[]},{"id":218,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/schema/alter-table-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":30384,"columnNumber":98},"hitCount":0,"children":[219],"positionTicks":[]},{"id":219,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[220],"positionTicks":[]},{"id":220,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/schema/unique-constraint-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":30243,"columnNumber":104},"hitCount":1,"children":[],"positionTicks":[{"line":30246,"ticks":1}]},{"id":200,"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":[201],"positionTicks":[]},{"id":201,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[202],"positionTicks":[]},{"id":202,"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":[203],"positionTicks":[]},{"id":203,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[204],"positionTicks":[]},{"id":204,"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":[205],"positionTicks":[]},{"id":205,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[206],"positionTicks":[]},{"id":206,"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":[207],"positionTicks":[]},{"id":207,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[208],"positionTicks":[]},{"id":208,"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":[209],"positionTicks":[]},{"id":209,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[210],"positionTicks":[]},{"id":210,"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":[211],"positionTicks":[]},{"id":211,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[212],"positionTicks":[]},{"id":212,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/query-builder/over-builder.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":20984,"columnNumber":98},"hitCount":0,"children":[213],"positionTicks":[]},{"id":213,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[214],"positionTicks":[]},{"id":214,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/operation-node/query-node.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":20689,"columnNumber":97},"hitCount":0,"children":[215],"positionTicks":[]},{"id":215,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[216],"positionTicks":[]},{"id":216,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/operation-node/select-query-node.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":20778,"columnNumber":104},"hitCount":0,"children":[217],"positionTicks":[]},{"id":217,"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":172,"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":[173],"positionTicks":[]},{"id":173,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[174],"positionTicks":[]},{"id":174,"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":[175],"positionTicks":[]},{"id":175,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[176,178],"positionTicks":[]},{"id":178,"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":[179],"positionTicks":[]},{"id":179,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[180],"positionTicks":[]},{"id":180,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+semantic-conventions@1.41.1/node_modules/@opentelemetry/semantic-conventions/build/src/resource/SemanticResourceAttributes.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":16732,"columnNumber":165},"hitCount":1,"children":[],"positionTicks":[{"line":16895,"ticks":1}]},{"id":176,"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":[177],"positionTicks":[]},{"id":177,"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":165,"callFrame":{"functionName":"number5","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140508,"columnNumber":16},"hitCount":0,"children":[166],"positionTicks":[]},{"id":166,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":137861,"columnNumber":17},"hitCount":0,"children":[167],"positionTicks":[]},{"id":167,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127507,"columnNumber":13},"hitCount":0,"children":[168],"positionTicks":[]},{"id":168,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":127474,"columnNumber":16},"hitCount":0,"children":[169],"positionTicks":[]},{"id":169,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":140450,"columnNumber":60},"hitCount":0,"children":[170],"positionTicks":[]},{"id":170,"callFrame":{"functionName":"_installLazyMethods","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":139984,"columnNumber":28},"hitCount":1,"children":[],"positionTicks":[{"line":139997,"ticks":1}]},{"id":148,"callFrame":{"functionName":"createStripe","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":113053,"columnNumber":21},"hitCount":0,"children":[149],"positionTicks":[]},{"id":149,"callFrame":{"functionName":"determineProcessUserAgentProperties","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":107311,"columnNumber":44},"hitCount":1,"children":[150],"positionTicks":[{"line":107313,"ticks":1}]},{"id":150,"callFrame":{"functionName":"get process","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[151],"positionTicks":[]},{"id":151,"callFrame":{"functionName":"","scriptId":"54","url":"node-internal:public_process","lineNumber":0,"columnNumber":0},"hitCount":0,"children":[152],"positionTicks":[]},{"id":152,"callFrame":{"functionName":"ReadStream","scriptId":"56","url":"node-internal:internal_fs_streams","lineNumber":423,"columnNumber":26},"hitCount":0,"children":[153],"positionTicks":[]},{"id":153,"callFrame":{"functionName":"Readable","scriptId":"35","url":"node-internal:streams_readable","lineNumber":330,"columnNumber":24},"hitCount":0,"children":[154],"positionTicks":[]},{"id":154,"callFrame":{"functionName":"construct","scriptId":"41","url":"node-internal:streams_destroy","lineNumber":210,"columnNumber":25},"hitCount":1,"children":[],"positionTicks":[{"line":223,"ticks":1}]},{"id":137,"callFrame":{"functionName":"genTtable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":106014,"columnNumber":18},"hitCount":1,"children":[],"positionTicks":[{"line":106026,"ticks":1}]},{"id":127,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[128,136,138,155,235],"positionTicks":[{"line":12,"ticks":1}]},{"id":235,"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":[236],"positionTicks":[]},{"id":236,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[237],"positionTicks":[]},{"id":237,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":43345,"columnNumber":112},"hitCount":1,"children":[],"positionTicks":[{"line":43481,"ticks":1}]},{"id":155,"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":[156],"positionTicks":[]},{"id":156,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[157,159],"positionTicks":[]},{"id":159,"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":[160],"positionTicks":[]},{"id":160,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[161],"positionTicks":[]},{"id":161,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/streamingSink.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":13373,"columnNumber":80},"hitCount":0,"children":[162],"positionTicks":[]},{"id":162,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[163],"positionTicks":[]},{"id":163,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/models/listResponseStreamSinkOut.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":12637,"columnNumber":95},"hitCount":0,"children":[164],"positionTicks":[]},{"id":164,"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":157,"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":[158],"positionTicks":[]},{"id":158,"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":138,"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":[139],"positionTicks":[]},{"id":139,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[140],"positionTicks":[]},{"id":140,"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":[141],"positionTicks":[]},{"id":141,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[142],"positionTicks":[]},{"id":142,"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":[143],"positionTicks":[]},{"id":143,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[144],"positionTicks":[]},{"id":144,"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":[145],"positionTicks":[]},{"id":145,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[146],"positionTicks":[]},{"id":146,"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":[147],"positionTicks":[]},{"id":147,"callFrame":{"functionName":"GetIntrinsic","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":3746,"columnNumber":65},"hitCount":1,"children":[],"positionTicks":[{"line":3757,"ticks":1}]},{"id":136,"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":1,"children":[],"positionTicks":[{"line":2238,"ticks":1}]},{"id":128,"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":[129],"positionTicks":[]},{"id":129,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[130],"positionTicks":[]},{"id":130,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/baggage/utils.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":661,"columnNumber":108},"hitCount":0,"children":[131],"positionTicks":[]},{"id":131,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[132],"positionTicks":[]},{"id":132,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/api/diag.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":527,"columnNumber":103},"hitCount":0,"children":[133],"positionTicks":[]},{"id":133,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[134],"positionTicks":[]},{"id":134,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/diag/ComponentLogger.js","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":430,"columnNumber":115},"hitCount":0,"children":[135],"positionTicks":[]},{"id":135,"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":115,"callFrame":{"functionName":"inst.gt","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68379,"columnNumber":12},"hitCount":0,"children":[116],"positionTicks":[]},{"id":116,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[117],"positionTicks":[]},{"id":117,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[118],"positionTicks":[]},{"id":118,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[119],"positionTicks":[]},{"id":119,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[120],"positionTicks":[]},{"id":120,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[121],"positionTicks":[]},{"id":121,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":0,"children":[122],"positionTicks":[]},{"id":122,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[123],"positionTicks":[]},{"id":123,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":60035,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":104,"callFrame":{"functionName":"inst.optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68107,"columnNumber":18},"hitCount":0,"children":[105],"positionTicks":[]},{"id":105,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68857,"columnNumber":17},"hitCount":0,"children":[106],"positionTicks":[]},{"id":106,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[107],"positionTicks":[]},{"id":107,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[108],"positionTicks":[]},{"id":108,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68852,"columnNumber":62},"hitCount":0,"children":[109],"positionTicks":[]},{"id":109,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[110],"positionTicks":[]},{"id":110,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[462],"positionTicks":[{"line":68140,"ticks":1}]},{"id":462,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[463],"positionTicks":[]},{"id":463,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59635,"columnNumber":56},"hitCount":0,"children":[464],"positionTicks":[]},{"id":464,"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":98,"callFrame":{"functionName":"string2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68196,"columnNumber":16},"hitCount":0,"children":[99],"positionTicks":[]},{"id":99,"callFrame":{"functionName":"_string","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":66178,"columnNumber":16},"hitCount":0,"children":[100],"positionTicks":[]},{"id":100,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[101],"positionTicks":[]},{"id":101,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[102],"positionTicks":[{"line":58108,"ticks":1}]},{"id":102,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":1,"children":[103],"positionTicks":[{"line":68183,"ticks":1}]},{"id":103,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":2,"children":[124,458],"positionTicks":[{"line":58102,"ticks":2}]},{"id":458,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[459],"positionTicks":[]},{"id":459,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[460],"positionTicks":[]},{"id":460,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59635,"columnNumber":56},"hitCount":0,"children":[461],"positionTicks":[]},{"id":461,"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":124,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68143,"columnNumber":60},"hitCount":0,"children":[125],"positionTicks":[]},{"id":125,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[126],"positionTicks":[]},{"id":126,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68126,"ticks":1}]},{"id":93,"callFrame":{"functionName":"_enum2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68767,"columnNumber":15},"hitCount":1,"children":[94],"positionTicks":[{"line":68769,"ticks":1}]},{"id":94,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[95],"positionTicks":[]},{"id":95,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[96],"positionTicks":[]},{"id":96,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68730,"columnNumber":54},"hitCount":0,"children":[97],"positionTicks":[]},{"id":97,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58108,"ticks":1}]},{"id":91,"callFrame":{"functionName":"inst.safe","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68386,"columnNumber":14},"hitCount":0,"children":[92],"positionTicks":[]},{"id":92,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":1,"children":[],"positionTicks":[{"line":68088,"ticks":1}]},{"id":81,"callFrame":{"functionName":"inst.max","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68155,"columnNumber":13},"hitCount":0,"children":[82],"positionTicks":[]},{"id":82,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[83],"positionTicks":[]},{"id":83,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[84],"positionTicks":[]},{"id":84,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[85],"positionTicks":[]},{"id":85,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[86],"positionTicks":[]},{"id":86,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[87],"positionTicks":[]},{"id":87,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":0,"children":[88],"positionTicks":[]},{"id":88,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[89],"positionTicks":[]},{"id":89,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[90],"positionTicks":[]},{"id":90,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59036,"columnNumber":36},"hitCount":0,"children":[],"positionTicks":[]},{"id":72,"callFrame":{"functionName":"inst.regex","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68150,"columnNumber":15},"hitCount":0,"children":[73],"positionTicks":[]},{"id":73,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[74],"positionTicks":[]},{"id":74,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[75],"positionTicks":[]},{"id":75,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[76],"positionTicks":[]},{"id":76,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[77],"positionTicks":[]},{"id":77,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[78],"positionTicks":[]},{"id":78,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":0,"children":[79],"positionTicks":[]},{"id":79,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[80],"positionTicks":[]},{"id":80,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":63,"callFrame":{"functionName":"inst.nullish","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68109,"columnNumber":17},"hitCount":0,"children":[64],"positionTicks":[]},{"id":64,"callFrame":{"functionName":"nullable","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68869,"columnNumber":17},"hitCount":0,"children":[65],"positionTicks":[]},{"id":65,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[66],"positionTicks":[]},{"id":66,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[67],"positionTicks":[]},{"id":67,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68864,"columnNumber":62},"hitCount":0,"children":[68],"positionTicks":[]},{"id":68,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[69],"positionTicks":[]},{"id":69,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":60998,"columnNumber":64},"hitCount":0,"children":[70],"positionTicks":[]},{"id":70,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58108,"ticks":1}]},{"id":57,"callFrame":{"functionName":"literal","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68797,"columnNumber":16},"hitCount":0,"children":[58],"positionTicks":[]},{"id":58,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[59],"positionTicks":[]},{"id":59,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[60],"positionTicks":[]},{"id":60,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68784,"columnNumber":60},"hitCount":0,"children":[61],"positionTicks":[]},{"id":61,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[62],"positionTicks":[]},{"id":62,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68112,"ticks":1}]},{"id":45,"callFrame":{"functionName":"inst.int","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68385,"columnNumber":13},"hitCount":0,"children":[46],"positionTicks":[]},{"id":46,"callFrame":{"functionName":"int","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68409,"columnNumber":12},"hitCount":0,"children":[47],"positionTicks":[]},{"id":47,"callFrame":{"functionName":"_int","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":66480,"columnNumber":13},"hitCount":0,"children":[48],"positionTicks":[]},{"id":48,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[49],"positionTicks":[]},{"id":49,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[50],"positionTicks":[]},{"id":50,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68405,"columnNumber":70},"hitCount":0,"children":[51],"positionTicks":[]},{"id":51,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[52],"positionTicks":[]},{"id":52,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":68388,"ticks":1}]},{"id":36,"callFrame":{"functionName":"number2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68401,"columnNumber":16},"hitCount":0,"children":[37],"positionTicks":[]},{"id":37,"callFrame":{"functionName":"_number","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":66463,"columnNumber":16},"hitCount":0,"children":[38],"positionTicks":[]},{"id":38,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[39],"positionTicks":[]},{"id":39,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[40],"positionTicks":[]},{"id":40,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":0,"children":[41],"positionTicks":[]},{"id":41,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[42],"positionTicks":[]},{"id":42,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":60035,"columnNumber":60},"hitCount":0,"children":[43],"positionTicks":[]},{"id":43,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[44],"positionTicks":[]},{"id":44,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59635,"columnNumber":56},"hitCount":0,"children":[],"positionTicks":[]},{"id":23,"callFrame":{"functionName":"inst.meta","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68131,"columnNumber":14},"hitCount":1,"children":[24,71],"positionTicks":[{"line":68137,"ticks":1}]},{"id":71,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":66134,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":24,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[25],"positionTicks":[]},{"id":25,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[26],"positionTicks":[]},{"id":26,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[27],"positionTicks":[]},{"id":27,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[28,53],"positionTicks":[]},{"id":53,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68852,"columnNumber":62},"hitCount":1,"children":[54],"positionTicks":[{"line":68854,"ticks":1}]},{"id":54,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[55],"positionTicks":[{"line":58107,"ticks":1}]},{"id":55,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[56],"positionTicks":[{"line":68078,"ticks":1}]},{"id":56,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58108,"ticks":1}]},{"id":28,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":0,"children":[29],"positionTicks":[]},{"id":29,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[30],"positionTicks":[]},{"id":30,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68143,"columnNumber":60},"hitCount":0,"children":[31],"positionTicks":[]},{"id":31,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[32],"positionTicks":[]},{"id":32,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[33],"positionTicks":[]},{"id":33,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[34],"positionTicks":[]},{"id":34,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59635,"columnNumber":56},"hitCount":0,"children":[35],"positionTicks":[]},{"id":35,"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":16,"callFrame":{"functionName":"inst.default","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68115,"columnNumber":17},"hitCount":0,"children":[17],"positionTicks":[]},{"id":17,"callFrame":{"functionName":"_default2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68886,"columnNumber":18},"hitCount":0,"children":[18],"positionTicks":[]},{"id":18,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[19],"positionTicks":[]},{"id":19,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[20],"positionTicks":[]},{"id":20,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68880,"columnNumber":60},"hitCount":0,"children":[21],"positionTicks":[]},{"id":21,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[22],"positionTicks":[]},{"id":22,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68082,"ticks":1}]},{"id":7,"callFrame":{"functionName":"object","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68581,"columnNumber":15},"hitCount":0,"children":[8],"positionTicks":[]},{"id":8,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":1,"children":[9],"positionTicks":[{"line":58127,"ticks":1}]},{"id":9,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[10],"positionTicks":[]},{"id":10,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":68562,"columnNumber":58},"hitCount":0,"children":[11],"positionTicks":[]},{"id":11,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[12],"positionTicks":[{"line":58108,"ticks":1}]},{"id":12,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":60284,"columnNumber":60},"hitCount":0,"children":[13,111],"positionTicks":[]},{"id":111,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[112],"positionTicks":[]},{"id":112,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":59635,"columnNumber":56},"hitCount":0,"children":[113],"positionTicks":[]},{"id":113,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[114],"positionTicks":[]},{"id":114,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":13,"callFrame":{"functionName":"get value","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58253,"columnNumber":13},"hitCount":0,"children":[14],"positionTicks":[]},{"id":14,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":58350,"columnNumber":24},"hitCount":1,"children":[],"positionTicks":[{"line":58352,"ticks":1}]},{"id":6,"callFrame":{"functionName":"__export","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":13,"columnNumber":15},"hitCount":1,"children":[],"positionTicks":[{"line":16,"ticks":1}]},{"id":5,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/autumn/server/index.js","lineNumber":52446,"columnNumber":37},"hitCount":1,"children":[],"positionTicks":[{"line":52448,"ticks":1}]},{"id":3,"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":5,"children":[],"positionTicks":[]},{"id":2,"callFrame":{"functionName":"(idle)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[],"positionTicks":[]}],"startTime":517441573285,"endTime":517441967265,"samples":[2,3,3,3,3,4,4,4,5,6,14,4,15,22,35,4,44,52,56,15,4,23,15,54,53,62,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,70,11,71,55,15,15,15,15,15,80,3,89,90,92,97,15,15,103,110,101,114,4,123,102,126,103,135,4,136,137,137,137,147,149,154,158,164,4,4,4,170,177,180,183,191,217,220,224,15,15,15,15,228,231,234,4,237,127,240,4,249,256,265,15,15,15,15,15,272,278,283,289,4,297,307,314,322,326,332,338,297,346,347,272,356,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,262,362,364,371,372,381,383,389,397,398,401,15,403,166,406,416,424,425,438,436,439,4,4,450,451,454,457,461,464,454,465,93,474,8,476,15,15,15,15,15,15,15,15],"timeDeltas":[83028,1571,1493,1514,1506,1505,1558,1512,1486,1503,1512,1497,1497,1507,1504,1492,715,791,1500,1507,1496,1504,1509,1501,1507,1504,1509,1536,1514,1516,1513,1491,1511,1538,1475,1515,1500,1505,1501,1536,1494,1530,1483,1536,1497,1499,1503,1506,801,701,1511,1246,1536,1487,1507,535,972,304,6,1181,1492,1512,1498,1499,1501,1498,1503,1502,348,1149,1499,1504,1499,1502,1525,1495,74,283,1137,1501,1502,1508,1507,1511,1233,1254,1493,1520,1456,1168,1493,1508,1482,1503,1493,1528,1482,1505,1522,1398,1489,1504,1500,1504,1230,1504,1190,303,1495,1508,1420,1508,1501,1504,1512,1540,1489,1496,1505,1500,1509,1492,1509,1504,1501,1504,1501,1516,1506,1514,1502,1532,1518,1491,1512,1533,1494,1508,1195,1507,1507,1532,1501,1499,1502,1504,1503,1503,1516,1510,1507,1256,1505,1506,1507,1503,1505,1503,1503,1507,1505,1505,1510,1503,1507,1506,1504,1508,1506,1502,1503,1505,1504,1517,1498,1506,1501,1452,1509,1506,1504,1505,1507,1505,1502,1507,1492,1509,1495,1507,1503,1499,1504,1500,776,166,436,127,101,1393,1348,13,5,132,1495,1505,1498,1503,1498,1505,1496,485,368,651,1499,1507,1531,1491,1500,1506,1501,1502,1507,1505,1505]} \ 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,6,424],"positionTicks":[]},{"id":424,"callFrame":{"functionName":"fetch","scriptId":"3","url":"Volumes/sker/resources/coding/autumn/server/a0539e0a-6989-4cc6-8580-460660dbad44","lineNumber":5,"columnNumber":17},"hitCount":0,"children":[425],"positionTicks":[]},{"id":425,"callFrame":{"functionName":"Response","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":2,"children":[],"positionTicks":[{"line":8,"ticks":2}]},{"id":6,"callFrame":{"functionName":"(garbage collector)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":90,"children":[],"positionTicks":[]},{"id":5,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":-1,"columnNumber":-1},"hitCount":46,"children":[7,8,11,17,23,30,35,45,54,55,57,64,73,82,87,102,111,121,130,142,147,150,156,171,180,213,214,215,224,230,238,254,265,291,304,310,316,335,351,353,355,357,362,365,373,378,392,395,410,412,421],"positionTicks":[]},{"id":421,"callFrame":{"functionName":"Hono2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":226340,"columnNumber":13},"hitCount":0,"children":[422],"positionTicks":[]},{"id":422,"callFrame":{"functionName":"_Hono","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":225351,"columnNumber":13},"hitCount":0,"children":[423],"positionTicks":[]},{"id":423,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":225353,"columnNumber":23},"hitCount":1,"children":[],"positionTicks":[{"line":225355,"ticks":1}]},{"id":412,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":225354,"columnNumber":21},"hitCount":0,"children":[413],"positionTicks":[]},{"id":413,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":225360,"columnNumber":21},"hitCount":0,"children":[414],"positionTicks":[]},{"id":414,"callFrame":{"functionName":"#addRoute","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":225572,"columnNumber":11},"hitCount":0,"children":[415],"positionTicks":[]},{"id":415,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":226080,"columnNumber":5},"hitCount":0,"children":[],"positionTicks":[]},{"id":410,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":288911,"columnNumber":41},"hitCount":0,"children":[411],"positionTicks":[]},{"id":411,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":288829,"columnNumber":46},"hitCount":1,"children":[],"positionTicks":[{"line":288877,"ticks":1}]},{"id":395,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268864,"columnNumber":18},"hitCount":0,"children":[396],"positionTicks":[]},{"id":396,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268714,"columnNumber":18},"hitCount":0,"children":[397],"positionTicks":[]},{"id":397,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268720,"columnNumber":14},"hitCount":0,"children":[398],"positionTicks":[]},{"id":398,"callFrame":{"functionName":"serialize","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268714,"columnNumber":18},"hitCount":0,"children":[399],"positionTicks":[]},{"id":399,"callFrame":{"functionName":"toASN","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268720,"columnNumber":14},"hitCount":0,"children":[400],"positionTicks":[]},{"id":400,"callFrame":{"functionName":"toAsnItem","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268809,"columnNumber":18},"hitCount":0,"children":[401],"positionTicks":[]},{"id":401,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268064,"columnNumber":32},"hitCount":1,"children":[],"positionTicks":[{"line":268069,"ticks":1}]},{"id":392,"callFrame":{"functionName":"__decorate","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":268881,"columnNumber":19},"hitCount":0,"children":[393],"positionTicks":[]},{"id":393,"callFrame":{"functionName":"decorate","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47305,"columnNumber":25},"hitCount":0,"children":[394,402],"positionTicks":[]},{"id":402,"callFrame":{"functionName":"DecorateConstructor","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47424,"columnNumber":36},"hitCount":0,"children":[403],"positionTicks":[]},{"id":403,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":273876,"columnNumber":17},"hitCount":0,"children":[404],"positionTicks":[]},{"id":404,"callFrame":{"functionName":"getParamInfo","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":273243,"columnNumber":21},"hitCount":0,"children":[405],"positionTicks":[]},{"id":405,"callFrame":{"functionName":"getMetadata","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47367,"columnNumber":28},"hitCount":0,"children":[406],"positionTicks":[]},{"id":406,"callFrame":{"functionName":"OrdinaryGetMetadata","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47472,"columnNumber":36},"hitCount":0,"children":[407],"positionTicks":[]},{"id":407,"callFrame":{"functionName":"OrdinaryHasOwnMetadata","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47460,"columnNumber":39},"hitCount":0,"children":[408],"positionTicks":[]},{"id":408,"callFrame":{"functionName":"GetMetadataProvider","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":48039,"columnNumber":36},"hitCount":0,"children":[409],"positionTicks":[]},{"id":409,"callFrame":{"functionName":"getProvider","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47809,"columnNumber":30},"hitCount":1,"children":[],"positionTicks":[{"line":47819,"ticks":1}]},{"id":394,"callFrame":{"functionName":"ToPropertyKey","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":47650,"columnNumber":30},"hitCount":1,"children":[],"positionTicks":[{"line":47652,"ticks":1}]},{"id":378,"callFrame":{"functionName":"url2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140435,"columnNumber":13},"hitCount":0,"children":[379],"positionTicks":[]},{"id":379,"callFrame":{"functionName":"_url2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":137773,"columnNumber":14},"hitCount":0,"children":[380],"positionTicks":[]},{"id":380,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[381],"positionTicks":[]},{"id":381,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[382],"positionTicks":[]},{"id":382,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140431,"columnNumber":54},"hitCount":0,"children":[383],"positionTicks":[]},{"id":383,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[384],"positionTicks":[]},{"id":384,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129617,"columnNumber":56},"hitCount":0,"children":[385],"positionTicks":[]},{"id":385,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[386],"positionTicks":[]},{"id":386,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129585,"columnNumber":74},"hitCount":0,"children":[387],"positionTicks":[]},{"id":387,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[388],"positionTicks":[]},{"id":388,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129565,"columnNumber":62},"hitCount":0,"children":[389,391],"positionTicks":[]},{"id":391,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":128821,"columnNumber":37},"hitCount":0,"children":[],"positionTicks":[]},{"id":389,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[390],"positionTicks":[]},{"id":390,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129454,"columnNumber":58},"hitCount":0,"children":[],"positionTicks":[]},{"id":373,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140228,"columnNumber":12},"hitCount":0,"children":[374],"positionTicks":[]},{"id":374,"callFrame":{"functionName":"optional2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":141212,"columnNumber":18},"hitCount":0,"children":[375],"positionTicks":[]},{"id":375,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[376],"positionTicks":[]},{"id":376,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[377],"positionTicks":[]},{"id":377,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":141206,"columnNumber":64},"hitCount":1,"children":[],"positionTicks":[{"line":141210,"ticks":1}]},{"id":365,"callFrame":{"functionName":"xor2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140938,"columnNumber":13},"hitCount":0,"children":[366],"positionTicks":[]},{"id":366,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[367],"positionTicks":[]},{"id":367,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[368],"positionTicks":[]},{"id":368,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140932,"columnNumber":53},"hitCount":0,"children":[369],"positionTicks":[]},{"id":369,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[370],"positionTicks":[]},{"id":370,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140918,"columnNumber":58},"hitCount":0,"children":[371],"positionTicks":[]},{"id":371,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[372],"positionTicks":[]},{"id":372,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":130409,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":362,"callFrame":{"functionName":"nonempty","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140330,"columnNumber":12},"hitCount":0,"children":[363],"positionTicks":[]},{"id":363,"callFrame":{"functionName":"_minLength2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138326,"columnNumber":20},"hitCount":0,"children":[364],"positionTicks":[]},{"id":364,"callFrame":{"functionName":"normalizeParams2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":128050,"columnNumber":25},"hitCount":0,"children":[],"positionTicks":[]},{"id":357,"callFrame":{"functionName":"string6","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":142037,"columnNumber":16},"hitCount":0,"children":[358],"positionTicks":[]},{"id":358,"callFrame":{"functionName":"_coercedString2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":137695,"columnNumber":24},"hitCount":0,"children":[359],"positionTicks":[]},{"id":359,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[360],"positionTicks":[]},{"id":360,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[361],"positionTicks":[]},{"id":361,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140356,"columnNumber":60},"hitCount":1,"children":[],"positionTicks":[{"line":140381,"ticks":1}]},{"id":355,"callFrame":{"functionName":"number5","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140658,"columnNumber":16},"hitCount":0,"children":[356],"positionTicks":[]},{"id":356,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138011,"columnNumber":17},"hitCount":0,"children":[],"positionTicks":[]},{"id":353,"callFrame":{"functionName":"any2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140765,"columnNumber":13},"hitCount":0,"children":[354],"positionTicks":[]},{"id":354,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138165,"columnNumber":14},"hitCount":0,"children":[],"positionTicks":[]},{"id":351,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":117863,"columnNumber":51},"hitCount":0,"children":[352],"positionTicks":[]},{"id":352,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":209933,"columnNumber":39},"hitCount":1,"children":[],"positionTicks":[{"line":209934,"ticks":1}]},{"id":335,"callFrame":{"functionName":"optional4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177607,"columnNumber":18},"hitCount":0,"children":[336],"positionTicks":[]},{"id":336,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176574,"columnNumber":19},"hitCount":0,"children":[337],"positionTicks":[]},{"id":337,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[338],"positionTicks":[]},{"id":338,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[341],"positionTicks":[{"line":127627,"ticks":1}]},{"id":341,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176569,"columnNumber":73},"hitCount":0,"children":[342],"positionTicks":[]},{"id":342,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[343],"positionTicks":[]},{"id":343,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176385,"ticks":1}]},{"id":316,"callFrame":{"functionName":"inboundSchema","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177855,"columnNumber":22},"hitCount":0,"children":[317],"positionTicks":[]},{"id":317,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176625,"columnNumber":14},"hitCount":0,"children":[318],"positionTicks":[]},{"id":318,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[319],"positionTicks":[]},{"id":319,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[320],"positionTicks":[]},{"id":320,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176620,"columnNumber":63},"hitCount":0,"children":[321],"positionTicks":[]},{"id":321,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127642,"ticks":1}]},{"id":310,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176574,"columnNumber":19},"hitCount":0,"children":[311],"positionTicks":[]},{"id":311,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":1,"children":[312],"positionTicks":[{"line":127661,"ticks":1}]},{"id":312,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[313],"positionTicks":[]},{"id":313,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176569,"columnNumber":73},"hitCount":0,"children":[314],"positionTicks":[]},{"id":314,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[315],"positionTicks":[]},{"id":315,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176371,"ticks":1}]},{"id":304,"callFrame":{"functionName":"object3","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176492,"columnNumber":16},"hitCount":0,"children":[305],"positionTicks":[]},{"id":305,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[306],"positionTicks":[]},{"id":306,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[307],"positionTicks":[]},{"id":307,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176486,"columnNumber":67},"hitCount":0,"children":[308],"positionTicks":[]},{"id":308,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[309],"positionTicks":[{"line":127640,"ticks":1}]},{"id":309,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176369,"ticks":1}]},{"id":291,"callFrame":{"functionName":"number7","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176407,"columnNumber":16},"hitCount":0,"children":[292],"positionTicks":[]},{"id":292,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138011,"columnNumber":17},"hitCount":0,"children":[293],"positionTicks":[]},{"id":293,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[294],"positionTicks":[]},{"id":294,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[295],"positionTicks":[]},{"id":295,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176402,"columnNumber":67},"hitCount":0,"children":[296],"positionTicks":[]},{"id":296,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[297],"positionTicks":[]},{"id":297,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":2,"children":[],"positionTicks":[{"line":176392,"ticks":1},{"line":176371,"ticks":1}]},{"id":265,"callFrame":{"functionName":"number9","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177578,"columnNumber":16},"hitCount":0,"children":[266,281,298],"positionTicks":[]},{"id":298,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177624,"columnNumber":30},"hitCount":0,"children":[299],"positionTicks":[]},{"id":299,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176574,"columnNumber":19},"hitCount":0,"children":[300],"positionTicks":[]},{"id":300,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[301],"positionTicks":[]},{"id":301,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[302],"positionTicks":[]},{"id":302,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176569,"columnNumber":73},"hitCount":0,"children":[303],"positionTicks":[]},{"id":303,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127642,"ticks":1}]},{"id":281,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176398,"columnNumber":16},"hitCount":0,"children":[282],"positionTicks":[]},{"id":282,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":137687,"columnNumber":17},"hitCount":0,"children":[283],"positionTicks":[]},{"id":283,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[284],"positionTicks":[]},{"id":284,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[285],"positionTicks":[]},{"id":285,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176393,"columnNumber":67},"hitCount":0,"children":[286],"positionTicks":[]},{"id":286,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[287],"positionTicks":[]},{"id":287,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129565,"columnNumber":62},"hitCount":0,"children":[288],"positionTicks":[]},{"id":288,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[289],"positionTicks":[]},{"id":289,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129454,"columnNumber":58},"hitCount":0,"children":[290],"positionTicks":[]},{"id":290,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127842,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127845,"ticks":1}]},{"id":266,"callFrame":{"functionName":"number7","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176407,"columnNumber":16},"hitCount":0,"children":[267],"positionTicks":[]},{"id":267,"callFrame":{"functionName":"_number2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138011,"columnNumber":17},"hitCount":0,"children":[268],"positionTicks":[]},{"id":268,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[269],"positionTicks":[]},{"id":269,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[270],"positionTicks":[]},{"id":270,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176402,"columnNumber":67},"hitCount":0,"children":[271],"positionTicks":[]},{"id":271,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[272],"positionTicks":[]},{"id":272,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176392,"ticks":1}]},{"id":254,"callFrame":{"functionName":"boolean11","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177555,"columnNumber":18},"hitCount":0,"children":[255,259],"positionTicks":[]},{"id":259,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177624,"columnNumber":30},"hitCount":0,"children":[260],"positionTicks":[]},{"id":260,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176574,"columnNumber":19},"hitCount":0,"children":[261],"positionTicks":[]},{"id":261,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[262],"positionTicks":[]},{"id":262,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[263],"positionTicks":[]},{"id":263,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176569,"columnNumber":73},"hitCount":0,"children":[264],"positionTicks":[]},{"id":264,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127642,"ticks":1}]},{"id":255,"callFrame":{"functionName":"boolean9","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176425,"columnNumber":17},"hitCount":0,"children":[256],"positionTicks":[]},{"id":256,"callFrame":{"functionName":"_boolean2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138085,"columnNumber":18},"hitCount":0,"children":[257],"positionTicks":[]},{"id":257,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[258],"positionTicks":[]},{"id":258,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176420,"columnNumber":69},"hitCount":1,"children":[],"positionTicks":[{"line":176422,"ticks":1}]},{"id":238,"callFrame":{"functionName":"string9","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177545,"columnNumber":16},"hitCount":0,"children":[239,273,322,332],"positionTicks":[]},{"id":332,"callFrame":{"functionName":"any3","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176456,"columnNumber":13},"hitCount":0,"children":[333],"positionTicks":[]},{"id":333,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138165,"columnNumber":14},"hitCount":0,"children":[334],"positionTicks":[]},{"id":334,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127637,"ticks":1}]},{"id":322,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176625,"columnNumber":14},"hitCount":0,"children":[323],"positionTicks":[]},{"id":323,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[324],"positionTicks":[]},{"id":324,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127627,"ticks":1}]},{"id":273,"callFrame":{"functionName":"zodDefaultToZeroValue","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177624,"columnNumber":30},"hitCount":0,"children":[274,344],"positionTicks":[]},{"id":344,"callFrame":{"functionName":"any3","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176456,"columnNumber":13},"hitCount":0,"children":[345],"positionTicks":[]},{"id":345,"callFrame":{"functionName":"_any2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138165,"columnNumber":14},"hitCount":0,"children":[346],"positionTicks":[]},{"id":346,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[347],"positionTicks":[]},{"id":347,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[348],"positionTicks":[]},{"id":348,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176451,"columnNumber":61},"hitCount":0,"children":[349],"positionTicks":[]},{"id":349,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[350],"positionTicks":[]},{"id":350,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176373,"ticks":1}]},{"id":274,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176625,"columnNumber":14},"hitCount":0,"children":[275],"positionTicks":[]},{"id":275,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[276],"positionTicks":[]},{"id":276,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[277],"positionTicks":[]},{"id":277,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176620,"columnNumber":63},"hitCount":0,"children":[278],"positionTicks":[]},{"id":278,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[279],"positionTicks":[]},{"id":279,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":131284,"columnNumber":58},"hitCount":0,"children":[280],"positionTicks":[]},{"id":280,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127842,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127845,"ticks":1}]},{"id":239,"callFrame":{"functionName":"string7","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176398,"columnNumber":16},"hitCount":0,"children":[240],"positionTicks":[]},{"id":240,"callFrame":{"functionName":"_string2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":137687,"columnNumber":17},"hitCount":0,"children":[241],"positionTicks":[]},{"id":241,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[242],"positionTicks":[]},{"id":242,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[243],"positionTicks":[]},{"id":243,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176393,"columnNumber":67},"hitCount":0,"children":[244],"positionTicks":[]},{"id":244,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[245,340],"positionTicks":[]},{"id":340,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176374,"ticks":1}]},{"id":245,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129565,"columnNumber":62},"hitCount":0,"children":[246],"positionTicks":[]},{"id":246,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[247],"positionTicks":[]},{"id":247,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129454,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":129472,"ticks":1}]},{"id":230,"callFrame":{"functionName":"nullable4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":177615,"columnNumber":18},"hitCount":0,"children":[231,248,325],"positionTicks":[]},{"id":325,"callFrame":{"functionName":"pipe4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176625,"columnNumber":14},"hitCount":0,"children":[326],"positionTicks":[]},{"id":326,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[327],"positionTicks":[]},{"id":327,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[328],"positionTicks":[]},{"id":328,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176620,"columnNumber":63},"hitCount":0,"children":[329],"positionTicks":[]},{"id":329,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[330],"positionTicks":[]},{"id":330,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":131284,"columnNumber":58},"hitCount":0,"children":[331],"positionTicks":[]},{"id":331,"callFrame":{"functionName":"defineLazy2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127842,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":127845,"ticks":1}]},{"id":248,"callFrame":{"functionName":"transform4","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176574,"columnNumber":19},"hitCount":0,"children":[249],"positionTicks":[]},{"id":249,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[250],"positionTicks":[]},{"id":250,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[251],"positionTicks":[]},{"id":251,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176569,"columnNumber":73},"hitCount":0,"children":[252],"positionTicks":[]},{"id":252,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[253],"positionTicks":[]},{"id":253,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176372,"ticks":1}]},{"id":231,"callFrame":{"functionName":"_null7","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176447,"columnNumber":15},"hitCount":0,"children":[232],"positionTicks":[]},{"id":232,"callFrame":{"functionName":"_null5","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":138157,"columnNumber":15},"hitCount":0,"children":[233],"positionTicks":[]},{"id":233,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[234],"positionTicks":[]},{"id":234,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[235],"positionTicks":[]},{"id":235,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176442,"columnNumber":63},"hitCount":0,"children":[236],"positionTicks":[]},{"id":236,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[237],"positionTicks":[]},{"id":237,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176363,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":176385,"ticks":1}]},{"id":224,"callFrame":{"functionName":"optional3","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176586,"columnNumber":18},"hitCount":0,"children":[225],"positionTicks":[]},{"id":225,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[226],"positionTicks":[]},{"id":226,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[227],"positionTicks":[]},{"id":227,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":176581,"columnNumber":71},"hitCount":0,"children":[228],"positionTicks":[]},{"id":228,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[229],"positionTicks":[{"line":127640,"ticks":1}]},{"id":229,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":131094,"columnNumber":66},"hitCount":1,"children":[339],"positionTicks":[{"line":131098,"ticks":1}]},{"id":339,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127640,"ticks":1}]},{"id":215,"callFrame":{"functionName":"nullable","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":95206,"columnNumber":10},"hitCount":0,"children":[216],"positionTicks":[]},{"id":216,"callFrame":{"functionName":"ZodNullable2.create","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":98165,"columnNumber":22},"hitCount":0,"children":[217],"positionTicks":[]},{"id":217,"callFrame":{"functionName":"ZodNullable2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":98150,"columnNumber":19},"hitCount":0,"children":[218],"positionTicks":[]},{"id":218,"callFrame":{"functionName":"ZodType2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":95170,"columnNumber":13},"hitCount":0,"children":[219],"positionTicks":[]},{"id":219,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":0,"children":[220],"positionTicks":[]},{"id":220,"callFrame":{"functionName":"set kResourceTypeInspect","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":7,"ticks":1}]},{"id":214,"callFrame":{"functionName":"describe","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":95257,"columnNumber":10},"hitCount":1,"children":[],"positionTicks":[{"line":95262,"ticks":1}]},{"id":213,"callFrame":{"functionName":"create","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":97277,"columnNumber":15},"hitCount":1,"children":[],"positionTicks":[{"line":97285,"ticks":1}]},{"id":180,"callFrame":{"functionName":"meta","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140275,"columnNumber":8},"hitCount":0,"children":[181],"positionTicks":[]},{"id":181,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140209,"columnNumber":9},"hitCount":0,"children":[182],"positionTicks":[]},{"id":182,"callFrame":{"functionName":"clone3","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":128043,"columnNumber":15},"hitCount":0,"children":[183],"positionTicks":[]},{"id":183,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127657,"columnNumber":13},"hitCount":0,"children":[184],"positionTicks":[]},{"id":184,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[185],"positionTicks":[]},{"id":185,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":140356,"columnNumber":60},"hitCount":1,"children":[186],"positionTicks":[{"line":140360,"ticks":1}]},{"id":186,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":0,"children":[187],"positionTicks":[]},{"id":187,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":129565,"columnNumber":62},"hitCount":0,"children":[188],"positionTicks":[]},{"id":188,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":127624,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":127640,"ticks":1}]},{"id":171,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[172,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/resources/coding/autumn/server/index.js","lineNumber":38050,"columnNumber":131},"hitCount":0,"children":[190],"positionTicks":[]},{"id":190,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/resources/coding/autumn/server/index.js","lineNumber":37270,"columnNumber":77},"hitCount":0,"children":[192],"positionTicks":[]},{"id":192,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[193],"positionTicks":[]},{"id":193,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/kysely.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":32878,"columnNumber":78},"hitCount":0,"children":[194],"positionTicks":[]},{"id":194,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/resources/coding/autumn/server/index.js","lineNumber":32023,"columnNumber":85},"hitCount":0,"children":[196],"positionTicks":[]},{"id":196,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/resources/coding/autumn/server/index.js","lineNumber":28741,"columnNumber":91},"hitCount":0,"children":[198],"positionTicks":[]},{"id":198,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/resources/coding/autumn/server/index.js","lineNumber":28640,"columnNumber":96},"hitCount":0,"children":[200],"positionTicks":[]},{"id":200,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/resources/coding/autumn/server/index.js","lineNumber":28589,"columnNumber":101},"hitCount":0,"children":[202],"positionTicks":[]},{"id":202,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[203],"positionTicks":[{"line":9,"ticks":1}]},{"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/resources/coding/autumn/server/index.js","lineNumber":27191,"columnNumber":106},"hitCount":0,"children":[204],"positionTicks":[]},{"id":204,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/resources/coding/autumn/server/index.js","lineNumber":26892,"columnNumber":90},"hitCount":0,"children":[206],"positionTicks":[]},{"id":206,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/binary-operation-parser.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":20166,"columnNumber":102},"hitCount":0,"children":[208],"positionTicks":[]},{"id":208,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/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/parser/reference-parser.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":19959,"columnNumber":95},"hitCount":0,"children":[210],"positionTicks":[]},{"id":210,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":0,"children":[211],"positionTicks":[]},{"id":211,"callFrame":{"functionName":"../node_modules/.bun/kysely@0.28.17/node_modules/kysely/dist/esm/parser/order-by-parser.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":19783,"columnNumber":94},"hitCount":0,"children":[212],"positionTicks":[]},{"id":212,"callFrame":{"functionName":"__init","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":7,"columnNumber":40},"hitCount":1,"children":[],"positionTicks":[{"line":9,"ticks":1}]},{"id":172,"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/resources/coding/autumn/server/index.js","lineNumber":17438,"columnNumber":132},"hitCount":0,"children":[173,178],"positionTicks":[]},{"id":178,"callFrame":{"functionName":"__toESM","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":25,"columnNumber":14},"hitCount":0,"children":[179],"positionTicks":[]},{"id":179,"callFrame":{"functionName":"__copyProps","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":17,"columnNumber":18},"hitCount":1,"children":[],"positionTicks":[{"line":22,"ticks":1}]},{"id":173,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[174],"positionTicks":[{"line":12,"ticks":1}]},{"id":174,"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/resources/coding/autumn/server/index.js","lineNumber":17408,"columnNumber":135},"hitCount":0,"children":[175],"positionTicks":[]},{"id":175,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[176],"positionTicks":[]},{"id":176,"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/resources/coding/autumn/server/index.js","lineNumber":17154,"columnNumber":144},"hitCount":0,"children":[177],"positionTicks":[]},{"id":177,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":156,"callFrame":{"functionName":"createStripe","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":113185,"columnNumber":21},"hitCount":0,"children":[157],"positionTicks":[]},{"id":157,"callFrame":{"functionName":"determineProcessUserAgentProperties","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":107443,"columnNumber":44},"hitCount":1,"children":[158],"positionTicks":[{"line":107445,"ticks":1}]},{"id":158,"callFrame":{"functionName":"get process","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[159],"positionTicks":[]},{"id":159,"callFrame":{"functionName":"","scriptId":"54","url":"node-internal:public_process","lineNumber":0,"columnNumber":0},"hitCount":0,"children":[160],"positionTicks":[]},{"id":160,"callFrame":{"functionName":"ReadStream","scriptId":"56","url":"node-internal:internal_fs_streams","lineNumber":423,"columnNumber":26},"hitCount":0,"children":[161],"positionTicks":[]},{"id":161,"callFrame":{"functionName":"Readable","scriptId":"35","url":"node-internal:streams_readable","lineNumber":330,"columnNumber":24},"hitCount":0,"children":[162],"positionTicks":[]},{"id":162,"callFrame":{"functionName":"construct","scriptId":"41","url":"node-internal:streams_destroy","lineNumber":210,"columnNumber":25},"hitCount":0,"children":[163],"positionTicks":[]},{"id":163,"callFrame":{"functionName":"nextTick","scriptId":"32","url":"node-internal:internal_process","lineNumber":13,"columnNumber":24},"hitCount":0,"children":[164],"positionTicks":[]},{"id":164,"callFrame":{"functionName":"queueMicrotask","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":1,"children":[],"positionTicks":[{"line":15,"ticks":1}]},{"id":150,"callFrame":{"functionName":"genTtable","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":106146,"columnNumber":18},"hitCount":1,"children":[],"positionTicks":[{"line":106158,"ticks":1}]},{"id":147,"callFrame":{"functionName":"end","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":102840,"columnNumber":5},"hitCount":0,"children":[148],"positionTicks":[]},{"id":148,"callFrame":{"functionName":"Buffer","scriptId":"12","url":"node-internal:internal_buffer","lineNumber":51,"columnNumber":22},"hitCount":1,"children":[],"positionTicks":[{"line":59,"ticks":1}]},{"id":142,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[143,149,151,165,221],"positionTicks":[{"line":12,"ticks":1}]},{"id":221,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/index.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":44463,"columnNumber":100},"hitCount":0,"children":[222],"positionTicks":[]},{"id":222,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[223],"positionTicks":[]},{"id":223,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":43345,"columnNumber":112},"hitCount":1,"children":[],"positionTicks":[{"line":43482,"ticks":1}]},{"id":165,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/index.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":15074,"columnNumber":68},"hitCount":0,"children":[166],"positionTicks":[]},{"id":166,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[167,169],"positionTicks":[]},{"id":169,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/streaming.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":13700,"columnNumber":76},"hitCount":0,"children":[170],"positionTicks":[]},{"id":170,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":167,"callFrame":{"functionName":"../node_modules/.bun/svix@1.95.2/node_modules/svix/dist/api/endpoint.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":6934,"columnNumber":75},"hitCount":0,"children":[168],"positionTicks":[]},{"id":168,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":151,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/index.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":4900,"columnNumber":63},"hitCount":0,"children":[152],"positionTicks":[]},{"id":152,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[153],"positionTicks":[]},{"id":153,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/stringify.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":4294,"columnNumber":67},"hitCount":0,"children":[154],"positionTicks":[]},{"id":154,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[155],"positionTicks":[]},{"id":155,"callFrame":{"functionName":"../node_modules/.bun/qs@6.15.2/node_modules/qs/lib/utils.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":4030,"columnNumber":63},"hitCount":1,"children":[],"positionTicks":[{"line":4073,"ticks":1}]},{"id":149,"callFrame":{"functionName":"../node_modules/.bun/ksuid@3.0.0/node_modules/ksuid/index.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":2225,"columnNumber":64},"hitCount":2,"children":[],"positionTicks":[{"line":2238,"ticks":2}]},{"id":143,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/index.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":2026,"columnNumber":100},"hitCount":0,"children":[144],"positionTicks":[]},{"id":144,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":0,"children":[145],"positionTicks":[]},{"id":145,"callFrame":{"functionName":"../node_modules/.bun/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/src/baggage/utils.js","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":661,"columnNumber":108},"hitCount":0,"children":[146],"positionTicks":[]},{"id":146,"callFrame":{"functionName":"__require","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":10,"columnNumber":49},"hitCount":1,"children":[],"positionTicks":[{"line":12,"ticks":1}]},{"id":130,"callFrame":{"functionName":"custom","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":69033,"columnNumber":15},"hitCount":0,"children":[131],"positionTicks":[]},{"id":131,"callFrame":{"functionName":"_custom","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":67047,"columnNumber":16},"hitCount":0,"children":[132],"positionTicks":[]},{"id":132,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[133],"positionTicks":[]},{"id":133,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[134],"positionTicks":[]},{"id":134,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":69020,"columnNumber":58},"hitCount":0,"children":[135],"positionTicks":[]},{"id":135,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58107,"ticks":1}]},{"id":121,"callFrame":{"functionName":"inst.gt","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68379,"columnNumber":12},"hitCount":0,"children":[122],"positionTicks":[]},{"id":122,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[123],"positionTicks":[]},{"id":123,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[124],"positionTicks":[]},{"id":124,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[125],"positionTicks":[]},{"id":125,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[126],"positionTicks":[]},{"id":126,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[127],"positionTicks":[]},{"id":127,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":0,"children":[128],"positionTicks":[]},{"id":128,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[129],"positionTicks":[]},{"id":129,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":60035,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":111,"callFrame":{"functionName":"inst.min","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68154,"columnNumber":13},"hitCount":0,"children":[112],"positionTicks":[]},{"id":112,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[113],"positionTicks":[]},{"id":113,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[114],"positionTicks":[]},{"id":114,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[115],"positionTicks":[]},{"id":115,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[116],"positionTicks":[]},{"id":116,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[117],"positionTicks":[]},{"id":117,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":1,"children":[416],"positionTicks":[{"line":68190,"ticks":1}]},{"id":416,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[417],"positionTicks":[]},{"id":417,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68143,"columnNumber":60},"hitCount":0,"children":[418],"positionTicks":[]},{"id":418,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[419],"positionTicks":[]},{"id":419,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[420],"positionTicks":[]},{"id":420,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58108,"ticks":1}]},{"id":102,"callFrame":{"functionName":"inst.min","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68381,"columnNumber":13},"hitCount":0,"children":[103],"positionTicks":[]},{"id":103,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[104],"positionTicks":[]},{"id":104,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[105],"positionTicks":[]},{"id":105,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[106],"positionTicks":[]},{"id":106,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[107],"positionTicks":[]},{"id":107,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[108],"positionTicks":[]},{"id":108,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":0,"children":[109],"positionTicks":[]},{"id":109,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[110],"positionTicks":[]},{"id":110,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68115,"ticks":1}]},{"id":87,"callFrame":{"functionName":"inst.max","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68155,"columnNumber":13},"hitCount":0,"children":[88],"positionTicks":[]},{"id":88,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[89],"positionTicks":[]},{"id":89,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[90],"positionTicks":[]},{"id":90,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[91],"positionTicks":[]},{"id":91,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[92],"positionTicks":[]},{"id":92,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[93],"positionTicks":[]},{"id":93,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":0,"children":[94],"positionTicks":[]},{"id":94,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[95],"positionTicks":[]},{"id":95,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[96],"positionTicks":[]},{"id":96,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":59036,"columnNumber":36},"hitCount":0,"children":[],"positionTicks":[]},{"id":82,"callFrame":{"functionName":"string2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68196,"columnNumber":16},"hitCount":0,"children":[83],"positionTicks":[]},{"id":83,"callFrame":{"functionName":"_string","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":66178,"columnNumber":16},"hitCount":0,"children":[84],"positionTicks":[]},{"id":84,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[85],"positionTicks":[]},{"id":85,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[86],"positionTicks":[]},{"id":86,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":1,"children":[],"positionTicks":[{"line":68176,"ticks":1}]},{"id":73,"callFrame":{"functionName":"inst.nullish","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68109,"columnNumber":17},"hitCount":0,"children":[74,136],"positionTicks":[]},{"id":136,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68857,"columnNumber":17},"hitCount":0,"children":[137],"positionTicks":[]},{"id":137,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[138],"positionTicks":[]},{"id":138,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[139],"positionTicks":[]},{"id":139,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68852,"columnNumber":62},"hitCount":0,"children":[140],"positionTicks":[]},{"id":140,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[141],"positionTicks":[]},{"id":141,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68101,"ticks":1}]},{"id":74,"callFrame":{"functionName":"nullable","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68869,"columnNumber":17},"hitCount":0,"children":[75],"positionTicks":[]},{"id":75,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[76],"positionTicks":[]},{"id":76,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[77],"positionTicks":[]},{"id":77,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68864,"columnNumber":62},"hitCount":0,"children":[78],"positionTicks":[]},{"id":78,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[79,97],"positionTicks":[]},{"id":97,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":60998,"columnNumber":64},"hitCount":0,"children":[98],"positionTicks":[]},{"id":98,"callFrame":{"functionName":"defineLazy","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58283,"columnNumber":19},"hitCount":1,"children":[],"positionTicks":[{"line":58286,"ticks":1}]},{"id":79,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":0,"children":[80],"positionTicks":[]},{"id":80,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58108,"ticks":1}]},{"id":64,"callFrame":{"functionName":"inst.regex","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68150,"columnNumber":15},"hitCount":0,"children":[65],"positionTicks":[]},{"id":65,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":0,"children":[66],"positionTicks":[]},{"id":66,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[67],"positionTicks":[]},{"id":67,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[68],"positionTicks":[]},{"id":68,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[69],"positionTicks":[]},{"id":69,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[70],"positionTicks":[]},{"id":70,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68165,"columnNumber":58},"hitCount":1,"children":[71],"positionTicks":[{"line":68189,"ticks":1}]},{"id":71,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[72],"positionTicks":[]},{"id":72,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":59719,"columnNumber":60},"hitCount":0,"children":[],"positionTicks":[]},{"id":57,"callFrame":{"functionName":"_undefined3","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68486,"columnNumber":20},"hitCount":0,"children":[58],"positionTicks":[]},{"id":58,"callFrame":{"functionName":"_undefined2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":66587,"columnNumber":20},"hitCount":1,"children":[],"positionTicks":[{"line":66591,"ticks":1}]},{"id":55,"callFrame":{"functionName":"inst.refine","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68104,"columnNumber":16},"hitCount":0,"children":[56],"positionTicks":[]},{"id":56,"callFrame":{"functionName":"inst.check","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68081,"columnNumber":15},"hitCount":1,"children":[],"positionTicks":[{"line":68088,"ticks":1}]},{"id":54,"callFrame":{"functionName":"Decimal2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":76746,"columnNumber":19},"hitCount":1,"children":[],"positionTicks":[{"line":76819,"ticks":1}]},{"id":45,"callFrame":{"functionName":"inst.meta","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68131,"columnNumber":14},"hitCount":0,"children":[46,47],"positionTicks":[]},{"id":47,"callFrame":{"functionName":"inst.clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68093,"columnNumber":15},"hitCount":0,"children":[48],"positionTicks":[]},{"id":48,"callFrame":{"functionName":"clone","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58437,"columnNumber":14},"hitCount":0,"children":[49],"positionTicks":[]},{"id":49,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[50],"positionTicks":[]},{"id":50,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[51,60,81,99,118],"positionTicks":[{"line":58102,"ticks":1}]},{"id":118,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68730,"columnNumber":54},"hitCount":0,"children":[119],"positionTicks":[]},{"id":119,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[120],"positionTicks":[]},{"id":120,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68101,"ticks":1}]},{"id":99,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68562,"columnNumber":58},"hitCount":0,"children":[100],"positionTicks":[]},{"id":100,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[101],"positionTicks":[]},{"id":101,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68096,"ticks":1}]},{"id":81,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68852,"columnNumber":62},"hitCount":1,"children":[],"positionTicks":[{"line":68855,"ticks":1}]},{"id":60,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68880,"columnNumber":60},"hitCount":0,"children":[61],"positionTicks":[]},{"id":61,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[62],"positionTicks":[]},{"id":62,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":0,"children":[63],"positionTicks":[]},{"id":63,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58102,"ticks":1}]},{"id":51,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":0,"children":[52],"positionTicks":[]},{"id":52,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[53],"positionTicks":[]},{"id":53,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":1,"children":[],"positionTicks":[{"line":68126,"ticks":1}]},{"id":46,"callFrame":{"functionName":"add","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":66134,"columnNumber":5},"hitCount":1,"children":[],"positionTicks":[{"line":66135,"ticks":1}]},{"id":35,"callFrame":{"functionName":"_enum2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68767,"columnNumber":15},"hitCount":0,"children":[36],"positionTicks":[]},{"id":36,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[37],"positionTicks":[]},{"id":37,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[38],"positionTicks":[]},{"id":38,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68730,"columnNumber":54},"hitCount":0,"children":[39],"positionTicks":[]},{"id":39,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[40],"positionTicks":[]},{"id":40,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":60907,"columnNumber":56},"hitCount":0,"children":[41],"positionTicks":[]},{"id":41,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[42],"positionTicks":[]},{"id":42,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":59635,"columnNumber":56},"hitCount":0,"children":[],"positionTicks":[]},{"id":30,"callFrame":{"functionName":"number2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68401,"columnNumber":16},"hitCount":0,"children":[31],"positionTicks":[]},{"id":31,"callFrame":{"functionName":"_number","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":66463,"columnNumber":16},"hitCount":0,"children":[32],"positionTicks":[]},{"id":32,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[33],"positionTicks":[]},{"id":33,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[34],"positionTicks":[]},{"id":34,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68376,"columnNumber":58},"hitCount":3,"children":[],"positionTicks":[{"line":68379,"ticks":2},{"line":68396,"ticks":1}]},{"id":23,"callFrame":{"functionName":"object","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68581,"columnNumber":15},"hitCount":0,"children":[24],"positionTicks":[]},{"id":24,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[25],"positionTicks":[]},{"id":25,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[26],"positionTicks":[{"line":58102,"ticks":1}]},{"id":26,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68562,"columnNumber":58},"hitCount":1,"children":[27],"positionTicks":[{"line":68577,"ticks":1}]},{"id":27,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[28],"positionTicks":[]},{"id":28,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":60284,"columnNumber":60},"hitCount":0,"children":[29],"positionTicks":[]},{"id":29,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[],"positionTicks":[{"line":58108,"ticks":1}]},{"id":17,"callFrame":{"functionName":"inst.optional","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68107,"columnNumber":18},"hitCount":0,"children":[18],"positionTicks":[]},{"id":18,"callFrame":{"functionName":"optional","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68857,"columnNumber":17},"hitCount":0,"children":[19],"positionTicks":[]},{"id":19,"callFrame":{"functionName":"_2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58123,"columnNumber":13},"hitCount":0,"children":[20],"positionTicks":[]},{"id":20,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":0,"children":[21],"positionTicks":[]},{"id":21,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68852,"columnNumber":62},"hitCount":0,"children":[22],"positionTicks":[]},{"id":22,"callFrame":{"functionName":"init2","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58099,"columnNumber":16},"hitCount":1,"children":[43,59],"positionTicks":[{"line":58102,"ticks":1}]},{"id":59,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":68077,"columnNumber":54},"hitCount":2,"children":[],"positionTicks":[{"line":68126,"ticks":2}]},{"id":43,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":60977,"columnNumber":64},"hitCount":0,"children":[44],"positionTicks":[]},{"id":44,"callFrame":{"functionName":"defineLazy","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":58283,"columnNumber":19},"hitCount":1,"children":[],"positionTicks":[{"line":58286,"ticks":1}]},{"id":11,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":52446,"columnNumber":37},"hitCount":0,"children":[12],"positionTicks":[]},{"id":12,"callFrame":{"functionName":"pgTableWithSchema","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":52412,"columnNumber":26},"hitCount":0,"children":[13],"positionTicks":[]},{"id":13,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":52425,"columnNumber":38},"hitCount":0,"children":[14],"positionTicks":[]},{"id":14,"callFrame":{"functionName":"buildExtraConfigColumn","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":49592,"columnNumber":24},"hitCount":0,"children":[15],"positionTicks":[]},{"id":15,"callFrame":{"functionName":"ExtraConfigColumn","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":49609,"columnNumber":24},"hitCount":0,"children":[16],"positionTicks":[]},{"id":16,"callFrame":{"functionName":"","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":49617,"columnNumber":2},"hitCount":1,"children":[],"positionTicks":[{"line":49621,"ticks":1}]},{"id":8,"callFrame":{"functionName":"text","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":52003,"columnNumber":13},"hitCount":0,"children":[9],"positionTicks":[]},{"id":9,"callFrame":{"functionName":"PgTextBuilder","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":51984,"columnNumber":13},"hitCount":0,"children":[10],"positionTicks":[]},{"id":10,"callFrame":{"functionName":"PgColumnBuilder","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":49542,"columnNumber":22},"hitCount":1,"children":[],"positionTicks":[{"line":49543,"ticks":1}]},{"id":7,"callFrame":{"functionName":"__name","scriptId":"4","url":"Volumes/sker/resources/coding/autumn/server/index.js","lineNumber":6,"columnNumber":13},"hitCount":2,"children":[],"positionTicks":[{"line":7,"ticks":1},{"line":7,"ticks":1}]},{"id":4,"callFrame":{"functionName":"","scriptId":"40","url":"node-internal:streams_util","lineNumber":0,"columnNumber":0},"hitCount":1,"children":[],"positionTicks":[{"line":294,"ticks":1}]},{"id":3,"callFrame":{"functionName":"(program)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":4,"children":[],"positionTicks":[]},{"id":2,"callFrame":{"functionName":"(idle)","scriptId":"0","url":"","lineNumber":-1,"columnNumber":-1},"hitCount":0,"children":[],"positionTicks":[]}],"startTime":535860331970,"endTime":535860784964,"samples":[2,3,3,3,4,5,5,5,6,7,10,5,16,6,6,22,29,6,6,34,5,42,5,6,44,46,6,6,53,5,54,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,56,58,59,46,63,6,6,72,80,81,86,95,96,98,50,6,6,6,6,6,6,70,101,110,117,120,34,129,127,34,135,141,146,148,149,149,150,150,150,155,157,164,168,170,5,5,5,5,173,177,179,188,212,202,6,6,6,6,6,213,214,220,3,223,5,229,237,247,253,258,6,6,6,6,6,264,272,280,290,297,303,309,315,321,228,324,308,6,6,247,311,6,6,6,6,6,6,6,6,6,6,331,334,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,6,6,6,6,6,338,339,297,340,5,343,350,352,7,26,354,356,361,364,372,185,377,390,388,391,394,401,409,411,25,142,59,414,5,415,420,5,423,425,425,6,6,6,6,6,6,6,6],"timeDeltas":[94821,6083,1507,1501,1513,1511,1503,1508,1517,1504,1499,1502,1502,1512,1488,1510,1505,1494,1510,1504,1504,921,574,1503,1504,1494,1508,1497,1499,1503,1546,1463,1496,1542,1465,1503,1509,1337,1495,1173,1506,1509,1503,1104,1252,1578,1551,1493,1503,1504,1502,1504,1501,1508,1508,1583,1422,1502,1509,1516,1506,1596,1552,1146,1475,618,882,1496,1506,1063,438,1495,1508,404,8,1090,1492,1509,1532,1528,1519,1487,1501,1299,1502,1497,1505,1495,1504,19,17,1461,1500,1503,1497,1506,1517,1542,1152,301,32,1466,1505,1499,1503,1499,1504,1962,1043,1502,1505,1497,1147,1494,1504,1487,1504,1491,1505,1506,1511,1502,1504,1492,1502,1504,1506,1492,1503,972,517,1500,1511,1497,1505,1502,1506,1499,1505,1490,1503,1495,1506,1514,1484,1499,1399,1500,1503,1500,1506,1503,1503,1501,1504,1504,1506,1508,1504,1509,1507,1510,1500,1503,1507,1492,1504,1503,1509,1502,1503,1506,1503,1506,1509,1502,1511,1502,1506,1506,1507,1504,1505,1503,1508,1504,1501,1505,1502,1505,1505,1505,1502,1507,1505,1504,1504,1504,3468,1045,1494,1501,1504,1512,1495,1503,1504,1504,1504,1508,1502,1503,1509,1499,1504,1501,1498,1502,1499,1130,158,219,205,230,1057,1496,141,12,4,1351,1490,1507,1491,1507,1497,1503,1476,20,270,1240,1362,1504,1546,1454,1510,1507,1505,1505,1505,1507,1503,1510]} \ No newline at end of file diff --git a/server/wrangler.jsonc b/server/wrangler.jsonc index ff04261c4..6cd94d7d5 100644 --- a/server/wrangler.jsonc +++ b/server/wrangler.jsonc @@ -119,6 +119,8 @@ } ], "vars": { + "STRIPE_WEBHOOK_URL": "https://autumn-api.bowong.cc", + "SERVER_URL": "https://autumn-api.bowong.cc", "ANTHROPIC_API_KEY": "sk-ant-peS21Css5BSUPZoMGgILNB5Np2Nmn1oQ", "ATMN_OAUTH_CLIENT_IDS": "atmn_oauth_9546ff0bd6ee3d3a551b9f277ea3e1815b2db37d", "AUTUMN_SECRET_KEY": "v10gyuESyVHQ1_vaL77m1dhAxIUZIs8DETIsnM7IJ00", @@ -131,17 +133,17 @@ "AXIOM_SUCCESS_REQUEST_LOG_SAMPLE_RATE": "0", "AXIOM_TOKEN": "4frkVCrowiyhnQqKuFuHsVKDAQOMf0xLtWgmVSu0dws", "BETTER_AUTH_SECRET": "twa5IYZ5KXJ1rzxFJ2xOXUgWOsZSjmMd", - "BETTER_AUTH_URL": "http://localhost:8080", + "BETTER_AUTH_URL": "https://autumn-api.bowong.cc", "CHAT_SERVER_URL": "http://localhost:3099", "CHAT_STATE_SECRET": "bw0TnGqX22pl7REqvACnngXKq4zUhE-L", - "CLIENT_URL": "http://localhost:3000", + "CLIENT_URL": "https://autumn.bowong.ai", "CLOUDFLARE_ANALYTICS_ARCHIVE_ENABLED": "false", "CLOUDFLARE_ANALYTICS_DATASET": "autumn_events_hot", "CLOUDFLARE_ANALYTICS_HOT_READ_ENABLED": "true", "CLOUDFLARE_ANALYTICS_HOT_RETENTION_DAYS": "90", "CLOUDFLARE_ANALYTICS_WRITE_ENABLED": "false", "CLOUDFLARE_ACCOUNT_ID": "67720b647ff2b55cf37ba3ef9e677083", - "CLOUDFLARE_API_TOKEN": "cfoat_E0uK38EK1ZLHUbL7rP6JKK3H6NfawtUWhSR0tkQLDKI.9zUrk9NFtcEAYBr8sxni2-v2uj72I0SDcC1cMqYXckc", + "CLOUDFLARE_API_TOKEN": "dlGquMNiAX-S7SV9pXne7YGfdH_fEgq3TfIGgNcQ", "CRITICAL_DB_POOL_MAX": "5", "CRITICAL_DATABASE_URL": "postgres://autumn:autumn@127.0.0.1:5432/autumn", "CRON": "false", @@ -183,7 +185,6 @@ "REVENUECAT_OAUTH_CLIENT_SECRET": "9Yo_NJob9m6tviExkB_cu_2rdMfjgJL3", "SENTRY_DSN": "https://9546ff0bd6ee3d3a551b9f277ea3e181@o0.ingest.sentry.io/0", "SERVER_PORT": "8080", - "SERVER_URL": "http://localhost:8080", "SLACK_BOT_SCOPES": "app_mentions:read,assistant:write,channels:history,channels:read,chat:write,groups:history,groups:read,im:history,im:read,im:write,mpim:history,mpim:read,users:read", "SLACK_CLIENT_ID": "slack-client-9546ff0bd6ee3d3a551b9f277ea3e1815b2db37d", "SLACK_REDIRECT_URI": "http://localhost:8080/api/chat/slack/oauth/callback", @@ -195,7 +196,6 @@ "STRIPE_SANDBOX_SECRET_KEY": "sk_test_ZkqfCzHwunOTVUiLluRkAxcU3c5x9vzg", "STRIPE_SANDBOX_WEBHOOK_SECRET": "whsec_Gf0SU4UAK5PPJdp4no6e63IppLvcnAgy", "STRIPE_WEBHOOK_SKIP_VERIFY": "false", - "STRIPE_WEBHOOK_URL": "http://localhost:8080/webhooks/stripe", "SVIX_API_KEY": "sk_svix_IMsy8zrwtFxEuJ5ukq6lnRrODlifyuBb", "TEST_FILE_CONCURRENCY": "1", "TESTS_ORG_ID": "org_9546ff0bd6ee3d3a551b9f277ea3e1815b2db37d", @@ -207,7 +207,7 @@ "USE_DO_IDEMPOTENCY": "true", "USE_DO_LOCK": "true", "USE_DO_RATE_LIMIT": "true", - "VITE_FRONTEND_URL": "http://localhost:3000", + "VITE_FRONTEND_URL": "https://autumn.bowong.ai", "WORKER": "true" }, "env": { @@ -327,7 +327,7 @@ "CLOUDFLARE_ANALYTICS_HOT_RETENTION_DAYS": "90", "CLOUDFLARE_ANALYTICS_WRITE_ENABLED": "false", "CLOUDFLARE_ACCOUNT_ID": "67720b647ff2b55cf37ba3ef9e677083", - "CLOUDFLARE_API_TOKEN": "cfoat_E0uK38EK1ZLHUbL7rP6JKK3H6NfawtUWhSR0tkQLDKI.9zUrk9NFtcEAYBr8sxni2-v2uj72I0SDcC1cMqYXckc", + "CLOUDFLARE_API_TOKEN": "dlGquMNiAX-S7SV9pXne7YGfdH_fEgq3TfIGgNcQ", "EMAIL_DOMAIN": "email.bowong.cc", "USE_KV_CACHE": "true", "USE_DO_IDEMPOTENCY": "true", @@ -336,4 +336,4 @@ } } } -} +} \ No newline at end of file diff --git a/shared/utils/utils.ts b/shared/utils/utils.ts index ba3904d6e..c64c56dfe 100644 --- a/shared/utils/utils.ts +++ b/shared/utils/utils.ts @@ -27,11 +27,108 @@ export const keyToTitle = ( .replace(/\b\w/g, (char) => char.toUpperCase()); }; -/** Fast hash using Bun's native hasher */ +const sha256K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, +]; + +const rightRotate = (value: number, bits: number) => + (value >>> bits) | (value << (32 - bits)); + +const bytesToBase64 = (bytes: Uint8Array): string => { + let binary = ""; + for (const byte of bytes) binary += String.fromCharCode(byte); + return btoa(binary); +}; + +/** Cross-runtime SHA-256 hash. Keep this sync for Stripe idempotency key builders. */ export const hashString = (str: string): string => { - const hasher = new Bun.CryptoHasher("sha256"); - hasher.update(str); - return hasher.digest("base64"); + const bytes = new TextEncoder().encode(str); + const bitLength = bytes.length * 8; + const paddedLength = Math.ceil((bytes.length + 9) / 64) * 64; + const padded = new Uint8Array(paddedLength); + padded.set(bytes); + padded[bytes.length] = 0x80; + + const view = new DataView(padded.buffer); + view.setUint32(paddedLength - 4, bitLength, false); + + let h0 = 0x6a09e667; + let h1 = 0xbb67ae85; + let h2 = 0x3c6ef372; + let h3 = 0xa54ff53a; + let h4 = 0x510e527f; + let h5 = 0x9b05688c; + let h6 = 0x1f83d9ab; + let h7 = 0x5be0cd19; + const w = new Uint32Array(64); + + for (let offset = 0; offset < paddedLength; offset += 64) { + for (let i = 0; i < 16; i++) w[i] = view.getUint32(offset + i * 4, false); + for (let i = 16; i < 64; i++) { + const s0 = + rightRotate(w[i - 15], 7) ^ + rightRotate(w[i - 15], 18) ^ + (w[i - 15] >>> 3); + const s1 = + rightRotate(w[i - 2], 17) ^ + rightRotate(w[i - 2], 19) ^ + (w[i - 2] >>> 10); + w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0; + } + + let a = h0; + let b = h1; + let c = h2; + let d = h3; + let e = h4; + let f = h5; + let g = h6; + let h = h7; + + for (let i = 0; i < 64; i++) { + const s1 = rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25); + const ch = (e & f) ^ (~e & g); + const temp1 = (h + s1 + ch + sha256K[i] + w[i]) >>> 0; + const s0 = rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22); + const maj = (a & b) ^ (a & c) ^ (b & c); + const temp2 = (s0 + maj) >>> 0; + + h = g; + g = f; + f = e; + e = (d + temp1) >>> 0; + d = c; + c = b; + b = a; + a = (temp1 + temp2) >>> 0; + } + + h0 = (h0 + a) >>> 0; + h1 = (h1 + b) >>> 0; + h2 = (h2 + c) >>> 0; + h3 = (h3 + d) >>> 0; + h4 = (h4 + e) >>> 0; + h5 = (h5 + f) >>> 0; + h6 = (h6 + g) >>> 0; + h7 = (h7 + h) >>> 0; + } + + const digest = new Uint8Array(32); + const digestView = new DataView(digest.buffer); + [h0, h1, h2, h3, h4, h5, h6, h7].forEach((value, index) => { + digestView.setUint32(index * 4, value, false); + }); + return bytesToBase64(digest); }; // Types for the result object with discriminated union