@mentra/cloud-client 3.3.0-dev.320 → 3.3.0-dev.322

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mentra/cloud-client",
3
- "version": "3.3.0-dev.320",
3
+ "version": "3.3.0-dev.322",
4
4
  "type": "module",
5
5
  "main": "./src/index.ts",
6
6
  "exports": {
@@ -12,7 +12,7 @@
12
12
  "test": "bun test"
13
13
  },
14
14
  "dependencies": {
15
- "@mentra/cloud-protocol": "3.3.0-dev.320",
15
+ "@mentra/cloud-protocol": "3.3.0-dev.322",
16
16
  "tweetnacl": "^1.0.3"
17
17
  },
18
18
  "devDependencies": {
package/src/index.ts CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  // The top-level object. Implemented in ./client by the client agent; re-exported
18
18
  // here so the public import is `@mentra/cloud-client`, not a deep path.
19
- export type { AcsMeetingCredential } from "./modules/runtime/meetings";
19
+ export type { AcsMeetingCredential, CreatedTeamsMeeting } from "./modules/runtime/meetings";
20
20
  export { CloudClient } from "./client";
21
21
  export { DEFAULT_REFRESH_TOKEN_KEY } from "./modules/auth/token-store";
22
22
 
@@ -9,9 +9,51 @@ export interface AcsMeetingCredential {
9
9
  guestReason?: "teams-license-unavailable"
10
10
  }
11
11
 
12
+ export interface CreatedTeamsMeeting {
13
+ provider: "acs-teams"
14
+ joinUrl: string
15
+ meetingRef: string
16
+ identityMode: "guest" | "teams-user"
17
+ guestReason?: "no-entra-identity" | "teams-license-unavailable"
18
+ }
19
+
12
20
  export class Meetings {
13
21
  constructor(private readonly http: HttpClient) {}
14
22
 
23
+ async createTeamsMeeting(
24
+ options: {subject?: string; durationMinutes?: number},
25
+ teamsUserAadToken?: string,
26
+ ): Promise<CreatedTeamsMeeting> {
27
+ const value = await this.http.post<CreatedTeamsMeeting>("/api/meetings/teams/create", {
28
+ ...options,
29
+ ...(teamsUserAadToken ? {teamsUserAadToken} : {}),
30
+ })
31
+ if (
32
+ !value ||
33
+ value.provider !== "acs-teams" ||
34
+ typeof value.joinUrl !== "string" ||
35
+ !/^https:\/\/(teams\.microsoft\.com|teams\.cloud\.microsoft)\//.test(value.joinUrl) ||
36
+ typeof value.meetingRef !== "string" ||
37
+ !value.meetingRef ||
38
+ !["guest", "teams-user"].includes(value.identityMode) ||
39
+ (teamsUserAadToken && value.identityMode === "guest" && value.guestReason !== "teams-license-unavailable") ||
40
+ (!teamsUserAadToken && (value.identityMode !== "guest" || value.guestReason !== "no-entra-identity"))
41
+ ) {
42
+ throw new Error("Runtime returned an invalid created meeting")
43
+ }
44
+ return {
45
+ provider: value.provider,
46
+ joinUrl: value.joinUrl,
47
+ meetingRef: value.meetingRef,
48
+ identityMode: value.identityMode,
49
+ ...(value.identityMode === "guest" ? {guestReason: value.guestReason} : {}),
50
+ }
51
+ }
52
+
53
+ async retireTeamsMeeting(meetingRef: string): Promise<void> {
54
+ await this.http.post("/api/meetings/teams/retire", {meetingRef})
55
+ }
56
+
15
57
  async getAcsCredential(teamsUserAadToken?: string): Promise<AcsMeetingCredential> {
16
58
  const value = await this.http.post<AcsMeetingCredential>(
17
59
  "/api/meetings/acs/token",