@meshagent/meshagent 0.52.3 → 0.53.0

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/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ## [0.53.0]
2
+ - Added user profile metadata and annotations to project-member types and parsing.
3
+ - Added the `user_profile_editor` project role and support for partial profile updates with metadata, annotations, and project ID options.
4
+
5
+ ## [Unreleased]
6
+ - Added user profile metadata and string annotations to project-member models, plus `metadata`, `annotations`, and `projectId` options on `updateUserProfile`. Omitted fields are preserved; supplied maps replace their previous contents.
7
+ - Added `user_profile_editor` to project role types and parsing. Project owners and admins inherit profile editing; ordinary users can edit their own names and metadata.
8
+
9
+ ## [0.52.4]
10
+ - Stability
11
+
1
12
  ## [0.52.3]
2
13
  - Updated LLM proxy TypeScript examples for the current provider endpoints and configuration flow.
3
14
  - Updated Vitest to 4.1.11 and added `@vitest/browser-playwright` 4.1.11 for browser testing.
@@ -702,6 +702,18 @@ var unexpectedCase = () => {
702
702
  // ../node_modules/lib0/decoding.js
703
703
  var errorUnexpectedEndOfArray = create3("Unexpected end of array");
704
704
  var errorIntegerOutOfRange = create3("Integer out of Range");
705
+ var subarray = (arr, begin, len) => {
706
+ if (begin < 0 || len < 0 || begin + len > arr.length) {
707
+ throw errorUnexpectedEndOfArray;
708
+ }
709
+ return new Uint8Array(arr.buffer, arr.byteOffset + begin, len);
710
+ };
711
+ var subdataview = (arr, begin, len) => {
712
+ if (begin < 0 || len < 0 || begin + len > arr.length) {
713
+ throw errorUnexpectedEndOfArray;
714
+ }
715
+ return new DataView(arr.buffer, arr.byteOffset + begin, len);
716
+ };
705
717
  var Decoder = class {
706
718
  /**
707
719
  * @param {Uint8Array<Buf>} uint8Array Binary data to decode
@@ -714,7 +726,7 @@ var Decoder = class {
714
726
  var createDecoder = (uint8Array) => new Decoder(uint8Array);
715
727
  var hasContent = (decoder) => decoder.pos !== decoder.arr.length;
716
728
  var readUint8Array = (decoder, len) => {
717
- const view = new Uint8Array(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len);
729
+ const view = subarray(decoder.arr, decoder.pos, len);
718
730
  decoder.pos += len;
719
731
  return view;
720
732
  };
@@ -791,7 +803,7 @@ var _readVarStringNative = (decoder) => (
791
803
  );
792
804
  var readVarString = utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill;
793
805
  var readFromDataView = (decoder, len) => {
794
- const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len);
806
+ const dv = subdataview(decoder.arr, decoder.pos, len);
795
807
  decoder.pos += len;
796
808
  return dv;
797
809
  };
@@ -3691,15 +3703,15 @@ var cleanupTransactions = (transactionCleanups, i) => {
3691
3703
  fs.push(() => {
3692
3704
  transaction.changedParentTypes.forEach((events, type) => {
3693
3705
  if (type._dEH.l.length > 0 && (type._item === null || !type._item.deleted)) {
3694
- events = events.filter(
3695
- (event) => event.target._item === null || !event.target._item.deleted
3696
- );
3697
- events.forEach((event) => {
3698
- event.currentTarget = type;
3699
- event._path = null;
3700
- });
3701
- events.sort((event1, event2) => event1.path.length - event2.path.length);
3702
3706
  fs.push(() => {
3707
+ events = events.filter(
3708
+ (event) => event.target._item === null || !event.target._item.deleted
3709
+ );
3710
+ events.forEach((event) => {
3711
+ event.currentTarget = type;
3712
+ event._path = null;
3713
+ });
3714
+ events.sort((event1, event2) => event1.path.length - event2.path.length);
3703
3715
  callEventHandlerListeners(type._dEH, events, transaction);
3704
3716
  });
3705
3717
  }
@@ -1,5 +1,5 @@
1
1
  import { ApiScope } from "./participant-token.js";
2
- export type ProjectRole = "member" | "admin" | "developer" | "room_creator" | "room_inventory" | "room_manager" | "session_inventory" | "agent_creator" | "agent_inventory" | "agent_manager" | "repository_creator" | "repository_inventory" | "repository_manager" | "feed_creator" | "feed_inventory" | "feed_manager" | "oauth_client_creator" | "oauth_client_inventory" | "oauth_client_manager" | "api_key_creator" | "api_key_inventory" | "api_key_manager" | "service_creator" | "service_inventory" | "service_manager" | "service_account_creator" | "service_account_inventory" | "service_account_manager" | "participant_token_creator" | "mailbox_creator" | "mailbox_inventory" | "mailbox_manager" | "route_creator" | "route_inventory" | "route_manager" | "scheduled_task_creator" | "scheduled_task_inventory" | "scheduled_task_manager" | "feed_subscription_creator" | "feed_subscription_inventory" | "feed_subscription_manager" | "llm_logger_creator" | "llm_logger_inventory" | "llm_logger_manager" | "llm_proxy_user" | "llm_quota_manager" | "usage_reporter" | "billing_manager" | "group_manager";
2
+ export type ProjectRole = "member" | "admin" | "developer" | "room_creator" | "room_inventory" | "room_manager" | "session_inventory" | "agent_creator" | "agent_inventory" | "agent_manager" | "repository_creator" | "repository_inventory" | "repository_manager" | "feed_creator" | "feed_inventory" | "feed_manager" | "oauth_client_creator" | "oauth_client_inventory" | "oauth_client_manager" | "api_key_creator" | "api_key_inventory" | "api_key_manager" | "service_creator" | "service_inventory" | "service_manager" | "service_account_creator" | "service_account_inventory" | "service_account_manager" | "participant_token_creator" | "mailbox_creator" | "mailbox_inventory" | "mailbox_manager" | "route_creator" | "route_inventory" | "route_manager" | "scheduled_task_creator" | "scheduled_task_inventory" | "scheduled_task_manager" | "feed_subscription_creator" | "feed_subscription_inventory" | "feed_subscription_manager" | "llm_logger_creator" | "llm_logger_inventory" | "llm_logger_manager" | "llm_proxy_user" | "llm_quota_manager" | "usage_reporter" | "billing_manager" | "group_manager" | "user_profile_editor";
3
3
  export type ResourceRole = "viewer" | "operator" | "developer" | "admin";
4
4
  export type RoomRole = "site_user" | "guest" | ResourceRole;
5
5
  export type ProjectSettingsDocumentName = "openai" | "anthropic" | "otel" | "admission" | "room" | "room_roles" | "router";
@@ -131,6 +131,8 @@ export interface ProjectMember {
131
131
  email: string;
132
132
  firstName?: string | null;
133
133
  lastName?: string | null;
134
+ metadata?: Record<string, unknown>;
135
+ annotations?: Record<string, string>;
134
136
  directRoles: ProjectRole[];
135
137
  }
136
138
  export interface ProjectMembersPage {
@@ -660,7 +662,11 @@ export declare class Meshagent {
660
662
  }): Promise<ProjectMembersPage>;
661
663
  getUsersInProject(projectId: string): Promise<ProjectMember[]>;
662
664
  getUserProfile(userId: string): Promise<Record<string, unknown>>;
663
- updateUserProfile(userId: string, firstName: string, lastName: string): Promise<Record<string, unknown>>;
665
+ updateUserProfile(userId: string, firstName?: string, lastName?: string, options?: {
666
+ metadata?: Record<string, unknown>;
667
+ annotations?: Record<string, string>;
668
+ projectId?: string;
669
+ }): Promise<Record<string, unknown>>;
664
670
  listProjects(): Promise<Record<string, unknown>>;
665
671
  getProject(projectId: string): Promise<Record<string, unknown>>;
666
672
  getProjectByKey(projectKey: string): Promise<Record<string, unknown>>;
@@ -697,7 +697,8 @@ class Meshagent {
697
697
  item === "llm_proxy_user" ||
698
698
  item === "usage_reporter" ||
699
699
  item === "billing_manager" ||
700
- item === "group_manager")
700
+ item === "group_manager" ||
701
+ item === "user_profile_editor")
701
702
  : [];
702
703
  const id = typeof user.id === "string" ? user.id : "";
703
704
  const email = typeof user.email === "string" ? user.email : "";
@@ -706,6 +707,8 @@ class Meshagent {
706
707
  email,
707
708
  firstName: typeof user.first_name === "string" ? user.first_name : null,
708
709
  lastName: typeof user.last_name === "string" ? user.last_name : null,
710
+ metadata: user.metadata && typeof user.metadata === "object" ? user.metadata : {},
711
+ annotations: user.annotations && typeof user.annotations === "object" ? user.annotations : {},
709
712
  directRoles,
710
713
  };
711
714
  }
@@ -779,6 +782,7 @@ class Meshagent {
779
782
  item === "usage_reporter" ||
780
783
  item === "billing_manager" ||
781
784
  item === "group_manager" ||
785
+ item === "user_profile_editor" ||
782
786
  item === "reader" ||
783
787
  item === "subscriber" ||
784
788
  item === "publisher" ||
@@ -1014,10 +1018,16 @@ class Meshagent {
1014
1018
  action: "fetch user profile",
1015
1019
  });
1016
1020
  }
1017
- async updateUserProfile(userId, firstName, lastName) {
1018
- return await this.request(`/accounts/profiles/${userId}`, {
1021
+ async updateUserProfile(userId, firstName, lastName, options = {}) {
1022
+ const query = options.projectId === undefined ? "" : `?project_id=${encodeURIComponent(options.projectId)}`;
1023
+ return await this.request(`/accounts/profiles/${encodeURIComponent(userId)}${query}`, {
1019
1024
  method: "PUT",
1020
- json: { first_name: firstName, last_name: lastName },
1025
+ json: {
1026
+ ...(firstName !== undefined ? { first_name: firstName } : {}),
1027
+ ...(lastName !== undefined ? { last_name: lastName } : {}),
1028
+ ...(options.metadata !== undefined ? { metadata: options.metadata } : {}),
1029
+ ...(options.annotations !== undefined ? { annotations: options.annotations } : {}),
1030
+ },
1021
1031
  action: "update user profile",
1022
1032
  });
1023
1033
  }
@@ -590,6 +590,18 @@ var unexpectedCase = () => {
590
590
  };
591
591
  var errorUnexpectedEndOfArray = create3("Unexpected end of array");
592
592
  var errorIntegerOutOfRange = create3("Integer out of Range");
593
+ var subarray = (arr, begin, len) => {
594
+ if (begin < 0 || len < 0 || begin + len > arr.length) {
595
+ throw errorUnexpectedEndOfArray;
596
+ }
597
+ return new Uint8Array(arr.buffer, arr.byteOffset + begin, len);
598
+ };
599
+ var subdataview = (arr, begin, len) => {
600
+ if (begin < 0 || len < 0 || begin + len > arr.length) {
601
+ throw errorUnexpectedEndOfArray;
602
+ }
603
+ return new DataView(arr.buffer, arr.byteOffset + begin, len);
604
+ };
593
605
  var Decoder = class {
594
606
  constructor(uint8Array) {
595
607
  this.arr = uint8Array;
@@ -599,7 +611,7 @@ var Decoder = class {
599
611
  var createDecoder = (uint8Array) => new Decoder(uint8Array);
600
612
  var hasContent = (decoder) => decoder.pos !== decoder.arr.length;
601
613
  var readUint8Array = (decoder, len) => {
602
- const view = new Uint8Array(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len);
614
+ const view = subarray(decoder.arr, decoder.pos, len);
603
615
  decoder.pos += len;
604
616
  return view;
605
617
  };
@@ -671,7 +683,7 @@ var _readVarStringPolyfill = (decoder) => {
671
683
  var _readVarStringNative = (decoder) => (utf8TextDecoder.decode(readVarUint8Array(decoder)));
672
684
  var readVarString = utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill;
673
685
  var readFromDataView = (decoder, len) => {
674
- const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len);
686
+ const dv = subdataview(decoder.arr, decoder.pos, len);
675
687
  decoder.pos += len;
676
688
  return dv;
677
689
  };
@@ -2772,13 +2784,13 @@ var cleanupTransactions = (transactionCleanups, i) => {
2772
2784
  fs.push(() => {
2773
2785
  transaction.changedParentTypes.forEach((events, type) => {
2774
2786
  if (type._dEH.l.length > 0 && (type._item === null || !type._item.deleted)) {
2775
- events = events.filter((event) => event.target._item === null || !event.target._item.deleted);
2776
- events.forEach((event) => {
2777
- event.currentTarget = type;
2778
- event._path = null;
2779
- });
2780
- events.sort((event1, event2) => event1.path.length - event2.path.length);
2781
2787
  fs.push(() => {
2788
+ events = events.filter((event) => event.target._item === null || !event.target._item.deleted);
2789
+ events.forEach((event) => {
2790
+ event.currentTarget = type;
2791
+ event._path = null;
2792
+ });
2793
+ events.sort((event1, event2) => event1.path.length - event2.path.length);
2782
2794
  callEventHandlerListeners(type._dEH, events, transaction);
2783
2795
  });
2784
2796
  }
@@ -1,5 +1,5 @@
1
1
  import { ApiScope } from "./participant-token.js";
2
- export type ProjectRole = "member" | "admin" | "developer" | "room_creator" | "room_inventory" | "room_manager" | "session_inventory" | "agent_creator" | "agent_inventory" | "agent_manager" | "repository_creator" | "repository_inventory" | "repository_manager" | "feed_creator" | "feed_inventory" | "feed_manager" | "oauth_client_creator" | "oauth_client_inventory" | "oauth_client_manager" | "api_key_creator" | "api_key_inventory" | "api_key_manager" | "service_creator" | "service_inventory" | "service_manager" | "service_account_creator" | "service_account_inventory" | "service_account_manager" | "participant_token_creator" | "mailbox_creator" | "mailbox_inventory" | "mailbox_manager" | "route_creator" | "route_inventory" | "route_manager" | "scheduled_task_creator" | "scheduled_task_inventory" | "scheduled_task_manager" | "feed_subscription_creator" | "feed_subscription_inventory" | "feed_subscription_manager" | "llm_logger_creator" | "llm_logger_inventory" | "llm_logger_manager" | "llm_proxy_user" | "llm_quota_manager" | "usage_reporter" | "billing_manager" | "group_manager";
2
+ export type ProjectRole = "member" | "admin" | "developer" | "room_creator" | "room_inventory" | "room_manager" | "session_inventory" | "agent_creator" | "agent_inventory" | "agent_manager" | "repository_creator" | "repository_inventory" | "repository_manager" | "feed_creator" | "feed_inventory" | "feed_manager" | "oauth_client_creator" | "oauth_client_inventory" | "oauth_client_manager" | "api_key_creator" | "api_key_inventory" | "api_key_manager" | "service_creator" | "service_inventory" | "service_manager" | "service_account_creator" | "service_account_inventory" | "service_account_manager" | "participant_token_creator" | "mailbox_creator" | "mailbox_inventory" | "mailbox_manager" | "route_creator" | "route_inventory" | "route_manager" | "scheduled_task_creator" | "scheduled_task_inventory" | "scheduled_task_manager" | "feed_subscription_creator" | "feed_subscription_inventory" | "feed_subscription_manager" | "llm_logger_creator" | "llm_logger_inventory" | "llm_logger_manager" | "llm_proxy_user" | "llm_quota_manager" | "usage_reporter" | "billing_manager" | "group_manager" | "user_profile_editor";
3
3
  export type ResourceRole = "viewer" | "operator" | "developer" | "admin";
4
4
  export type RoomRole = "site_user" | "guest" | ResourceRole;
5
5
  export type ProjectSettingsDocumentName = "openai" | "anthropic" | "otel" | "admission" | "room" | "room_roles" | "router";
@@ -131,6 +131,8 @@ export interface ProjectMember {
131
131
  email: string;
132
132
  firstName?: string | null;
133
133
  lastName?: string | null;
134
+ metadata?: Record<string, unknown>;
135
+ annotations?: Record<string, string>;
134
136
  directRoles: ProjectRole[];
135
137
  }
136
138
  export interface ProjectMembersPage {
@@ -660,7 +662,11 @@ export declare class Meshagent {
660
662
  }): Promise<ProjectMembersPage>;
661
663
  getUsersInProject(projectId: string): Promise<ProjectMember[]>;
662
664
  getUserProfile(userId: string): Promise<Record<string, unknown>>;
663
- updateUserProfile(userId: string, firstName: string, lastName: string): Promise<Record<string, unknown>>;
665
+ updateUserProfile(userId: string, firstName?: string, lastName?: string, options?: {
666
+ metadata?: Record<string, unknown>;
667
+ annotations?: Record<string, string>;
668
+ projectId?: string;
669
+ }): Promise<Record<string, unknown>>;
664
670
  listProjects(): Promise<Record<string, unknown>>;
665
671
  getProject(projectId: string): Promise<Record<string, unknown>>;
666
672
  getProjectByKey(projectKey: string): Promise<Record<string, unknown>>;
@@ -692,7 +692,8 @@ export class Meshagent {
692
692
  item === "llm_proxy_user" ||
693
693
  item === "usage_reporter" ||
694
694
  item === "billing_manager" ||
695
- item === "group_manager")
695
+ item === "group_manager" ||
696
+ item === "user_profile_editor")
696
697
  : [];
697
698
  const id = typeof user.id === "string" ? user.id : "";
698
699
  const email = typeof user.email === "string" ? user.email : "";
@@ -701,6 +702,8 @@ export class Meshagent {
701
702
  email,
702
703
  firstName: typeof user.first_name === "string" ? user.first_name : null,
703
704
  lastName: typeof user.last_name === "string" ? user.last_name : null,
705
+ metadata: user.metadata && typeof user.metadata === "object" ? user.metadata : {},
706
+ annotations: user.annotations && typeof user.annotations === "object" ? user.annotations : {},
704
707
  directRoles,
705
708
  };
706
709
  }
@@ -774,6 +777,7 @@ export class Meshagent {
774
777
  item === "usage_reporter" ||
775
778
  item === "billing_manager" ||
776
779
  item === "group_manager" ||
780
+ item === "user_profile_editor" ||
777
781
  item === "reader" ||
778
782
  item === "subscriber" ||
779
783
  item === "publisher" ||
@@ -1009,10 +1013,16 @@ export class Meshagent {
1009
1013
  action: "fetch user profile",
1010
1014
  });
1011
1015
  }
1012
- async updateUserProfile(userId, firstName, lastName) {
1013
- return await this.request(`/accounts/profiles/${userId}`, {
1016
+ async updateUserProfile(userId, firstName, lastName, options = {}) {
1017
+ const query = options.projectId === undefined ? "" : `?project_id=${encodeURIComponent(options.projectId)}`;
1018
+ return await this.request(`/accounts/profiles/${encodeURIComponent(userId)}${query}`, {
1014
1019
  method: "PUT",
1015
- json: { first_name: firstName, last_name: lastName },
1020
+ json: {
1021
+ ...(firstName !== undefined ? { first_name: firstName } : {}),
1022
+ ...(lastName !== undefined ? { last_name: lastName } : {}),
1023
+ ...(options.metadata !== undefined ? { metadata: options.metadata } : {}),
1024
+ ...(options.annotations !== undefined ? { annotations: options.annotations } : {}),
1025
+ },
1016
1026
  action: "update user profile",
1017
1027
  });
1018
1028
  }
@@ -601,6 +601,18 @@ var unexpectedCase = () => {
601
601
  };
602
602
  var errorUnexpectedEndOfArray = create3("Unexpected end of array");
603
603
  var errorIntegerOutOfRange = create3("Integer out of Range");
604
+ var subarray = (arr, begin, len) => {
605
+ if (begin < 0 || len < 0 || begin + len > arr.length) {
606
+ throw errorUnexpectedEndOfArray;
607
+ }
608
+ return new Uint8Array(arr.buffer, arr.byteOffset + begin, len);
609
+ };
610
+ var subdataview = (arr, begin, len) => {
611
+ if (begin < 0 || len < 0 || begin + len > arr.length) {
612
+ throw errorUnexpectedEndOfArray;
613
+ }
614
+ return new DataView(arr.buffer, arr.byteOffset + begin, len);
615
+ };
604
616
  var Decoder = class {
605
617
  constructor(uint8Array) {
606
618
  this.arr = uint8Array;
@@ -610,7 +622,7 @@ var Decoder = class {
610
622
  var createDecoder = (uint8Array) => new Decoder(uint8Array);
611
623
  var hasContent = (decoder) => decoder.pos !== decoder.arr.length;
612
624
  var readUint8Array = (decoder, len) => {
613
- const view = new Uint8Array(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len);
625
+ const view = subarray(decoder.arr, decoder.pos, len);
614
626
  decoder.pos += len;
615
627
  return view;
616
628
  };
@@ -682,7 +694,7 @@ var _readVarStringPolyfill = (decoder) => {
682
694
  var _readVarStringNative = (decoder) => (utf8TextDecoder.decode(readVarUint8Array(decoder)));
683
695
  var readVarString = utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill;
684
696
  var readFromDataView = (decoder, len) => {
685
- const dv = new DataView(decoder.arr.buffer, decoder.arr.byteOffset + decoder.pos, len);
697
+ const dv = subdataview(decoder.arr, decoder.pos, len);
686
698
  decoder.pos += len;
687
699
  return dv;
688
700
  };
@@ -2783,13 +2795,13 @@ var cleanupTransactions = (transactionCleanups, i) => {
2783
2795
  fs.push(() => {
2784
2796
  transaction.changedParentTypes.forEach((events, type) => {
2785
2797
  if (type._dEH.l.length > 0 && (type._item === null || !type._item.deleted)) {
2786
- events = events.filter((event) => event.target._item === null || !event.target._item.deleted);
2787
- events.forEach((event) => {
2788
- event.currentTarget = type;
2789
- event._path = null;
2790
- });
2791
- events.sort((event1, event2) => event1.path.length - event2.path.length);
2792
2798
  fs.push(() => {
2799
+ events = events.filter((event) => event.target._item === null || !event.target._item.deleted);
2800
+ events.forEach((event) => {
2801
+ event.currentTarget = type;
2802
+ event._path = null;
2803
+ });
2804
+ events.sort((event1, event2) => event1.path.length - event2.path.length);
2793
2805
  callEventHandlerListeners(type._dEH, events, transaction);
2794
2806
  });
2795
2807
  }
@@ -1,5 +1,5 @@
1
1
  import { ApiScope } from "./participant-token.js";
2
- export type ProjectRole = "member" | "admin" | "developer" | "room_creator" | "room_inventory" | "room_manager" | "session_inventory" | "agent_creator" | "agent_inventory" | "agent_manager" | "repository_creator" | "repository_inventory" | "repository_manager" | "feed_creator" | "feed_inventory" | "feed_manager" | "oauth_client_creator" | "oauth_client_inventory" | "oauth_client_manager" | "api_key_creator" | "api_key_inventory" | "api_key_manager" | "service_creator" | "service_inventory" | "service_manager" | "service_account_creator" | "service_account_inventory" | "service_account_manager" | "participant_token_creator" | "mailbox_creator" | "mailbox_inventory" | "mailbox_manager" | "route_creator" | "route_inventory" | "route_manager" | "scheduled_task_creator" | "scheduled_task_inventory" | "scheduled_task_manager" | "feed_subscription_creator" | "feed_subscription_inventory" | "feed_subscription_manager" | "llm_logger_creator" | "llm_logger_inventory" | "llm_logger_manager" | "llm_proxy_user" | "llm_quota_manager" | "usage_reporter" | "billing_manager" | "group_manager";
2
+ export type ProjectRole = "member" | "admin" | "developer" | "room_creator" | "room_inventory" | "room_manager" | "session_inventory" | "agent_creator" | "agent_inventory" | "agent_manager" | "repository_creator" | "repository_inventory" | "repository_manager" | "feed_creator" | "feed_inventory" | "feed_manager" | "oauth_client_creator" | "oauth_client_inventory" | "oauth_client_manager" | "api_key_creator" | "api_key_inventory" | "api_key_manager" | "service_creator" | "service_inventory" | "service_manager" | "service_account_creator" | "service_account_inventory" | "service_account_manager" | "participant_token_creator" | "mailbox_creator" | "mailbox_inventory" | "mailbox_manager" | "route_creator" | "route_inventory" | "route_manager" | "scheduled_task_creator" | "scheduled_task_inventory" | "scheduled_task_manager" | "feed_subscription_creator" | "feed_subscription_inventory" | "feed_subscription_manager" | "llm_logger_creator" | "llm_logger_inventory" | "llm_logger_manager" | "llm_proxy_user" | "llm_quota_manager" | "usage_reporter" | "billing_manager" | "group_manager" | "user_profile_editor";
3
3
  export type ResourceRole = "viewer" | "operator" | "developer" | "admin";
4
4
  export type RoomRole = "site_user" | "guest" | ResourceRole;
5
5
  export type ProjectSettingsDocumentName = "openai" | "anthropic" | "otel" | "admission" | "room" | "room_roles" | "router";
@@ -131,6 +131,8 @@ export interface ProjectMember {
131
131
  email: string;
132
132
  firstName?: string | null;
133
133
  lastName?: string | null;
134
+ metadata?: Record<string, unknown>;
135
+ annotations?: Record<string, string>;
134
136
  directRoles: ProjectRole[];
135
137
  }
136
138
  export interface ProjectMembersPage {
@@ -660,7 +662,11 @@ export declare class Meshagent {
660
662
  }): Promise<ProjectMembersPage>;
661
663
  getUsersInProject(projectId: string): Promise<ProjectMember[]>;
662
664
  getUserProfile(userId: string): Promise<Record<string, unknown>>;
663
- updateUserProfile(userId: string, firstName: string, lastName: string): Promise<Record<string, unknown>>;
665
+ updateUserProfile(userId: string, firstName?: string, lastName?: string, options?: {
666
+ metadata?: Record<string, unknown>;
667
+ annotations?: Record<string, string>;
668
+ projectId?: string;
669
+ }): Promise<Record<string, unknown>>;
664
670
  listProjects(): Promise<Record<string, unknown>>;
665
671
  getProject(projectId: string): Promise<Record<string, unknown>>;
666
672
  getProjectByKey(projectKey: string): Promise<Record<string, unknown>>;
@@ -697,7 +697,8 @@ class Meshagent {
697
697
  item === "llm_proxy_user" ||
698
698
  item === "usage_reporter" ||
699
699
  item === "billing_manager" ||
700
- item === "group_manager")
700
+ item === "group_manager" ||
701
+ item === "user_profile_editor")
701
702
  : [];
702
703
  const id = typeof user.id === "string" ? user.id : "";
703
704
  const email = typeof user.email === "string" ? user.email : "";
@@ -706,6 +707,8 @@ class Meshagent {
706
707
  email,
707
708
  firstName: typeof user.first_name === "string" ? user.first_name : null,
708
709
  lastName: typeof user.last_name === "string" ? user.last_name : null,
710
+ metadata: user.metadata && typeof user.metadata === "object" ? user.metadata : {},
711
+ annotations: user.annotations && typeof user.annotations === "object" ? user.annotations : {},
709
712
  directRoles,
710
713
  };
711
714
  }
@@ -779,6 +782,7 @@ class Meshagent {
779
782
  item === "usage_reporter" ||
780
783
  item === "billing_manager" ||
781
784
  item === "group_manager" ||
785
+ item === "user_profile_editor" ||
782
786
  item === "reader" ||
783
787
  item === "subscriber" ||
784
788
  item === "publisher" ||
@@ -1014,10 +1018,16 @@ class Meshagent {
1014
1018
  action: "fetch user profile",
1015
1019
  });
1016
1020
  }
1017
- async updateUserProfile(userId, firstName, lastName) {
1018
- return await this.request(`/accounts/profiles/${userId}`, {
1021
+ async updateUserProfile(userId, firstName, lastName, options = {}) {
1022
+ const query = options.projectId === undefined ? "" : `?project_id=${encodeURIComponent(options.projectId)}`;
1023
+ return await this.request(`/accounts/profiles/${encodeURIComponent(userId)}${query}`, {
1019
1024
  method: "PUT",
1020
- json: { first_name: firstName, last_name: lastName },
1025
+ json: {
1026
+ ...(firstName !== undefined ? { first_name: firstName } : {}),
1027
+ ...(lastName !== undefined ? { last_name: lastName } : {}),
1028
+ ...(options.metadata !== undefined ? { metadata: options.metadata } : {}),
1029
+ ...(options.annotations !== undefined ? { annotations: options.annotations } : {}),
1030
+ },
1021
1031
  action: "update user profile",
1022
1032
  });
1023
1033
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meshagent/meshagent",
3
- "version": "0.52.3",
3
+ "version": "0.53.0",
4
4
  "description": "Meshagent Client",
5
5
  "homepage": "https://github.com/meshagent/meshagent-ts",
6
6
  "scripts": {