{"_id":"@beeworks/imsdk-jitsi-adapter","name":"@beeworks/imsdk-jitsi-adapter","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@beeworks/imsdk-jitsi-adapter","version":"0.1.1","description":"Jitsi Meet Web adapter for @beeworks/imsdk meeting APIs.","type":"module","main":"dist/index.js","module":"dist/index.js","types":"dist/index.d.ts","browser":"dist/index.umd.js","unpkg":"dist/index.umd.js","publishConfig":{"access":"public"},"sideEffects":false,"engines":{"node":">=22.14.0"},"peerDependencies":{"@beeworks/imsdk":">=1.0.0"},"devDependencies":{"rollup":"^4.44.1","tslib":"^2.8.1","typescript":"^5.8.3"},"scripts":{"build":"tsc -p tsconfig.json --outDir dist/.build --declarationDir dist && rollup -c rollup.config.mjs","docs":"typedoc --options typedoc.json","test":"npm run build && node test/smoke.mjs","typecheck":"tsc -p tsconfig.json --noEmit"},"_id":"@beeworks/imsdk-jitsi-adapter@0.1.1","gitHead":"f56862b0be71981cfc68f31faf4399ba602c04e4","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-fjcYtcxXD1IJvOsoFZoHiL3FKXeqbjKXkUPxA0hgGo7sI0DLi/9UGAHWJsPBTGMi+mzE3pygOYROP/+JjSo//A==","shasum":"92a17ff13da74e7ababcabf898cca96c99dd0403","tarball":"https://registry.npmjs.org/@beeworks/imsdk-jitsi-adapter/-/imsdk-jitsi-adapter-0.1.1.tgz","fileCount":9,"unpackedSize":48891,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDDN7tJD1f1psGoohGGECwAlJgXTY1FvSfNeNVl7/dXxwIhAP1zr45Bi/M5pXQUGJy7/TydniNkdBrfQ1janYC2tX+X"}]},"_npmUser":{"name":"hejx","email":"hjx531601727@qq.com"},"directories":{},"maintainers":[{"name":"hejx","email":"hjx531601727@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/imsdk-jitsi-adapter_0.1.1_1788319115953_0.6212170517176514"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-02T03:18:35.739Z","0.1.1":"2026-09-02T03:18:36.090Z","modified":"2026-09-02T03:18:37.063Z"},"maintainers":[{"name":"hejx","email":"hjx531601727@qq.com"}],"description":"Jitsi Meet Web adapter for @beeworks/imsdk meeting APIs.","readme":"# @beeworks/imsdk-jitsi-adapter\n\n浏览器端 Jitsi Meet External API 适配器。它把 `@beeworks/imsdk` 的会议接口与 Jitsi Web 会议连接起来，但不会把 Jitsi、DOM 或 iframe 依赖带入核心 SDK。\n\n```ts\nimport * as imsdk from '@beeworks/imsdk';\nimport { createJitsiAdapter } from '@beeworks/imsdk-jitsi-adapter';\n\nconst adapter = createJitsiAdapter({ meetingApi: imsdk });\nconst session = await adapter.join({\n  meetingNo: 123456789, // 也可传入 '123456789'\n  parentNode: document.querySelector('#meeting')!,\n  enableInviteRequest: true,\n  customeInviteDomain: 'https://workplus-meet.workplus.io/web/#/meetLink?no=%s',\n});\n\nsession.on('joined', () => console.log('joined'));\nsession.on('inviteRequested', ({ meetingNo }) => {\n  // 1. 宿主应用打开联系人选择器\n  // 2. 通过 IM 向选中的用户发送会议邀请消息\n  // 3. 被邀请用户收到消息后调用 joinMeet(meetingNo)，再进入 Jitsi\n  console.log('invite requested', meetingNo);\n});\nawait session.leave();\n```\n\n`start()` 会先调用 `startMeet`，`join()` 会先调用 `joinMeet`，`mount()` 只获取新鲜的 Jitsi 参数并挂载会议。Jitsi External API 从服务端返回的 `serverUrl` 动态加载，JWT 不会被记录或持久化。\n\n会话事件中，`left` 表示当前用户离开 Jitsi，会话最多触发一次；显式调用\n`session.leave()` 会在发出 `hangup` 后立即派发一次 `left`，随后销毁会话。\n`readyToClose` 只用于适配器内部完成销毁，不代表服务端会议状态结束。服务端会议\n结束仍应监听核心 SDK 的 `MEETING_STATE_CHANGED`（操作为 `END` 或 `CANCEL`）。\n\n会话提供 `role`（`moderator`、`participant`、`unknown`）和 `isModerator`，由\nJitsi 的 `participantRoleChanged` 更新。`leave()` 只让当前用户离开；`end()` 请求\n结束整场会议，已确认是普通参与者时会返回 `NOT_MODERATOR`，角色未知时交由 Jitsi\n服务端做最终权限校验。\n\nJitsi 的 `micError` 和 `cameraError` 会分别映射为 `microphoneError` 和\n`cameraError`，同时保留通用 `error` 事件。错误消息不会包含 JWT 或完整 URL；\n错误码会尽力归类为 `*_PERMISSION_DENIED`、`*_UNAVAILABLE` 或 `*_ERROR`；具体的\n浏览器权限、设备占用和服务端策略原因以事件中的 `error.cause` 为诊断依据，业务层\n不应直接向用户展示其中的原始内容。\n\n`enableInviteRequest` 默认为 `true`，Adapter 会在 Jitsi 配置中开启定制的\n`externalInvitation` 模式，并把每次邀请按钮点击转换为当前会话的\n`inviteRequested` 事件。事件只表示“请求打开邀请流程”，载荷仅包含规范化后的\n`meetingNo`；Adapter 不会弹出联系人选择器、查询成员、发送会议邀请 IM 或调用\n会议邀请 HTTP API，这些逻辑由宿主应用负责。宿主应用发送 IM 后，被邀请端应先调用\n`joinMeet(meetingNo)` 完成会议业务加入，再使用 Adapter 进入 Jitsi。该选项默认为\n`true`，与 pc-xx 的定制 Jitsi 行为一致；如需保留 Jitsi 自带的邀请弹窗，可显式传入\n`enableInviteRequest: false`。仍可通过 `configOverwrite` 配置其他 Jitsi 定制项。\n\n`customeInviteDomain` 与 `externalInvitation` 是两个独立的 Jitsi 定制配置：前者是\nJitsi 默认分享内容使用的邀请链接模板（字段名沿用 pc-xx 的历史拼写，`%s` 代表会议号），\n后者才是将“分享会议”和“邀请其他人”按钮点击转成 `inviteRequested` 事件的开关。\n如果 `/meetings/{meetingNo}/sdk` 已返回该字段，Adapter 会自动透传；调用方也可在\n挂载选项中覆盖它，或继续使用 `configOverwrite.customeInviteDomain`。\n","readmeFilename":"README.md","_rev":"1-3413cd835eda9dea4fdccf363c55f6b2"}