@gravity-rail/sdk 0.15.0 → 0.16.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/dist/agui.cjs CHANGED
@@ -23,6 +23,7 @@ __export(agui_exports, {
23
23
  applyAguiTextMessageEvent: () => applyAguiTextMessageEvent,
24
24
  getAguiTextMessageContent: () => getAguiTextMessageContent,
25
25
  getAguiTextMessageId: () => getAguiTextMessageId,
26
+ getAguiTextMessageMemberId: () => getAguiTextMessageMemberId,
26
27
  getAguiTextMessageRole: () => getAguiTextMessageRole
27
28
  });
28
29
  module.exports = __toCommonJS(agui_exports);
@@ -40,6 +41,10 @@ function getAguiTextMessageRole(event, fallback = "assistant") {
40
41
  const raw = event.role;
41
42
  return typeof raw === "string" && raw.length > 0 ? raw : fallback;
42
43
  }
44
+ function getAguiTextMessageMemberId(event) {
45
+ const raw = event.memberId ?? event.member_id;
46
+ return typeof raw === "number" && Number.isFinite(raw) ? raw : void 0;
47
+ }
43
48
  function applyAguiTextMessageEvent(messages, event) {
44
49
  const type = event.type;
45
50
  if (typeof type !== "string") return false;
@@ -47,7 +52,13 @@ function applyAguiTextMessageEvent(messages, event) {
47
52
  const messageId = getAguiTextMessageId(event);
48
53
  if (!messageId) return false;
49
54
  const role = getAguiTextMessageRole(event);
50
- messages.set(messageId, { id: messageId, role, content: "" });
55
+ const memberId = getAguiTextMessageMemberId(event);
56
+ messages.set(messageId, {
57
+ id: messageId,
58
+ role,
59
+ content: "",
60
+ ...memberId !== void 0 ? { memberId } : {}
61
+ });
51
62
  return true;
52
63
  }
53
64
  if (type === "TEXT_MESSAGE_CONTENT") {
@@ -73,6 +84,7 @@ function applyAguiTextMessageEvent(messages, event) {
73
84
  applyAguiTextMessageEvent,
74
85
  getAguiTextMessageContent,
75
86
  getAguiTextMessageId,
87
+ getAguiTextMessageMemberId,
76
88
  getAguiTextMessageRole
77
89
  });
78
90
  //# sourceMappingURL=agui.cjs.map
package/dist/agui.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agui/index.ts","../src/agui/text-messages.ts"],"sourcesContent":["export {\n applyAguiTextMessageEvent,\n getAguiTextMessageContent,\n getAguiTextMessageId,\n getAguiTextMessageRole,\n type TranscriptMessage,\n} from './text-messages';\n","import type { ChannelEvent } from '../realtime/types';\n\nexport interface TranscriptMessage {\n id: string;\n role: string;\n content: string;\n}\n\nexport function getAguiTextMessageId(event: ChannelEvent): string | null {\n const raw = event.messageId ?? event.message_id;\n return typeof raw === 'string' && raw.length > 0 ? raw : null;\n}\n\nexport function getAguiTextMessageContent(event: ChannelEvent): string | null {\n const raw = event.content ?? event.text ?? event.delta;\n return typeof raw === 'string' ? raw : null;\n}\n\nexport function getAguiTextMessageRole(event: ChannelEvent, fallback = 'assistant'): string {\n const raw = event.role;\n return typeof raw === 'string' && raw.length > 0 ? raw : fallback;\n}\n\nexport function applyAguiTextMessageEvent(\n messages: Map<string, TranscriptMessage>,\n event: ChannelEvent\n): boolean {\n const type = event.type;\n if (typeof type !== 'string') return false;\n\n if (type === 'TEXT_MESSAGE_START') {\n const messageId = getAguiTextMessageId(event);\n if (!messageId) return false;\n const role = getAguiTextMessageRole(event);\n messages.set(messageId, { id: messageId, role, content: '' });\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_CONTENT') {\n const messageId = getAguiTextMessageId(event);\n const content = getAguiTextMessageContent(event);\n if (!messageId || content === null) return false;\n\n const existing =\n messages.get(messageId) ??\n ({\n id: messageId,\n role: getAguiTextMessageRole(event),\n content: '',\n } satisfies TranscriptMessage);\n\n existing.content = content;\n messages.set(messageId, existing);\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_END') {\n return Boolean(getAguiTextMessageId(event));\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQO,SAAS,qBAAqB,OAAoC;AACtE,QAAM,MAAM,MAAM,aAAa,MAAM;AACrC,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAEO,SAAS,0BAA0B,OAAoC;AAC3E,QAAM,MAAM,MAAM,WAAW,MAAM,QAAQ,MAAM;AACjD,SAAO,OAAO,QAAQ,WAAW,MAAM;AAC1C;AAEO,SAAS,uBAAuB,OAAqB,WAAW,aAAqB;AACzF,QAAM,MAAM,MAAM;AAClB,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAEO,SAAS,0BACb,UACA,OACQ;AACR,QAAM,OAAO,MAAM;AACnB,MAAI,OAAO,SAAS,SAAU,QAAO;AAErC,MAAI,SAAS,sBAAsB;AAChC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,QAAI,CAAC,UAAW,QAAO;AACvB,UAAM,OAAO,uBAAuB,KAAK;AACzC,aAAS,IAAI,WAAW,EAAE,IAAI,WAAW,MAAM,SAAS,GAAG,CAAC;AAC5D,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,wBAAwB;AAClC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,UAAM,UAAU,0BAA0B,KAAK;AAC/C,QAAI,CAAC,aAAa,YAAY,KAAM,QAAO;AAE3C,UAAM,WACH,SAAS,IAAI,SAAS,KACrB;AAAA,MACE,IAAI;AAAA,MACJ,MAAM,uBAAuB,KAAK;AAAA,MAClC,SAAS;AAAA,IACZ;AAEH,aAAS,UAAU;AACnB,aAAS,IAAI,WAAW,QAAQ;AAChC,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,oBAAoB;AAC9B,WAAO,QAAQ,qBAAqB,KAAK,CAAC;AAAA,EAC7C;AAEA,SAAO;AACV;","names":[]}
1
+ {"version":3,"sources":["../src/agui/index.ts","../src/agui/text-messages.ts"],"sourcesContent":["export {\n applyAguiTextMessageEvent,\n getAguiTextMessageContent,\n getAguiTextMessageId,\n getAguiTextMessageMemberId,\n getAguiTextMessageRole,\n type TranscriptMessage,\n} from './text-messages';\n","import type { ChannelEvent } from '../realtime/types';\n\nexport interface TranscriptMessage {\n id: string;\n role: string;\n content: string;\n /** Authoring member id when TEXT_MESSAGE_START carried it (Gravity extension). */\n memberId?: number;\n}\n\nexport function getAguiTextMessageId(event: ChannelEvent): string | null {\n const raw = event.messageId ?? event.message_id;\n return typeof raw === 'string' && raw.length > 0 ? raw : null;\n}\n\nexport function getAguiTextMessageContent(event: ChannelEvent): string | null {\n const raw = event.content ?? event.text ?? event.delta;\n return typeof raw === 'string' ? raw : null;\n}\n\nexport function getAguiTextMessageRole(event: ChannelEvent, fallback = 'assistant'): string {\n const raw = event.role;\n return typeof raw === 'string' && raw.length > 0 ? raw : fallback;\n}\n\n/** Gravity extension: authoring member on TEXT_MESSAGE_START (camel or snake). */\nexport function getAguiTextMessageMemberId(event: ChannelEvent): number | undefined {\n const raw = event.memberId ?? event.member_id;\n return typeof raw === 'number' && Number.isFinite(raw) ? raw : undefined;\n}\n\nexport function applyAguiTextMessageEvent(\n messages: Map<string, TranscriptMessage>,\n event: ChannelEvent\n): boolean {\n const type = event.type;\n if (typeof type !== 'string') return false;\n\n if (type === 'TEXT_MESSAGE_START') {\n const messageId = getAguiTextMessageId(event);\n if (!messageId) return false;\n const role = getAguiTextMessageRole(event);\n const memberId = getAguiTextMessageMemberId(event);\n messages.set(messageId, {\n id: messageId,\n role,\n content: '',\n ...(memberId !== undefined ? { memberId } : {}),\n });\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_CONTENT') {\n const messageId = getAguiTextMessageId(event);\n const content = getAguiTextMessageContent(event);\n if (!messageId || content === null) return false;\n\n // CONTENT does not carry memberId per protocol — only START does.\n // Synthesize a bare message if START was missed; leave memberId unset.\n const existing =\n messages.get(messageId) ??\n ({\n id: messageId,\n role: getAguiTextMessageRole(event),\n content: '',\n } satisfies TranscriptMessage);\n\n existing.content = content;\n messages.set(messageId, existing);\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_END') {\n return Boolean(getAguiTextMessageId(event));\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,SAAS,qBAAqB,OAAoC;AACtE,QAAM,MAAM,MAAM,aAAa,MAAM;AACrC,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAEO,SAAS,0BAA0B,OAAoC;AAC3E,QAAM,MAAM,MAAM,WAAW,MAAM,QAAQ,MAAM;AACjD,SAAO,OAAO,QAAQ,WAAW,MAAM;AAC1C;AAEO,SAAS,uBAAuB,OAAqB,WAAW,aAAqB;AACzF,QAAM,MAAM,MAAM;AAClB,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAGO,SAAS,2BAA2B,OAAyC;AACjF,QAAM,MAAM,MAAM,YAAY,MAAM;AACpC,SAAO,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,IAAI,MAAM;AAClE;AAEO,SAAS,0BACb,UACA,OACQ;AACR,QAAM,OAAO,MAAM;AACnB,MAAI,OAAO,SAAS,SAAU,QAAO;AAErC,MAAI,SAAS,sBAAsB;AAChC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,QAAI,CAAC,UAAW,QAAO;AACvB,UAAM,OAAO,uBAAuB,KAAK;AACzC,UAAM,WAAW,2BAA2B,KAAK;AACjD,aAAS,IAAI,WAAW;AAAA,MACrB,IAAI;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,MACT,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAChD,CAAC;AACD,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,wBAAwB;AAClC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,UAAM,UAAU,0BAA0B,KAAK;AAC/C,QAAI,CAAC,aAAa,YAAY,KAAM,QAAO;AAI3C,UAAM,WACH,SAAS,IAAI,SAAS,KACrB;AAAA,MACE,IAAI;AAAA,MACJ,MAAM,uBAAuB,KAAK;AAAA,MAClC,SAAS;AAAA,IACZ;AAEH,aAAS,UAAU;AACnB,aAAS,IAAI,WAAW,QAAQ;AAChC,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,oBAAoB;AAC9B,WAAO,QAAQ,qBAAqB,KAAK,CAAC;AAAA,EAC7C;AAEA,SAAO;AACV;","names":[]}
package/dist/agui.d.cts CHANGED
@@ -4,10 +4,14 @@ interface TranscriptMessage {
4
4
  id: string;
5
5
  role: string;
6
6
  content: string;
7
+ /** Authoring member id when TEXT_MESSAGE_START carried it (Gravity extension). */
8
+ memberId?: number;
7
9
  }
8
10
  declare function getAguiTextMessageId(event: ChannelEvent): string | null;
9
11
  declare function getAguiTextMessageContent(event: ChannelEvent): string | null;
10
12
  declare function getAguiTextMessageRole(event: ChannelEvent, fallback?: string): string;
13
+ /** Gravity extension: authoring member on TEXT_MESSAGE_START (camel or snake). */
14
+ declare function getAguiTextMessageMemberId(event: ChannelEvent): number | undefined;
11
15
  declare function applyAguiTextMessageEvent(messages: Map<string, TranscriptMessage>, event: ChannelEvent): boolean;
12
16
 
13
- export { type TranscriptMessage, applyAguiTextMessageEvent, getAguiTextMessageContent, getAguiTextMessageId, getAguiTextMessageRole };
17
+ export { type TranscriptMessage, applyAguiTextMessageEvent, getAguiTextMessageContent, getAguiTextMessageId, getAguiTextMessageMemberId, getAguiTextMessageRole };
package/dist/agui.d.ts CHANGED
@@ -4,10 +4,14 @@ interface TranscriptMessage {
4
4
  id: string;
5
5
  role: string;
6
6
  content: string;
7
+ /** Authoring member id when TEXT_MESSAGE_START carried it (Gravity extension). */
8
+ memberId?: number;
7
9
  }
8
10
  declare function getAguiTextMessageId(event: ChannelEvent): string | null;
9
11
  declare function getAguiTextMessageContent(event: ChannelEvent): string | null;
10
12
  declare function getAguiTextMessageRole(event: ChannelEvent, fallback?: string): string;
13
+ /** Gravity extension: authoring member on TEXT_MESSAGE_START (camel or snake). */
14
+ declare function getAguiTextMessageMemberId(event: ChannelEvent): number | undefined;
11
15
  declare function applyAguiTextMessageEvent(messages: Map<string, TranscriptMessage>, event: ChannelEvent): boolean;
12
16
 
13
- export { type TranscriptMessage, applyAguiTextMessageEvent, getAguiTextMessageContent, getAguiTextMessageId, getAguiTextMessageRole };
17
+ export { type TranscriptMessage, applyAguiTextMessageEvent, getAguiTextMessageContent, getAguiTextMessageId, getAguiTextMessageMemberId, getAguiTextMessageRole };
package/dist/agui.js CHANGED
@@ -11,6 +11,10 @@ function getAguiTextMessageRole(event, fallback = "assistant") {
11
11
  const raw = event.role;
12
12
  return typeof raw === "string" && raw.length > 0 ? raw : fallback;
13
13
  }
14
+ function getAguiTextMessageMemberId(event) {
15
+ const raw = event.memberId ?? event.member_id;
16
+ return typeof raw === "number" && Number.isFinite(raw) ? raw : void 0;
17
+ }
14
18
  function applyAguiTextMessageEvent(messages, event) {
15
19
  const type = event.type;
16
20
  if (typeof type !== "string") return false;
@@ -18,7 +22,13 @@ function applyAguiTextMessageEvent(messages, event) {
18
22
  const messageId = getAguiTextMessageId(event);
19
23
  if (!messageId) return false;
20
24
  const role = getAguiTextMessageRole(event);
21
- messages.set(messageId, { id: messageId, role, content: "" });
25
+ const memberId = getAguiTextMessageMemberId(event);
26
+ messages.set(messageId, {
27
+ id: messageId,
28
+ role,
29
+ content: "",
30
+ ...memberId !== void 0 ? { memberId } : {}
31
+ });
22
32
  return true;
23
33
  }
24
34
  if (type === "TEXT_MESSAGE_CONTENT") {
@@ -43,6 +53,7 @@ export {
43
53
  applyAguiTextMessageEvent,
44
54
  getAguiTextMessageContent,
45
55
  getAguiTextMessageId,
56
+ getAguiTextMessageMemberId,
46
57
  getAguiTextMessageRole
47
58
  };
48
59
  //# sourceMappingURL=agui.js.map
package/dist/agui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/agui/text-messages.ts"],"sourcesContent":["import type { ChannelEvent } from '../realtime/types';\n\nexport interface TranscriptMessage {\n id: string;\n role: string;\n content: string;\n}\n\nexport function getAguiTextMessageId(event: ChannelEvent): string | null {\n const raw = event.messageId ?? event.message_id;\n return typeof raw === 'string' && raw.length > 0 ? raw : null;\n}\n\nexport function getAguiTextMessageContent(event: ChannelEvent): string | null {\n const raw = event.content ?? event.text ?? event.delta;\n return typeof raw === 'string' ? raw : null;\n}\n\nexport function getAguiTextMessageRole(event: ChannelEvent, fallback = 'assistant'): string {\n const raw = event.role;\n return typeof raw === 'string' && raw.length > 0 ? raw : fallback;\n}\n\nexport function applyAguiTextMessageEvent(\n messages: Map<string, TranscriptMessage>,\n event: ChannelEvent\n): boolean {\n const type = event.type;\n if (typeof type !== 'string') return false;\n\n if (type === 'TEXT_MESSAGE_START') {\n const messageId = getAguiTextMessageId(event);\n if (!messageId) return false;\n const role = getAguiTextMessageRole(event);\n messages.set(messageId, { id: messageId, role, content: '' });\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_CONTENT') {\n const messageId = getAguiTextMessageId(event);\n const content = getAguiTextMessageContent(event);\n if (!messageId || content === null) return false;\n\n const existing =\n messages.get(messageId) ??\n ({\n id: messageId,\n role: getAguiTextMessageRole(event),\n content: '',\n } satisfies TranscriptMessage);\n\n existing.content = content;\n messages.set(messageId, existing);\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_END') {\n return Boolean(getAguiTextMessageId(event));\n }\n\n return false;\n}\n"],"mappings":";AAQO,SAAS,qBAAqB,OAAoC;AACtE,QAAM,MAAM,MAAM,aAAa,MAAM;AACrC,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAEO,SAAS,0BAA0B,OAAoC;AAC3E,QAAM,MAAM,MAAM,WAAW,MAAM,QAAQ,MAAM;AACjD,SAAO,OAAO,QAAQ,WAAW,MAAM;AAC1C;AAEO,SAAS,uBAAuB,OAAqB,WAAW,aAAqB;AACzF,QAAM,MAAM,MAAM;AAClB,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAEO,SAAS,0BACb,UACA,OACQ;AACR,QAAM,OAAO,MAAM;AACnB,MAAI,OAAO,SAAS,SAAU,QAAO;AAErC,MAAI,SAAS,sBAAsB;AAChC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,QAAI,CAAC,UAAW,QAAO;AACvB,UAAM,OAAO,uBAAuB,KAAK;AACzC,aAAS,IAAI,WAAW,EAAE,IAAI,WAAW,MAAM,SAAS,GAAG,CAAC;AAC5D,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,wBAAwB;AAClC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,UAAM,UAAU,0BAA0B,KAAK;AAC/C,QAAI,CAAC,aAAa,YAAY,KAAM,QAAO;AAE3C,UAAM,WACH,SAAS,IAAI,SAAS,KACrB;AAAA,MACE,IAAI;AAAA,MACJ,MAAM,uBAAuB,KAAK;AAAA,MAClC,SAAS;AAAA,IACZ;AAEH,aAAS,UAAU;AACnB,aAAS,IAAI,WAAW,QAAQ;AAChC,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,oBAAoB;AAC9B,WAAO,QAAQ,qBAAqB,KAAK,CAAC;AAAA,EAC7C;AAEA,SAAO;AACV;","names":[]}
1
+ {"version":3,"sources":["../src/agui/text-messages.ts"],"sourcesContent":["import type { ChannelEvent } from '../realtime/types';\n\nexport interface TranscriptMessage {\n id: string;\n role: string;\n content: string;\n /** Authoring member id when TEXT_MESSAGE_START carried it (Gravity extension). */\n memberId?: number;\n}\n\nexport function getAguiTextMessageId(event: ChannelEvent): string | null {\n const raw = event.messageId ?? event.message_id;\n return typeof raw === 'string' && raw.length > 0 ? raw : null;\n}\n\nexport function getAguiTextMessageContent(event: ChannelEvent): string | null {\n const raw = event.content ?? event.text ?? event.delta;\n return typeof raw === 'string' ? raw : null;\n}\n\nexport function getAguiTextMessageRole(event: ChannelEvent, fallback = 'assistant'): string {\n const raw = event.role;\n return typeof raw === 'string' && raw.length > 0 ? raw : fallback;\n}\n\n/** Gravity extension: authoring member on TEXT_MESSAGE_START (camel or snake). */\nexport function getAguiTextMessageMemberId(event: ChannelEvent): number | undefined {\n const raw = event.memberId ?? event.member_id;\n return typeof raw === 'number' && Number.isFinite(raw) ? raw : undefined;\n}\n\nexport function applyAguiTextMessageEvent(\n messages: Map<string, TranscriptMessage>,\n event: ChannelEvent\n): boolean {\n const type = event.type;\n if (typeof type !== 'string') return false;\n\n if (type === 'TEXT_MESSAGE_START') {\n const messageId = getAguiTextMessageId(event);\n if (!messageId) return false;\n const role = getAguiTextMessageRole(event);\n const memberId = getAguiTextMessageMemberId(event);\n messages.set(messageId, {\n id: messageId,\n role,\n content: '',\n ...(memberId !== undefined ? { memberId } : {}),\n });\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_CONTENT') {\n const messageId = getAguiTextMessageId(event);\n const content = getAguiTextMessageContent(event);\n if (!messageId || content === null) return false;\n\n // CONTENT does not carry memberId per protocol — only START does.\n // Synthesize a bare message if START was missed; leave memberId unset.\n const existing =\n messages.get(messageId) ??\n ({\n id: messageId,\n role: getAguiTextMessageRole(event),\n content: '',\n } satisfies TranscriptMessage);\n\n existing.content = content;\n messages.set(messageId, existing);\n return true;\n }\n\n if (type === 'TEXT_MESSAGE_END') {\n return Boolean(getAguiTextMessageId(event));\n }\n\n return false;\n}\n"],"mappings":";AAUO,SAAS,qBAAqB,OAAoC;AACtE,QAAM,MAAM,MAAM,aAAa,MAAM;AACrC,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAEO,SAAS,0BAA0B,OAAoC;AAC3E,QAAM,MAAM,MAAM,WAAW,MAAM,QAAQ,MAAM;AACjD,SAAO,OAAO,QAAQ,WAAW,MAAM;AAC1C;AAEO,SAAS,uBAAuB,OAAqB,WAAW,aAAqB;AACzF,QAAM,MAAM,MAAM;AAClB,SAAO,OAAO,QAAQ,YAAY,IAAI,SAAS,IAAI,MAAM;AAC5D;AAGO,SAAS,2BAA2B,OAAyC;AACjF,QAAM,MAAM,MAAM,YAAY,MAAM;AACpC,SAAO,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,IAAI,MAAM;AAClE;AAEO,SAAS,0BACb,UACA,OACQ;AACR,QAAM,OAAO,MAAM;AACnB,MAAI,OAAO,SAAS,SAAU,QAAO;AAErC,MAAI,SAAS,sBAAsB;AAChC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,QAAI,CAAC,UAAW,QAAO;AACvB,UAAM,OAAO,uBAAuB,KAAK;AACzC,UAAM,WAAW,2BAA2B,KAAK;AACjD,aAAS,IAAI,WAAW;AAAA,MACrB,IAAI;AAAA,MACJ;AAAA,MACA,SAAS;AAAA,MACT,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAChD,CAAC;AACD,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,wBAAwB;AAClC,UAAM,YAAY,qBAAqB,KAAK;AAC5C,UAAM,UAAU,0BAA0B,KAAK;AAC/C,QAAI,CAAC,aAAa,YAAY,KAAM,QAAO;AAI3C,UAAM,WACH,SAAS,IAAI,SAAS,KACrB;AAAA,MACE,IAAI;AAAA,MACJ,MAAM,uBAAuB,KAAK;AAAA,MAClC,SAAS;AAAA,IACZ;AAEH,aAAS,UAAU;AACnB,aAAS,IAAI,WAAW,QAAQ;AAChC,WAAO;AAAA,EACV;AAEA,MAAI,SAAS,oBAAoB;AAC9B,WAAO,QAAQ,qBAAqB,KAAK,CAAC;AAAA,EAC7C;AAEA,SAAO;AACV;","names":[]}
@@ -268,6 +268,18 @@ var AIModelsApi = class extends BaseApiClient {
268
268
  const url = queryString ? `ai-models/realtime?${queryString}` : "ai-models/realtime";
269
269
  return this.fetch(url);
270
270
  }
271
+ /**
272
+ * Get the voice presets offered by the simplified voice picker.
273
+ *
274
+ * A preset bundles a realtime speech-to-speech model with one of its native
275
+ * voices and the settings recommended alongside it, so choosing a voice is
276
+ * a single decision. Apply one by assigning its `config` wholesale; compare
277
+ * against it to tell a preset selection from a customised ("Custom") one.
278
+ * The full engine/voice/settings matrix lives on `getRealtimeModels`.
279
+ */
280
+ async getVoicePresets() {
281
+ return this.fetch("ai-models/voice-presets");
282
+ }
271
283
  /**
272
284
  * Get available voice models with metadata
273
285
  */
@@ -1397,6 +1409,10 @@ var ChatsApi = class extends BaseApiClient {
1397
1409
  `w/${wid}/chats/${chatId}/skills`
1398
1410
  );
1399
1411
  }
1412
+ /** List built-in skills that can be selected before starting a Manager Chat. */
1413
+ async getManagerSkills(wid) {
1414
+ return this.fetch(`w/${wid}/chats/manager/skills`);
1415
+ }
1400
1416
  /** List chat IDs that need a response. */
1401
1417
  async getChatsNeedsResponse(wid) {
1402
1418
  return this.fetch(`w/${wid}/chats/needs-response`);
@@ -2805,9 +2821,9 @@ var DocumoFaxApi = class extends BaseApiClient {
2805
2821
  params?.status?.forEach((value) => query.append("status", value));
2806
2822
  if (params?.receivedAfter) query.set("receivedAfter", params.receivedAfter);
2807
2823
  if (params?.receivedBefore) query.set("receivedBefore", params.receivedBefore);
2808
- const suffix = query.toString() === "" ? "" : `?${query.toString()}`;
2824
+ const suffix2 = query.toString() === "" ? "" : `?${query.toString()}`;
2809
2825
  return this.fetch(
2810
- `w/${wid}/app-connections/documo-fax/faxes${suffix}`
2826
+ `w/${wid}/app-connections/documo-fax/faxes${suffix2}`
2811
2827
  );
2812
2828
  }
2813
2829
  /**
@@ -4862,15 +4878,19 @@ var OrgApi = class extends BaseApiClient {
4862
4878
  async getA2PStatus(orgUuid) {
4863
4879
  return this.fetch(`o/${orgUuid}/phone-numbers/a2p/status`);
4864
4880
  }
4881
+ /** Return fixed phone-number and outbound-messaging prices. */
4882
+ async getPhoneBillingPricing(orgUuid) {
4883
+ return this.fetch(`o/${orgUuid}/phone-numbers/pricing`);
4884
+ }
4865
4885
  /**
4866
4886
  * Start A2P brand registration under a legal entity. `legalEntityUuid`
4867
4887
  * is required — brands register per legal entity (Customer Profile);
4868
4888
  * there is no primary-entity fallback.
4869
4889
  */
4870
- async startA2PRegistration(orgUuid, legalEntityUuid, brandName, brandDescription) {
4890
+ async startA2PRegistration(orgUuid, legalEntityUuid, brandName, brandDescription, brandUuid = null) {
4871
4891
  return this.fetch(`o/${orgUuid}/phone-numbers/a2p/start`, {
4872
4892
  method: "POST",
4873
- body: JSON.stringify({ legalEntityUuid, brandName, brandDescription })
4893
+ body: JSON.stringify({ legalEntityUuid, brandName, brandDescription, brandUuid })
4874
4894
  });
4875
4895
  }
4876
4896
  /**
@@ -5076,14 +5096,34 @@ var OrgApi = class extends BaseApiClient {
5076
5096
  );
5077
5097
  }
5078
5098
  /**
5079
- * The brand-addressable enrollment form URL (carries `?brand=…`). Outreach
5080
- * appends each patient's `external_id`. `url` is null until a Site is linked.
5099
+ * The brand's enrollment-form template URL (carries `?brand=…`, no
5100
+ * credential). `url` is null until a Site is linked. Do not append a
5101
+ * patient identifier to this URL — use {@link mintA2PBrandEnrollmentLink}
5102
+ * to get a patient-ready link instead.
5081
5103
  */
5082
5104
  async getA2PBrandEnrollmentUrl(orgUuid, brandUuid) {
5083
5105
  return this.fetch(
5084
5106
  `o/${orgUuid}/a2p-brands/${brandUuid}/enrollment-url`
5085
5107
  );
5086
5108
  }
5109
+ /**
5110
+ * Mint a patient-ready enrollment link for one patient.
5111
+ *
5112
+ * The returned URL carries a fresh, expiring, single-use `?grant=…` bound to
5113
+ * the member that `externalId` resolves to. `externalId` (the patient's
5114
+ * CRM/EHR identifier) travels in the request body, never the query string,
5115
+ * so it stays out of access logs. When it matches no member, the
5116
+ * credential-free template URL is returned rather than an error.
5117
+ */
5118
+ async mintA2PBrandEnrollmentLink(orgUuid, brandUuid, externalId) {
5119
+ return this.fetch(
5120
+ `o/${orgUuid}/a2p-brands/${brandUuid}/enrollment-url`,
5121
+ {
5122
+ method: "POST",
5123
+ body: JSON.stringify({ externalId })
5124
+ }
5125
+ );
5126
+ }
5087
5127
  /**
5088
5128
  * List available member roles for a workspace in the organization.
5089
5129
  */
@@ -7738,6 +7778,7 @@ var EventRuleEventType = /* @__PURE__ */ ((EventRuleEventType2) => {
7738
7778
  EventRuleEventType2["DATA_RECORD_UPDATED"] = "data_record:updated";
7739
7779
  EventRuleEventType2["DATA_RECORD_CHANGED"] = "data_record:changed";
7740
7780
  EventRuleEventType2["CHAT_CREATED"] = "chat:created";
7781
+ EventRuleEventType2["CHAT_SUMMARY"] = "chat:summary";
7741
7782
  EventRuleEventType2["CHAT_CALLBACK"] = "chat:callback";
7742
7783
  EventRuleEventType2["MEMBER_UPDATED"] = "member:updated";
7743
7784
  EventRuleEventType2["ROUTINE_TRIGGERED"] = "routine:triggered";
@@ -8418,6 +8459,20 @@ var WorkspacesApi = class extends BaseApiClient {
8418
8459
  if (featured !== void 0) params.set("featured", String(featured));
8419
8460
  return this.fetch(`products?${params.toString()}`);
8420
8461
  }
8462
+ /**
8463
+ * Check whether a promo code is usable, without redeeming it.
8464
+ *
8465
+ * Reserves nothing, so it is safe to call as a form field settles. Redemption
8466
+ * happens server-side after checkout completes, when the organization and its
8467
+ * subscription exist.
8468
+ */
8469
+ async previewPromoCode(code, options) {
8470
+ return this.fetch("promo-codes/preview", {
8471
+ method: "POST",
8472
+ body: JSON.stringify({ code }),
8473
+ signal: options?.signal
8474
+ });
8475
+ }
8421
8476
  /** Get a publicly accessible product by ID. */
8422
8477
  async getPublicProduct(id) {
8423
8478
  return this.fetch(`products/${id}`);
@@ -8769,6 +8824,118 @@ var MotdApi = class extends BaseApiClient {
8769
8824
  }
8770
8825
  };
8771
8826
 
8827
+ // src/api/tracked-links.ts
8828
+ function withFilters(params, options) {
8829
+ if (options.dateFrom) params.append("dateFrom", options.dateFrom);
8830
+ if (options.dateTo) params.append("dateTo", options.dateTo);
8831
+ if (options.workflowId !== void 0) params.append("workflowId", String(options.workflowId));
8832
+ return params;
8833
+ }
8834
+ function suffix(params) {
8835
+ const query = params.toString();
8836
+ return query ? `?${query}` : "";
8837
+ }
8838
+ var TrackedLinksApi = class extends BaseApiClient {
8839
+ /** Header counters plus whether shortening is configured and enabled. */
8840
+ async getTrackedLinkSummary(wid, options = {}) {
8841
+ const params = withFilters(new URLSearchParams(), options);
8842
+ return this.fetch(
8843
+ `w/${wid}/tracked-links/summary${suffix(params)}`
8844
+ );
8845
+ }
8846
+ /**
8847
+ * Known destination URLs, most recent first. Powers the "Clicked link"
8848
+ * member-filter autocomplete, so it stays unaggregated and cheap.
8849
+ */
8850
+ async getTrackedLinkDestinations(wid, options = {}) {
8851
+ const params = new URLSearchParams();
8852
+ if (options.q) params.append("q", options.q);
8853
+ if (options.limit !== void 0) params.append("limit", String(options.limit));
8854
+ return this.fetch(
8855
+ `w/${wid}/tracked-links/destinations${suffix(params)}`
8856
+ );
8857
+ }
8858
+ /**
8859
+ * Register a destination an author can reference as `{{links.<key>}}`.
8860
+ *
8861
+ * The URL is deduplicated server-side, so registering one the workspace
8862
+ * already knows adopts that destination — including a row the retired
8863
+ * auto-harvest left unnamed, whose click history then carries forward
8864
+ * under the new key. Registering a URL that already has a *different* key
8865
+ * is a 409: renaming is what `updateTrackedLinkDestination` is for.
8866
+ *
8867
+ * Keys use the same grammar as snippet keys: lowercase letters, digits,
8868
+ * underscores and dots, starting with a letter (`intake_form`,
8869
+ * `docs.privacy`). No hyphens — Jinja2 reads `links.spring-2026` as
8870
+ * subtraction.
8871
+ */
8872
+ async createTrackedLinkDestination(wid, data) {
8873
+ return this.fetch(`w/${wid}/tracked-links/destinations`, {
8874
+ method: "POST",
8875
+ body: JSON.stringify(data)
8876
+ });
8877
+ }
8878
+ /**
8879
+ * Re-key or relabel a destination.
8880
+ *
8881
+ * Changing `key` breaks templates: `{{links.old}}` stops resolving and the
8882
+ * message ships without its link. Relabelling (`name`) is always safe.
8883
+ * Passing `key: null` releases the handle so another destination can take
8884
+ * it — the non-destructive alternative to deleting, which would take the
8885
+ * click history with it. The URL is not editable.
8886
+ */
8887
+ async updateTrackedLinkDestination(wid, destinationId, data) {
8888
+ return this.fetch(
8889
+ `w/${wid}/tracked-links/destinations/${destinationId}`,
8890
+ { method: "PUT", body: JSON.stringify(data) }
8891
+ );
8892
+ }
8893
+ /** Per-destination sent / clicks / unique clickers / CTR for the window. */
8894
+ async getTrackedLinkStats(wid, options = {}) {
8895
+ const params = withFilters(new URLSearchParams(), options);
8896
+ if (options.page !== void 0) params.append("page", String(options.page));
8897
+ if (options.pageSize !== void 0) params.append("pageSize", String(options.pageSize));
8898
+ if (options.q) params.append("q", options.q);
8899
+ if (options.sortBy) params.append("sortBy", options.sortBy);
8900
+ if (options.sortOrder) params.append("sortOrder", options.sortOrder);
8901
+ return this.fetch(
8902
+ `w/${wid}/tracked-links${suffix(params)}`
8903
+ );
8904
+ }
8905
+ /** Clicks over time for the current filter selection. */
8906
+ async getTrackedLinkTimeseries(wid, options = {}) {
8907
+ const params = withFilters(new URLSearchParams(), options);
8908
+ if (options.destinationId !== void 0) {
8909
+ params.append("destinationId", String(options.destinationId));
8910
+ }
8911
+ if (options.granularity) params.append("granularity", options.granularity);
8912
+ if (options.tz) params.append("tz", options.tz);
8913
+ return this.fetch(
8914
+ `w/${wid}/tracked-links/timeseries${suffix(params)}`
8915
+ );
8916
+ }
8917
+ /**
8918
+ * Delete one destination: its short links stop resolving and its recorded
8919
+ * clicks are removed.
8920
+ *
8921
+ * Turning the workspace setting off only stops NEW links being minted —
8922
+ * links already delivered to members keep working. This is the deliberate
8923
+ * way to break them.
8924
+ */
8925
+ async deleteTrackedLinkDestination(wid, destinationId) {
8926
+ return this.fetch(
8927
+ `w/${wid}/tracked-links/destinations/${destinationId}`,
8928
+ { method: "DELETE" }
8929
+ );
8930
+ }
8931
+ /** Delete every destination, its links, and its clicks. Irreversible. */
8932
+ async clearTrackedLinkDestinations(wid) {
8933
+ return this.fetch(`w/${wid}/tracked-links/destinations`, {
8934
+ method: "DELETE"
8935
+ });
8936
+ }
8937
+ };
8938
+
8772
8939
  // src/app-context.ts
8773
8940
  function formatAppContextAsMarkdown(context) {
8774
8941
  if (!context) {
@@ -8875,6 +9042,7 @@ function createApiModules(apiKey, baseUrl, customFetch) {
8875
9042
  members: new MembersApi(apiKey, baseUrl, customFetch),
8876
9043
  milestones: new MilestonesApi(apiKey, baseUrl, customFetch),
8877
9044
  motd: new MotdApi(apiKey, baseUrl, customFetch),
9045
+ trackedLinks: new TrackedLinksApi(apiKey, baseUrl, customFetch),
8878
9046
  confluence: new ConfluenceApi(apiKey, baseUrl, customFetch),
8879
9047
  mondayIntegration: new MondayIntegrationApi(apiKey, baseUrl, customFetch),
8880
9048
  notificationRules: new NotificationRulesApi(apiKey, baseUrl, customFetch),
@@ -8940,6 +9108,7 @@ var WORKSPACE_METHOD_NAMES = [
8940
9108
  "checkSiteSlugAvailability",
8941
9109
  "clearConnectionMemberExclusion",
8942
9110
  "clearMemberSwitch",
9111
+ "clearTrackedLinkDestinations",
8943
9112
  "clickWorkspaceSupportRequestResource",
8944
9113
  "cloneDataType",
8945
9114
  "cloneTask",
@@ -9015,6 +9184,7 @@ var WORKSPACE_METHOD_NAMES = [
9015
9184
  "createSupervisor",
9016
9185
  "createTask",
9017
9186
  "createTeamsApp",
9187
+ "createTrackedLinkDestination",
9018
9188
  "createWorkflow",
9019
9189
  "createWorkflowContributor",
9020
9190
  "createWorkflowFromTemplate",
@@ -9080,6 +9250,7 @@ var WORKSPACE_METHOD_NAMES = [
9080
9250
  "deleteSupervisor",
9081
9251
  "deleteTask",
9082
9252
  "deleteTeamsApp",
9253
+ "deleteTrackedLinkDestination",
9083
9254
  "deleteWidgetDomain",
9084
9255
  "deleteWorkflow",
9085
9256
  "deleteWorkflowContributor",
@@ -9204,6 +9375,7 @@ var WORKSPACE_METHOD_NAMES = [
9204
9375
  "getChatModelOverride",
9205
9376
  "getChatPhoneCalls",
9206
9377
  "getChatSkills",
9378
+ "getManagerSkills",
9207
9379
  "getChatTodos",
9208
9380
  "getChatTokenUsage",
9209
9381
  "getChatToolCallMessages",
@@ -9384,6 +9556,7 @@ var WORKSPACE_METHOD_NAMES = [
9384
9556
  "getPublicFolder",
9385
9557
  "getPublicFolderFiles",
9386
9558
  "getPublicProducts",
9559
+ "previewPromoCode",
9387
9560
  "getQualification",
9388
9561
  "getQualifications",
9389
9562
  "getRecordingInfo",
@@ -9430,6 +9603,10 @@ var WORKSPACE_METHOD_NAMES = [
9430
9603
  "getTool",
9431
9604
  "getToolCallNames",
9432
9605
  "getToolkits",
9606
+ "getTrackedLinkDestinations",
9607
+ "getTrackedLinkStats",
9608
+ "getTrackedLinkSummary",
9609
+ "getTrackedLinkTimeseries",
9433
9610
  "getUnreadNotificationCount",
9434
9611
  "getUsageDashboard",
9435
9612
  "getVariableRegistry",
@@ -9664,6 +9841,7 @@ var WORKSPACE_METHOD_NAMES = [
9664
9841
  "updateTask",
9665
9842
  "updateTeamsApp",
9666
9843
  "updateThemeSettings",
9844
+ "updateTrackedLinkDestination",
9667
9845
  "uploadFile",
9668
9846
  "updateVoicemailStatus",
9669
9847
  "updateWorkflow",
@@ -9761,6 +9939,7 @@ function bindChatsMethods(target, chats) {
9761
9939
  target.getChatTokenUsage = chats.getChatTokenUsage.bind(chats);
9762
9940
  target.getChatTodos = chats.getChatTodos.bind(chats);
9763
9941
  target.getChatSkills = chats.getChatSkills.bind(chats);
9942
+ target.getManagerSkills = chats.getManagerSkills.bind(chats);
9764
9943
  target.getChatsNeedsResponse = chats.getChatsNeedsResponse.bind(chats);
9765
9944
  target.getChatsDailyCreationStats = chats.getChatsDailyCreationStats.bind(chats);
9766
9945
  target.getToolCallNames = chats.getToolCallNames.bind(chats);
@@ -9834,6 +10013,18 @@ function bindMotdMethods(target, motd) {
9834
10013
  target.getMotd = motd.getMotd.bind(motd);
9835
10014
  }
9836
10015
 
10016
+ // src/client/bindings/tracked-links.ts
10017
+ function bindTrackedLinksMethods(target, trackedLinks) {
10018
+ target.getTrackedLinkSummary = trackedLinks.getTrackedLinkSummary.bind(trackedLinks);
10019
+ target.getTrackedLinkDestinations = trackedLinks.getTrackedLinkDestinations.bind(trackedLinks);
10020
+ target.getTrackedLinkStats = trackedLinks.getTrackedLinkStats.bind(trackedLinks);
10021
+ target.getTrackedLinkTimeseries = trackedLinks.getTrackedLinkTimeseries.bind(trackedLinks);
10022
+ target.createTrackedLinkDestination = trackedLinks.createTrackedLinkDestination.bind(trackedLinks);
10023
+ target.updateTrackedLinkDestination = trackedLinks.updateTrackedLinkDestination.bind(trackedLinks);
10024
+ target.deleteTrackedLinkDestination = trackedLinks.deleteTrackedLinkDestination.bind(trackedLinks);
10025
+ target.clearTrackedLinkDestinations = trackedLinks.clearTrackedLinkDestinations.bind(trackedLinks);
10026
+ }
10027
+
9837
10028
  // src/client/bindings/data-types.ts
9838
10029
  function bindDataTypesMethods(target, dataTypes) {
9839
10030
  target.getDataTypes = dataTypes.getDataTypes.bind(dataTypes);
@@ -10329,6 +10520,7 @@ function bindToolkitsMethods(target, toolkits, templates, aiModels, customToolki
10329
10520
  target.getSTTModels = aiModels.getSTTModels.bind(aiModels);
10330
10521
  target.getTTSModels = aiModels.getTTSModels.bind(aiModels);
10331
10522
  target.getVoiceModels = aiModels.getVoiceModels.bind(aiModels);
10523
+ target.getVoicePresets = aiModels.getVoicePresets.bind(aiModels);
10332
10524
  target.getAllModels = aiModels.getAllModels.bind(aiModels);
10333
10525
  target.getCustomToolkits = customToolkits.getCustomToolkits.bind(customToolkits);
10334
10526
  target.getCustomToolkit = customToolkits.getCustomToolkit.bind(customToolkits);
@@ -10800,6 +10992,7 @@ var GravityRailClient = class {
10800
10992
  getChatTokenUsage;
10801
10993
  getChatTodos;
10802
10994
  getChatSkills;
10995
+ getManagerSkills;
10803
10996
  getChatsNeedsResponse;
10804
10997
  getChatsDailyCreationStats;
10805
10998
  getToolCallNames;
@@ -10987,6 +11180,15 @@ var GravityRailClient = class {
10987
11180
  getDashboardWorkflowAssignmentStats;
10988
11181
  // MOTD API
10989
11182
  getMotd;
11183
+ // Tracked Links analytics (#10934)
11184
+ getTrackedLinkSummary;
11185
+ getTrackedLinkDestinations;
11186
+ getTrackedLinkStats;
11187
+ getTrackedLinkTimeseries;
11188
+ createTrackedLinkDestination;
11189
+ updateTrackedLinkDestination;
11190
+ deleteTrackedLinkDestination;
11191
+ clearTrackedLinkDestinations;
10990
11192
  // Journeys API
10991
11193
  getJourneys;
10992
11194
  getJourney;
@@ -11091,6 +11293,7 @@ var GravityRailClient = class {
11091
11293
  getProduct;
11092
11294
  getWorkspaceProduct;
11093
11295
  getPublicProducts;
11296
+ previewPromoCode;
11094
11297
  getPublicProduct;
11095
11298
  createProduct;
11096
11299
  updateProduct;
@@ -11445,6 +11648,7 @@ var GravityRailClient = class {
11445
11648
  getSTTModels;
11446
11649
  getTTSModels;
11447
11650
  getVoiceModels;
11651
+ getVoicePresets;
11448
11652
  getAllModels;
11449
11653
  getCustomToolkits;
11450
11654
  getCustomToolkit;
@@ -11775,6 +11979,7 @@ var GravityRailClient = class {
11775
11979
  bindQueriesMethods(this, apis.queries);
11776
11980
  bindDashboardsMethods(this, apis.dashboards);
11777
11981
  bindMotdMethods(this, apis.motd);
11982
+ bindTrackedLinksMethods(this, apis.trackedLinks);
11778
11983
  bindJourneysMethods(this, apis.journeys);
11779
11984
  bindExperimentsMethods(this, apis.experiments);
11780
11985
  bindOperatorMethods(this, apis.operatorGroups);
@@ -12153,6 +12358,15 @@ var WorkflowAccessWarningResourceType = {
12153
12358
  // src/types/widget-domain-types.ts
12154
12359
  var WIDGET_SLUGS = ["chat", "operator", "operator-tools", "chat-app"];
12155
12360
 
12361
+ // src/types/generated/promo_code_service.ts
12362
+ var PromoCodeStatus = {
12363
+ active: "active",
12364
+ scheduled: "scheduled",
12365
+ expired: "expired",
12366
+ inactive: "inactive",
12367
+ exhausted: "exhausted"
12368
+ };
12369
+
12156
12370
  // src/features/registry.ts
12157
12371
  var FeatureCategory = /* @__PURE__ */ ((FeatureCategory2) => {
12158
12372
  FeatureCategory2["COMMUNICATION"] = "communication";
@@ -13220,6 +13434,7 @@ export {
13220
13434
  bindCallsMethods,
13221
13435
  bindDashboardsMethods,
13222
13436
  bindMotdMethods,
13437
+ bindTrackedLinksMethods,
13223
13438
  bindDataTypesMethods,
13224
13439
  bindMembersMethods,
13225
13440
  bindWorkspacesMethods,
@@ -13274,6 +13489,7 @@ export {
13274
13489
  AbilityConfigIssueSeverity,
13275
13490
  WorkflowAccessWarningResourceType,
13276
13491
  WIDGET_SLUGS,
13492
+ PromoCodeStatus,
13277
13493
  FeatureCategory,
13278
13494
  FeatureVisibility,
13279
13495
  initializeFeatures,
@@ -13308,4 +13524,4 @@ export {
13308
13524
  SCOPE_PRESETS,
13309
13525
  getRevisionState
13310
13526
  };
13311
- //# sourceMappingURL=chunk-QTJQTTIR.js.map
13527
+ //# sourceMappingURL=chunk-4B7T6MBH.js.map