Skip to content

refactor(sms): plugin-sms 更名为 service-sms(遵循 service-* 惯例)#2797

Merged
os-zhuang merged 3 commits into
mainfrom
claude/sms-infrastructure-phone-otp-9tisdu
Jul 10, 2026
Merged

refactor(sms): plugin-sms 更名为 service-sms(遵循 service-* 惯例)#2797
os-zhuang merged 3 commits into
mainfrom
claude/sms-infrastructure-phone-otp-9tisdu

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

按维护者反馈(#2790 评审意见:不建议用 plugin-*)跟进 #2780/#2790

变更

  • 包更名@objectstack/plugin-sms@objectstack/service-sms,目录迁至 packages/services/service-sms。基础设施服务应遵循 service-* 惯例(对齐 service-messaging / service-settings);plugin-* 不适合一个职责就是注册 sms 内核服务的包(plugin-email 属历史债,不作先例)。
  • 纯改名,零行为变化:导出、SmsServicePlugin 类名、sms 服务 id、sms settings 命名空间、com.objectstack.service.sms 插件 id 全部不变。git 以 rename 记录(源文件 100% 相似度)。
  • 同步更新所有引用:CLI 依赖与 capability 装载(serve.ts)、changeset fixed 组、各处注释(spec 契约 / auth / messaging / settings manifest)、packages.mdx 文档(Plugins 18 / Platform services 16,条目移至 services 段落)。
  • 附 changeset(fixed 组 lockstep patch)。

说明

  • @objectstack/plugin-sms@14.3.0 已随 chore: version packages #2792 发过一个版本,npm 上的旧包名建议由维护者执行 npm deprecate @objectstack/plugin-sms "renamed to @objectstack/service-sms"(我没有 npm 权限)。
  • 验证:check-changeset-fixed ✓;service-sms 构建 + 28 测试 ✓;CLI 构建 + 476 测试 ✓。

🤖 Generated with Claude Code

https://claude.ai/code/session_013LXUXU66dBaP3SSG4ZVtuH


Generated by Claude Code

…-sms

Infrastructure services follow the service-* convention (service-messaging,
service-settings, ...) - the plugin-* prefix was a misfit for a package whose
whole job is registering the `sms` kernel service (plugin-email is legacy
debt, not precedent). Same exports, same SmsServicePlugin class, same `sms`
service id and settings namespace - only the package name and its home
(packages/services/service-sms) change. The one published
@objectstack/plugin-sms@14.3.0 release should be npm-deprecated in favour of
@objectstack/service-sms.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013LXUXU66dBaP3SSG4ZVtuH
@vercel

vercel Bot commented Jul 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 10, 2026 3:41pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation dependencies Pull requests that update a dependency file protocol:system tests tooling size/s labels Jul 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 4 package(s): @objectstack/cli, @objectstack/plugin-auth, packages/services, @objectstack/spec.

101 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via packages/cli, @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/data-flow.mdx (via @objectstack/cli)
  • content/docs/api/environment-routing.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/cli, packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via packages/services, @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/production-readiness.mdx (via @objectstack/plugin-auth)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @objectstack/cli, @objectstack/plugin-auth, @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/audit-service.mdx (via packages/services)
  • content/docs/kernel/runtime-services/data-service.mdx (via packages/cli)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/cli, packages/services, packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/settings-service.mdx (via packages/services)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/plugin-auth, @objectstack/spec)
  • content/docs/permissions/authentication.mdx (via @objectstack/cli, @objectstack/plugin-auth)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/permissions/sso.mdx (via @objectstack/plugin-auth)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/plugin-auth, @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/cli, @objectstack/plugin-auth, packages/services, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/i18n-standard.mdx (via packages/services, @objectstack/spec)
  • content/docs/protocol/objectos/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/objectos/plugin-spec.mdx (via @objectstack/cli, @objectstack/spec)
  • content/docs/protocol/objectos/realtime-protocol.mdx (via @objectstack/cli)
  • content/docs/protocol/objectos/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via packages/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/cli, @objectstack/plugin-auth, @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/plugin-auth, @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

claude added 2 commits July 10, 2026 15:17
…ugin

plugins.phoneNumber existed in AuthPluginConfig (#2766) but `objectstack
serve` never set it - there was no way to turn phone sign-in/OTP on from
the CLI. Follows the OS_{DOMAIN}_{FEATURE}_ENABLED convention; default off.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013LXUXU66dBaP3SSG4ZVtuH
Found dogfooding the live flow: better-auth's /phone-number/send-otp stores
the fresh code BEFORE invoking sendOTP, so a cooldown rejection thrown from
the callback still rotated - and thereby invalidated - the previously
delivered code. A user hitting resend during the cooldown (or an attacker
spamming the endpoint) voided the valid OTP every time.

The per-number cooldown/hourly-cap check now runs in the hooks.before
middleware (assertPhoneOtpSendAllowed) for /phone-number/send-otp and
/phone-number/request-password-reset - rejected requests never reach the
endpoint handler, so the stored code survives. The sendOTP callback only
delivers. Behaviour verified end-to-end against a live server.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013LXUXU66dBaP3SSG4ZVtuH
@github-actions github-actions Bot added size/m and removed size/s labels Jul 10, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review July 10, 2026 15:42
@os-zhuang
os-zhuang merged commit 1c19139 into main Jul 10, 2026
18 checks passed
@os-zhuang
os-zhuang deleted the claude/sms-infrastructure-phone-otp-9tisdu branch July 10, 2026 15:42
os-zhuang added a commit that referenced this pull request Jul 11, 2026
* docs(auth): document phone sign-in, admin user management, and bulk user import

Catches content/docs/permissions/authentication.mdx up with the shipped
auth surface (#2766 / PR #2771, SMS follow-up #2780 / PR #2797):

- Phone-Number Sign-In section: plugins.phoneNumber flag (and the CLI
  OS_AUTH_PHONE_NUMBER_ENABLED override), /sign-in/phone-number, the
  OTP flows' dependency on a wired SMS service (rate-limited), and the
  placeholder-email semantics for phone-only accounts.
- Admin User Management section: /admin/create-user (one-time temporary
  password + mustChangePassword → 403 PASSWORD_EXPIRED gate),
  /admin/set-user-password, /admin/import-users (invite/temporary
  policies incl. the SMS-invite path, upsert profile-field-only rules,
  500-row sync cap, no undo).
- API endpoint reference: new Phone Number and Admin User Management
  subsections.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016r6eiJzivw1CkwTDSGho1o

* docs(auth): baseline better-auth 'role' boundary refs + regen reference docs

check-role-word (ADR-0090 D3) flagged the two new mentions in
authentication.mdx — both refer to better-auth's literal `role` scalar
(a genuine boundary), so the file is baselined rather than reworded.
Also picks up the generated reference docs that lag the merged spec:
features.phoneNumber/phoneNumberOtp and the auth-config phoneNumber flag
(#2766/#2780), plus component.mdx's relationshipValueField row.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016r6eiJzivw1CkwTDSGho1o

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation protocol:system size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants