out-of-scope 发现,来自 #6633 的实施(PD #10 单独立单,未认领 )。#6633 / PR #6712 只覆盖其四车道(spec ApiRoutes 键 / protocol 映射 / rest 通告 / client packages.* + external.*),本单记录 client 里其余 绕过 getRoute() 的硬编码面。
事实(全部实测,origin/main = d6d1a50be,packages/client/src/index.ts)
ObjectStackClient 的路由派生机制是 getRoute(key)(优先 discoveryInfo.routes[key],fallback convention)。#6633 落地后,以下面仍不经过它 ,discovery 通告任何非默认 base 均不跟随:
email.send — :1049 硬编码 `${this.baseUrl}/api/v1/email/send`。服务端 registerEmailEndpoints(bp) 挂在 RestServer.getApiBasePath() 下(跟随 apiPath ),所以设 apiPath 的部署服务端已搬走、client 打旧前缀 → 404。ApiRoutes 无 email 键(spec 变更,需单独裁定 —— 同 @objectstack/client 的 packages.* 与 datasources.external.* 无法跟随非默认 API base:external 面硬编码 /api/v1,rest 面 discovery 也从不通告 routes.packages #6633 的 datasources 键先例)。
cloud.environments.* 全族 — :1383-1657 约 20 处 `${this.baseUrl}/api/v1/cloud/...` 模板串。无 cloud 路由键。(该面由哪个宿主挂载、是否随 apiPath 移动,未在本单测量;分诊时请勿臆断归属。)
ScopedProjectClient.scope() — :4827 硬编码 `/api/v1/environments/${id}` 前缀,scoped 面的全部 meta / data / batch / packages URL 由它拼出。服务端 scoped 挂载点 = getScopedBasePath(getApiBasePath())(跟随 apiPath )。
非缺陷,勿「修」 :connect() 的 bootstrap 探针(:522 /api/v1/discovery、.well-known/objectstack fallback)是发现机制自身的鸡生蛋条目,convention 正是其存在意义。
后果
与 #6633 同类:非默认 base 部署(apiPath,或程序化 basePath / version)上这些面打错前缀。其中面 1、3 的服务端挂载已经 跟随 apiPath,即 #6306 落地前它们就是现活的 404(不是「碰巧能用」)。
方向(留给分诊,不预设)
查重
open issues 已搜 email send hardcode / email/send / ScopedProjectClient / client hardcode route discovery,除 #6633 (本单来源)外无同题。相关:#6306 (9 条直挂路由移 base,server 侧)、#6633 / PR #6712 (同模式的 packages / datasources 面,已实施)。
out-of-scope 发现,来自 #6633 的实施(PD #10 单独立单,未认领)。#6633 / PR #6712 只覆盖其四车道(spec
ApiRoutes键 / protocol 映射 / rest 通告 / clientpackages.*+external.*),本单记录 client 里其余绕过getRoute()的硬编码面。事实(全部实测,
origin/main=d6d1a50be,packages/client/src/index.ts)ObjectStackClient的路由派生机制是getRoute(key)(优先discoveryInfo.routes[key],fallback convention)。#6633 落地后,以下面仍不经过它,discovery 通告任何非默认 base 均不跟随:email.send— :1049 硬编码`${this.baseUrl}/api/v1/email/send`。服务端registerEmailEndpoints(bp)挂在RestServer.getApiBasePath()下(跟随apiPath),所以设apiPath的部署服务端已搬走、client 打旧前缀 → 404。ApiRoutes无email键(spec 变更,需单独裁定 —— 同@objectstack/client的packages.*与datasources.external.*无法跟随非默认 API base:external 面硬编码/api/v1,rest 面 discovery 也从不通告routes.packages#6633 的datasources键先例)。cloud.environments.*全族 — :1383-1657 约 20 处`${this.baseUrl}/api/v1/cloud/...`模板串。无cloud路由键。(该面由哪个宿主挂载、是否随apiPath移动,未在本单测量;分诊时请勿臆断归属。)ScopedProjectClient.scope()— :4827 硬编码`/api/v1/environments/${id}`前缀,scoped 面的全部meta/data/batch/packagesURL 由它拼出。服务端 scoped 挂载点 =getScopedBasePath(getApiBasePath())(跟随apiPath)。connect()的 bootstrap 探针(:522/api/v1/discovery、.well-known/objectstackfallback)是发现机制自身的鸡生蛋条目,convention 正是其存在意义。后果
与 #6633 同类:非默认 base 部署(
apiPath,或程序化basePath/version)上这些面打错前缀。其中面 1、3 的服务端挂载已经跟随apiPath,即 #6306 落地前它们就是现活的 404(不是「碰巧能用」)。方向(留给分诊,不预设)
ApiRoutes增email键(spec 裁定)+ rest 通告 + client 走getRoute('email')—— 完整复刻@objectstack/client的packages.*与datasources.external.*无法跟随非默认 API base:external 面硬编码/api/v1,rest 面 discovery 也从不通告routes.packages#6633 的四车道模式。scoping块或routes.data的 base 推导;改动需 both-copy 纪律(其packages命名空间同改)。查重
open issues 已搜
email send hardcode/email/send/ScopedProjectClient/client hardcode route discovery,除 #6633(本单来源)外无同题。相关:#6306(9 条直挂路由移 base,server 侧)、#6633 / PR #6712(同模式的 packages / datasources 面,已实施)。