{"_id":"@a15762877559/mini-call-sdk","_rev":"2-2c01e13e459abc1406424764a89e44f5","name":"@a15762877559/mini-call-sdk","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@a15762877559/mini-call-sdk","version":"0.1.0","keywords":[],"author":"","license":"ISC","_id":"@a15762877559/mini-call-sdk@0.1.0","maintainers":[{"name":"a15762877559","email":"a15762877559@gmail.com"}],"dist":{"shasum":"047f8e69250ab27c6ae7455e9bc95fd63f2e7fa1","tarball":"https://registry.npmjs.org/@a15762877559/mini-call-sdk/-/mini-call-sdk-0.1.0.tgz","fileCount":23,"integrity":"sha512-abSUoHagqdYL57BVp50yn3uKfHr0sVOlAnDyHqFlnuIE5Yu/al+SAi4P0qoWLDNJGXxvYRKNrHC5TyNrMAVxAw==","signatures":[{"sig":"MEYCIQDqYDufcEcxANJKUM45LGTmvdWvfoVJ1GtzHZ2gOS92YQIhAPwaLpsQIpi+k3CP4V4vfmP57BX0PnozvJuQZto8a4l1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74489},"main":"./src/index.js","type":"module","exports":{".":"./src/index.js"},"scripts":{"test":"node --test tests/*.test.mjs"},"_npmUser":{"name":"a15762877559","email":"a15762877559@gmail.com"},"_npmVersion":"11.13.0","description":"Platform-neutral Mini Program call session, notification, WebView lifecycle, and signaling runtime SDK.","directories":{"doc":"docs","test":"tests"},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/mini-call-sdk_0.1.0_1789115406203_0.08273332286469315","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"_id":"@a15762877559/mini-call-sdk@0.1.1","dist":{"shasum":"b7a92df08b41e10cdf6f88c90b328d3ac1d4c8f6","tarball":"https://registry.npmjs.org/@a15762877559/mini-call-sdk/-/mini-call-sdk-0.1.1.tgz","fileCount":23,"integrity":"sha512-dTqilo6r845xGPdXQxsKXasKzZh34pPO9x2xDs5iKJSpBuN8waaROL+Ch6m2W+4ki8pvETd8kvf7QhSJWyd+uw==","signatures":[{"sig":"MEUCIQDuACrK5SsW2y3IX4Wu9kQhTffm5uShVtabZiIOczCdoQIgE6QfKdzuli2JyniktznhVyuqL9Kr6UihyiyYTOxRG7U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDaULJjI4yWnQRbZg1ToRMk2JBEWKDFGaj3hPBsucUF9AiBSAQAkjzWJDlg9ZPZZq6gAp5qMJPFTl3/4JCqmKcc66g=="}],"unpackedSize":81151},"main":"./src/index.js","name":"@a15762877559/mini-call-sdk","type":"module","author":"","exports":{".":"./src/index.js"},"gitHead":"75dde497279616a6aa272afb113234f1ea64b4e1","license":"ISC","scripts":{"test":"node --test tests/*.test.mjs"},"version":"0.1.1","_npmUser":{"name":"a15762877559","email":"a15762877559@gmail.com"},"keywords":[],"_npmVersion":"11.13.0","description":"Platform-neutral Mini Program call session, notification, WebView lifecycle, and signaling runtime SDK.","directories":{"doc":"docs","test":"tests"},"maintainers":[{"name":"a15762877559","email":"a15762877559@gmail.com"}],"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mini-call-sdk_0.1.1_1789450830179_0.33964091939130214"}}},"time":{"created":"2026-09-11T08:30:06.038Z","modified":"2026-09-15T05:40:30.425Z","0.1.0":"2026-09-11T08:30:06.343Z","0.1.1":"2026-09-15T05:40:30.271Z"},"license":"ISC","keywords":[],"description":"Platform-neutral Mini Program call session, notification, WebView lifecycle, and signaling runtime SDK.","maintainers":[{"name":"a15762877559","email":"a15762877559@gmail.com"}],"readme":"# @a15762877559/mini-call-sdk\n\n戴沃 Mini 视频通话客户端的平台无关 SDK。首个公开版本为 `0.1.0`。\n\nSDK 提供 CallSession、通知、审计、H5、WebView 生命周期和 provider-neutral 信令能力。\nVue 页面、uni/wx API、业务 Store、HTTP 实现以及 AnyRTM 等具体客户端均由 Host 注入。\n\n## 架构\n\n```text\nHost UI / Platform\n        ↓\nHost Composition Root\n        ↓\n@a15762877559/mini-call-sdk\n        ↓\nSDK Core / Runtime / Signaling Runtime\n        ↑\nHost Adapters / Host SignalingProvider\n```\n\n详细边界见 [docs/architecture.md](docs/architecture.md)。\n\n## 安装\n\n使用 npm 安装固定版本：\n\n```powershell\nnpm install @a15762877559/mini-call-sdk@0.1.1\n```\n\nHost 的 `package.json` 应精确锁定版本：\n\n```json\n{\n  \"dependencies\": {\n    \"@a15762877559/mini-call-sdk\": \"0.1.1\"\n  }\n}\n```\n\n不要使用 `latest`、`^` 或 `~` 隐式升级。Host 必须从公开包入口导入，不得深导入 SDK `src/`。\n\n## Public API\n\n```js\nimport {\n  MINI_CALL_SDK_VERSION,\n  createMiniCallSdk\n} from '@a15762877559/mini-call-sdk'\n```\n\n主要公开导出为 `MINI_CALL_SDK_VERSION` 与 `createMiniCallSdk(options)`。V0.1 同时冻结以下\nprovider-neutral 信令契约导出：\n\n```text\ncreateSignalingRuntime\nSIGNALING_PROVIDER_EVENTS\nvalidateSignalingProvider\nnormalizeSignalingInvitation\nparseSignalingInvitationContent\nparsePeerMessage\n```\n\n`callSessionLogic`、`callSessionCore`、`notificationCore`、`runtimeCore` 暂时保留为\n`INTERNAL_COMPATIBILITY` namespace；页面不应直接使用。\n\n### SDK 实例方法\n\n| 方法 | 用途与生命周期 | 输入/输出 | 错误与幂等 |\n| --- | --- | --- | --- |\n| `initialize(context)` | Host 登录后初始化 SDK/信令 | Host context；同步值或 Promise | 同一进行中操作 single-flight；失败可重试 |\n| `resume(context)` | App 前台恢复；业务恢复优先、信令 best effort | Host context；恢复结果 | destroy 后拒绝；并发登录由信令 runtime 合并 |\n| `destroy()` | 登出时释放 runtime、provider 与 listeners | 无；同步值或 Promise | 幂等 |\n| `recoverActiveCall(input)` | 查询权威 Java CallSession 并恢复 | Host recovery input/result | adapter 错误向调用方返回，同时发出安全 error 事件 |\n| `acceptIncomingCall(input)` | 执行冻结的接听命令 | plain call context/result | Host 保持 Java-first；重复操作由 Host/session gate 合并 |\n| `rejectIncomingCall(input)` | 执行冻结的拒绝命令 | plain call context/result | Host 保持 Java-first；终态可幂等收敛 |\n| `markCalleeReady(input)` | 通知来电 UI 已渲染 | plain call context/result | 同 session single-flight；失败可重试 |\n| `createH5Ticket(input)` | 请求 opaque 一次性 H5 ticket | session input/ticket | 不持久化；失败不泄漏响应或秘密 |\n| `requestNextCallReminder(input)` | 仅由用户手势请求订阅通知 | presentation input/result | 不自动调用；失败不改变通话流程 |\n| `handleNotificationEntry(input)` | 处理合法通知 trace | sanitized trace/result | 重复 trace 共享流程；审计失败与业务失败隔离 |\n| `handleWebViewUnload(input)` | 按 session close reason 收口 WebView | plain unload input/result | 同 session unload single-flight |\n| `getCallState()` | 获取只读、allowlist 的公开状态 | 无；frozen plain object | 不返回 provider/邀请对象 |\n| `onCallEvent(type, listener)` | 注册 SDK 事件 | event/listener；返回 unsubscribe | 重复 listener 由事件 hub 管理 |\n| `offCallEvent(type, listener)` | 显式注销 SDK 事件 | event/listener；boolean | 无匹配监听器安全返回 |\n\n公开错误固定为 `{ code, message, operation }`，不包含 raw provider error、SDK 对象或凭据。\n\n### SDK 事件\n\n| 事件 | payload | 生命周期 |\n| --- | --- | --- |\n| `lifecycle` | `{ status: 'initialized'|'destroyed' }` | 初始化或销毁完成 |\n| `call-updated` | `{ operation, status }` | 接听完成 |\n| `call-ended` | `{ operation, status }` | 拒绝或 WebView unload 完成 |\n| `recovery` | `{ operation, status }` | active recovery 完成 |\n| `notification-entry` | `{ operation, status }` | 通知入口完成 |\n| `error` | `{ code, message, operation }` | SDK、adapter 或信令失败 |\n\n所有事件 payload 均为 plain object。\n\n## Adapter Contracts\n\n| Adapter | 必需方法 |\n| --- | --- |\n| Identity | `getSignalUserId()` |\n| Request | `get(url, params, options)`、`post(url, data, options)` |\n| Navigation | `openIncomingCall()`、`openCallWebView()`、`returnFromCall()`、`closeCallWebView()` |\n| Storage | `get(key)`、`set(key, value)`、`remove(key)` |\n| Subscription | `request(templateIds)` |\n| Logger | `info(stage, data)`、`warn(stage, data)`、`error(stage, data)` |\n\n所有 adapter 都是显式必填。SDK 不读取 Host storage key，不直接使用平台 API。\n\n## SignalingProvider\n\n冻结方法：\n\n```text\ninitialize\nlogin\nlogout\ndestroy\nisConnected\ngetSnapshot\nacceptInvitation\nrejectInvitation\nreleaseInvitation\nhasInvitation\nsendPeerMessage\non\noff\n```\n\nprovider 保存具体实时通信客户端、回调和邀请 registry，只向 SDK 发送 allowlist plain data。\nSDK 信令 runtime 负责登录 single-flight、代际、重试、stale completion 防护与安全错误归一化。\nSDK 不捆绑 AnyRTM provider；具体 provider 必须由 Host 提供。\n\n## Identity\n\nSDK 使用 `caller` / `callee` 中立角色，不认识具体 Host 的用户存储字段。Host IdentityAdapter\n返回信令用户 ID。`signalCallerId/signalCalleeId` 与 `trtcCallerUserId/trtcCalleeUserId` 不得互相回退，\n所有 ID 保持字符串。\n\n## Lifecycle 与后台模型\n\n```text\nHost 登录成功 → initialize()\nApp onShow    → resume()\nHost 登出     → destroy()\n```\n\n没有 SDK `onHide` keepalive、后台轮询或后台重连循环。前台可使用实时信令；后台/关闭态继续依赖\nJava CallSession 与平台通知。\n\n## Notification\n\n通知订阅状态固定为：\n\n```text\nUNKNOWN\nLIKELY_AVAILABLE\nLIKELY_CONSUMED\nRECENTLY_REJECTED\n```\n\n这是 advisory 状态，不是真实剩余额度。SDK 不自动请求订阅。合法 `callNotifyTrace` 按“点击审计 →\nactive recovery → 恢复审计”处理；普通启动不产生点击审计，审计失败不改变业务结果。\n\n## H5 Contract\n\nH5 仅接收 opaque、一次性 ticket。SDK 不解析 ticket 内容、不持久化 ticket/UserSig，也不把信令或\nTRTC 身份拼接进 URL。`USER_EXIT` 执行业务挂断；`JAVA_TERMINAL` 与 `REMOTE_END` 只消费各自\nsession-scoped close reason，避免重复 `/end` 或 EndCall。\n\n## 集成第二个 Host\n\n`SECOND_MINI_PROJECT = NOT_AVAILABLE`。当前不创建假的第二 Mini 应用。\n\n仅需：实现六类 adapters、实现 provider、创建唯一 SDK 实例、绑定生命周期、构建 Host UI、配置\nH5/通知模板、运行 contract tests。参见 [docs/host-integration.md](docs/host-integration.md)。无需复制\n第一 Host 的 services 或页面。\n\n## 测试\n\n在 SDK 根目录直接执行：\n\n```powershell\nnpm test\n```\n\n测试覆盖核心规则、SDK 实例、adapter/provider contract、信令并发与最小 Host fixture。\n`tests/minimal-host-fixture.test.mjs` 证明 SDK 在没有第一 Host、uni、wx 或 AnyRTM 的环境中可以完成\n核心生命周期。\n\n可在发布前检查未来 tarball：\n\n```powershell\nnpm pack --dry-run\n```\n\n当前公开发行包为 `@a15762877559/mini-call-sdk@0.1.1`。\n","readmeFilename":"README.md"}