@prvt/integration-sdk 0.2.0 → 0.4.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.
@@ -0,0 +1,143 @@
1
+ # Build a prvt integration with `@prvt/integration-sdk`
2
+
3
+ Use this prompt when asking a coding agent to build or update a server-side prvt integration.
4
+
5
+ ## Goal
6
+
7
+ Build a visible Node.js integration that joins one self-hosted prvt room through
8
+ `@prvt/integration-sdk` and the official LiveKit Node runtime.
9
+
10
+ ## Requirements
11
+
12
+ - Use Node.js 18 or newer.
13
+ - Install `@prvt/integration-sdk` and `@livekit/rtc-node`.
14
+ - Run the integration on a trusted server, never in browser code.
15
+ - Read the installed package README and exported TypeScript types before coding.
16
+ - Accept the prvt deployment origin and integration key through runtime secret
17
+ configuration. Never hard-code, log, persist, or place the key in a URL.
18
+ - Assume the integration key has already been provisioned through prvt Room
19
+ tools or the owner API. The SDK runs an integration; it does not create rooms,
20
+ owners, or integration keys.
21
+ - Treat integration participants as visible bots. Do not try to conceal their
22
+ identity or bypass the permissions returned by the server.
23
+
24
+ ## Install
25
+
26
+ ```bash
27
+ npm install @prvt/integration-sdk @livekit/rtc-node
28
+ ```
29
+
30
+ ## Starting point
31
+
32
+ ```ts
33
+ import { RoomEvent } from "@livekit/rtc-node";
34
+ import {
35
+ PrvtApiError,
36
+ PrvtConnectionError,
37
+ PrvtNetworkError,
38
+ PrvtProtocolError,
39
+ createPrvtIntegration,
40
+ } from "@prvt/integration-sdk";
41
+
42
+ const baseUrl = process.env.PRVT_BASE_URL;
43
+ const integrationKey = process.env.PRVT_INTEGRATION_KEY;
44
+
45
+ if (!baseUrl) throw new Error("PRVT_BASE_URL is required");
46
+ if (!integrationKey) throw new Error("PRVT_INTEGRATION_KEY is required");
47
+
48
+ const integration = createPrvtIntegration({
49
+ baseUrl,
50
+ integrationKey,
51
+ displayName: "My integration",
52
+ });
53
+
54
+ let session: Awaited<ReturnType<typeof integration.connect>> | undefined;
55
+
56
+ try {
57
+ session = await integration.connect({
58
+ roomOptions: { autoSubscribe: true },
59
+ });
60
+
61
+ session.room.on(RoomEvent.ParticipantConnected, (participant) => {
62
+ console.log(`${participant.name ?? participant.identity} joined`);
63
+ });
64
+
65
+ await session.updateProfile({ statusMessage: "Ready" });
66
+
67
+ if (session.permissions.publishData) {
68
+ await session.sendMessage("Integration connected");
69
+ await session.sendReaction("👋");
70
+ }
71
+ } catch (error) {
72
+ if (error instanceof PrvtApiError) {
73
+ console.error("prvt API error", error.code, error.status);
74
+ } else if (error instanceof PrvtNetworkError) {
75
+ console.error("The prvt API is unreachable");
76
+ } else if (error instanceof PrvtProtocolError) {
77
+ console.error("The token response did not match the SDK contract");
78
+ } else if (error instanceof PrvtConnectionError) {
79
+ console.error("The LiveKit connection failed");
80
+ } else {
81
+ throw error;
82
+ }
83
+ process.exitCode = 1;
84
+ }
85
+
86
+ const shutdown = async () => {
87
+ await session?.disconnect();
88
+ process.exit(0);
89
+ };
90
+
91
+ process.once("SIGINT", shutdown);
92
+ process.once("SIGTERM", shutdown);
93
+ ```
94
+
95
+ ## SDK behavior to preserve
96
+
97
+ - `connect()` exchanges the long-lived integration key for a participant JWT
98
+ valid for five minutes, then connects a LiveKit `Room`.
99
+ - Use `exchangeToken()` instead when the application needs to construct or
100
+ configure its own LiveKit room instance.
101
+ - Use `session.room` for ordinary LiveKit participant, track, text-stream, and
102
+ data APIs.
103
+ - Check `session.permissions` before acting. `sendMessage()`, `pinMessage()`,
104
+ `unpinMessage()`, and `sendReaction()` require `publishData`.
105
+ - `publishMicrophone` permits only microphone-source audio tracks.
106
+ `subscribeMedia` may include both audio and video.
107
+ - Profile pictures must be bounded inline PNG, JPEG, or WebP data URLs. Profile
108
+ state is live-only, so reapply it after reconnecting.
109
+ - `updateProfile` accepts an optional `websiteUrl`: HTTPS without embedded
110
+ credentials. It links the bot's name in chat and on its media card. Omit the
111
+ field to preserve it or pass `null` to clear it, and reapply after reconnecting.
112
+ Never include integration keys, room credentials, or participant tokens.
113
+ - Use `parseChatMessageLanguage(reader.info.attributes)` when localized replies
114
+ should follow a human sender's UI language. `PRVT_CHAT_LANGUAGE_ATTRIBUTE`
115
+ names the `prvt.chat.language` text-stream attribute; supported values are
116
+ canonical `en` and `ru`. Missing or unknown values return `null`, requiring
117
+ your integration's fallback. This metadata does not detect the body's
118
+ language or translate messages automatically.
119
+ - Chat, pins, and reactions are realtime-only. Do not imply persistence,
120
+ replay, recording, or late-join history.
121
+ - `sendMessage()` accepts `format: "markdown"` and a bounded `keyboard` with
122
+ callback or HTTPS link buttons. Register `onChatCallback()` to handle direct
123
+ button events; use `acknowledgeChatCallback()` for a targeted accepted or
124
+ rejected acknowledgement. The callback sender identity is derived from
125
+ LiveKit, not the packet body. Make handlers idempotent and unsubscribe them
126
+ during shutdown because delivery is realtime and best-effort.
127
+ - A new connection using the same stable integration identity replaces the
128
+ previous connection. Handle participant removal and disconnect cleanly.
129
+ - Fetch a fresh participant JWT for a full reconnect. Do not persist a JWT as a
130
+ replacement for the integration key.
131
+ - Respect `PrvtApiError.retryAfterSeconds` for `RATE_LIMITED`. Use bounded
132
+ backoff only for temporary network, storage, or LiveKit failures. Revoked,
133
+ closed, unauthorized, and forbidden errors require operator action.
134
+
135
+ ## Definition of done
136
+
137
+ - The integration connects using runtime secrets and does not expose them in
138
+ source, logs, URLs, errors, or browser storage.
139
+ - It performs only actions allowed by the returned permissions.
140
+ - It handles startup failure, process shutdown, removal, and reconnect without
141
+ leaving duplicate sessions behind.
142
+ - Tests cover its permission checks, error handling, and any messages or data
143
+ packets it publishes.
package/README.md CHANGED
@@ -17,6 +17,10 @@ npm install @prvt/integration-sdk @livekit/rtc-node
17
17
  Node.js 18 or newer is required. `@livekit/rtc-node` is a peer dependency so
18
18
  the application controls the native realtime runtime version.
19
19
 
20
+ Coding agents can start from the reusable
21
+ [`AGENT_PROMPT.md`](AGENT_PROMPT.md), which summarizes the supported workflow,
22
+ security boundaries, permissions, and completion checks.
23
+
20
24
  ## Create an integration key
21
25
 
22
26
  Join a room in the browser that created it, open **Room tools**, and choose
@@ -99,6 +103,63 @@ The server returns the effective permissions with every exchange:
99
103
 
100
104
  `PRVT_CHAT_TOPIC` exports the exact `prvt.chat` topic name.
101
105
 
106
+ ## Message language context
107
+
108
+ Human messages from the prvt web app carry the sender's selected UI language
109
+ (`en` or `ru`) in the text-stream attribute `prvt.chat.language`. Read it from
110
+ the LiveKit stream metadata:
111
+
112
+ ```ts
113
+ import { parseChatMessageLanguage } from "@prvt/integration-sdk";
114
+
115
+ // Inside your LiveKit text-stream handler:
116
+ const language = parseChatMessageLanguage(reader.info.attributes);
117
+ ```
118
+
119
+ `PRVT_CHAT_LANGUAGE_ATTRIBUTE` also exports the attribute name. The helper
120
+ returns `null` for missing or unknown values, including messages from older
121
+ clients. Choose your integration's fallback when no preference is available.
122
+ The value describes the sender's UI at send time, not the detected language of
123
+ the text. It can guide localized replies; it does not translate messages or
124
+ change a participant's interface automatically.
125
+
126
+ ## Markdown and callback keyboards
127
+
128
+ Integrations can send bounded Markdown and native callback buttons. Raw HTML,
129
+ images, unsafe links, oversized labels, and oversized keyboards are rejected by
130
+ the SDK or ignored by the web client.
131
+
132
+ ```ts
133
+ const message = await session.sendMessage("**Choose a track**", {
134
+ format: "markdown",
135
+ keyboard: {
136
+ v: 1,
137
+ rows: [[
138
+ { id: "play", label: "Play", style: "primary" },
139
+ { id: "pause", label: "Pause" },
140
+ { url: "https://music.example/queue", label: "Queue" },
141
+ ]],
142
+ },
143
+ });
144
+
145
+ const stopListening = session.onChatCallback(async (callback) => {
146
+ if (callback.buttonId !== "play") {
147
+ await session.acknowledgeChatCallback(callback, { status: "rejected", text: "Unavailable", alert: true });
148
+ return;
149
+ }
150
+ await session.acknowledgeChatCallback(callback, { status: "accepted", text: "Starting" });
151
+ await session.sendMessage("Started playing.");
152
+ });
153
+ ```
154
+
155
+ The browser sends callback packets on `PRVT_CHAT_CALLBACK_TOPIC` directly to
156
+ the integration that authored the message. The SDK derives `senderIdentity`
157
+ from LiveKit's authenticated `DataReceived` event. Acknowledgements use
158
+ `PRVT_CHAT_CALLBACK_ACK_TOPIC` and are targeted to that participant. Call the
159
+ unsubscribe function during shutdown. The transport is realtime and
160
+ best-effort, so actions should be idempotent and no callback should be treated
161
+ as persisted or replayable.
162
+
102
163
  ## Profile picture and status
103
164
 
104
165
  Update the connected bot's live profile attributes through the authenticated
@@ -108,10 +169,12 @@ prvt API. A status can hold changing context such as a music bot's current song:
108
169
  await session.updateProfile({
109
170
  profilePicture: "data:image/webp;base64,<base64-webp-bytes>",
110
171
  statusMessage: "Playing Midnight City",
172
+ websiteUrl: "https://music.example.com/",
111
173
  });
112
174
 
113
175
  await session.updateProfile({ statusMessage: "Playing Intro" });
114
176
  await session.updateProfile({ statusMessage: null });
177
+ await session.updateProfile({ websiteUrl: null });
115
178
  ```
116
179
 
117
180
  Pictures must be PNG, JPEG, or WebP data URLs no longer than 12,000 characters.
@@ -124,6 +187,13 @@ profile after reconnecting. Updating while disconnected returns
124
187
  per minute and returns the ordinary `RATE_LIMITED` error plus `Retry-After`
125
188
  after that bound.
126
189
 
190
+ The optional `websiteUrl` must be HTTPS and contain no embedded credentials.
191
+ It links the integration's displayed name in chat and on its media card.
192
+ Omitting it preserves the current value; `null` clears it. It is live-only,
193
+ like the other profile fields, so reapply it after reconnecting. A profile
194
+ website does not imply marketplace approval. Never put integration keys, room
195
+ credentials, or participant tokens in the URL.
196
+
127
197
  ## Chat pins
128
198
 
129
199
  With `publishData`, an integration can pin and unpin a message by the LiveKit
@@ -0,0 +1,9 @@
1
+ import type { IntegrationChatCallback, IntegrationChatCallbackAcknowledgement, IntegrationChatKeyboard } from "./types.js";
2
+ export declare const CHAT_KEYBOARD_VERSION: 1;
3
+ export declare const MAX_CHAT_KEYBOARD_ATTRIBUTE_BYTES = 4096;
4
+ export declare const MAX_CHAT_CALLBACK_PACKET_BYTES = 1024;
5
+ export declare function normalizeChatKeyboard(value: IntegrationChatKeyboard): IntegrationChatKeyboard;
6
+ export declare function encodeChatKeyboardAttribute(keyboard: IntegrationChatKeyboard): string;
7
+ export declare function decodeChatCallback(data: Uint8Array, senderIdentity: string, timestamp?: number): IntegrationChatCallback | null;
8
+ export declare function encodeChatCallbackAcknowledgement(eventId: string, acknowledgement: IntegrationChatCallbackAcknowledgement): Uint8Array;
9
+ //# sourceMappingURL=chat-actions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-actions.d.ts","sourceRoot":"","sources":["../src/chat-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,uBAAuB,EACvB,sCAAsC,EACtC,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,qBAAqB,EAAG,CAAU,CAAC;AAChD,eAAO,MAAM,iCAAiC,OAAQ,CAAC;AACvD,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAgDpD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,uBAAuB,GAAG,uBAAuB,CAmB7F;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,uBAAuB,GAAG,MAAM,CAErF;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,SAAa,GAAG,uBAAuB,GAAG,IAAI,CA4BnI;AAED,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,sCAAsC,GAAG,UAAU,CActI"}
@@ -0,0 +1,117 @@
1
+ export const CHAT_KEYBOARD_VERSION = 1;
2
+ export const MAX_CHAT_KEYBOARD_ATTRIBUTE_BYTES = 4_096;
3
+ export const MAX_CHAT_CALLBACK_PACKET_BYTES = 1_024;
4
+ const encoder = new TextEncoder();
5
+ const decoder = new TextDecoder("utf-8", { fatal: true });
6
+ const identifierPattern = /^[A-Za-z0-9_-]{1,128}$/;
7
+ const eventIdPattern = /^[A-Za-z0-9_-]{8,128}$/;
8
+ const messageIdPattern = /^[A-Za-z0-9_-]{1,128}$/;
9
+ const styles = new Set(["primary", "secondary", "danger"]);
10
+ const isRecord = (value) => (typeof value === "object" && value !== null && !Array.isArray(value));
11
+ const normalizedLabel = (value) => (typeof value === "string" && value.trim().length > 0 && value.trim().length <= 64
12
+ ? value.trim()
13
+ : null);
14
+ const normalizedStyle = (value) => (typeof value === "string" && styles.has(value)
15
+ ? value
16
+ : "secondary");
17
+ const safeUrl = (value) => {
18
+ if (typeof value !== "string" || value.length === 0 || value.length > 512)
19
+ return false;
20
+ try {
21
+ const url = new URL(value);
22
+ return url.protocol === "https:" && url.username === "" && url.password === "";
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ };
28
+ const normalizeButton = (value) => {
29
+ if (!isRecord(value))
30
+ return null;
31
+ const label = normalizedLabel(value.label);
32
+ if (label === null || (value.style !== undefined && !styles.has(value.style)))
33
+ return null;
34
+ if (value.disabled !== undefined && typeof value.disabled !== "boolean")
35
+ return null;
36
+ const shared = { label, style: normalizedStyle(value.style), disabled: value.disabled ?? false };
37
+ if (typeof value.id === "string" && identifierPattern.test(value.id) && value.url === undefined) {
38
+ return { ...shared, id: value.id };
39
+ }
40
+ if (value.id === undefined && safeUrl(value.url))
41
+ return { ...shared, url: value.url };
42
+ return null;
43
+ };
44
+ export function normalizeChatKeyboard(value) {
45
+ if (!isRecord(value) || value.v !== CHAT_KEYBOARD_VERSION || !Array.isArray(value.rows) || value.rows.length === 0 || value.rows.length > 4) {
46
+ throw new TypeError("keyboard must contain 1 to 4 rows");
47
+ }
48
+ const rows = [];
49
+ let buttonCount = 0;
50
+ for (const row of value.rows) {
51
+ if (!Array.isArray(row) || row.length === 0 || row.length > 4)
52
+ throw new TypeError("keyboard rows must contain 1 to 4 buttons");
53
+ const buttons = row.map(normalizeButton);
54
+ if (buttons.some((button) => button === null))
55
+ throw new TypeError("keyboard contains an invalid button");
56
+ buttonCount += buttons.length;
57
+ rows.push(buttons);
58
+ }
59
+ if (buttonCount > 16)
60
+ throw new TypeError("keyboard cannot contain more than 16 buttons");
61
+ const normalized = { v: CHAT_KEYBOARD_VERSION, rows };
62
+ if (encoder.encode(JSON.stringify(normalized)).byteLength > MAX_CHAT_KEYBOARD_ATTRIBUTE_BYTES) {
63
+ throw new TypeError("keyboard is too large");
64
+ }
65
+ return normalized;
66
+ }
67
+ export function encodeChatKeyboardAttribute(keyboard) {
68
+ return JSON.stringify(normalizeChatKeyboard(keyboard));
69
+ }
70
+ export function decodeChatCallback(data, senderIdentity, timestamp = Date.now()) {
71
+ if (data.byteLength === 0 || data.byteLength > MAX_CHAT_CALLBACK_PACKET_BYTES)
72
+ return null;
73
+ try {
74
+ const value = JSON.parse(decoder.decode(data));
75
+ if (!isRecord(value)
76
+ || Object.keys(value).length !== 5
77
+ || value.v !== 1
78
+ || value.type !== "button_click"
79
+ || typeof value.eventId !== "string"
80
+ || !eventIdPattern.test(value.eventId)
81
+ || typeof value.messageId !== "string"
82
+ || !messageIdPattern.test(value.messageId)
83
+ || typeof value.buttonId !== "string"
84
+ || !identifierPattern.test(value.buttonId))
85
+ return null;
86
+ return {
87
+ v: 1,
88
+ type: "button_click",
89
+ eventId: value.eventId,
90
+ messageId: value.messageId,
91
+ buttonId: value.buttonId,
92
+ senderIdentity,
93
+ timestamp,
94
+ };
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ }
100
+ export function encodeChatCallbackAcknowledgement(eventId, acknowledgement) {
101
+ if (!eventIdPattern.test(eventId))
102
+ throw new TypeError("eventId must use 8 to 128 letters, numbers, underscores, or hyphens");
103
+ if (acknowledgement.status !== "accepted" && acknowledgement.status !== "rejected")
104
+ throw new TypeError("invalid callback acknowledgement status");
105
+ if (acknowledgement.text !== undefined && (acknowledgement.text.trim().length === 0 || acknowledgement.text.length > 256)) {
106
+ throw new TypeError("callback acknowledgement text must contain 1 to 256 characters");
107
+ }
108
+ return encoder.encode(JSON.stringify({
109
+ v: 1,
110
+ type: "ack",
111
+ eventId,
112
+ status: acknowledgement.status,
113
+ ...(acknowledgement.text === undefined ? {} : { text: acknowledgement.text.trim() }),
114
+ ...(acknowledgement.alert === undefined ? {} : { alert: acknowledgement.alert }),
115
+ }));
116
+ }
117
+ //# sourceMappingURL=chat-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-actions.js","sourceRoot":"","sources":["../src/chat-actions.ts"],"names":[],"mappings":"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"}
package/dist/chat.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export type ChatLanguageCode = "en" | "ru";
2
+ export declare const parseChatMessageLanguage: (attributes: Readonly<Record<string, string>> | undefined) => ChatLanguageCode | null;
3
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;AAE3C,eAAO,MAAM,wBAAwB,GACnC,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,KACvD,gBAAgB,GAAG,IAGrB,CAAC"}
package/dist/chat.js ADDED
@@ -0,0 +1,6 @@
1
+ import { PRVT_CHAT_LANGUAGE_ATTRIBUTE } from "./constants.js";
2
+ export const parseChatMessageLanguage = (attributes) => {
3
+ const language = attributes?.[PRVT_CHAT_LANGUAGE_ATTRIBUTE];
4
+ return language === "en" || language === "ru" ? language : null;
5
+ };
6
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../src/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAI9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,UAAwD,EAC/B,EAAE;IAC3B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC,4BAA4B,CAAC,CAAC;IAC5D,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC,CAAC"}
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { Room } from "@livekit/rtc-node";
1
+ import { type Room } from "@livekit/rtc-node";
2
2
  import type { ConnectIntegrationOptions, CreatePrvtIntegrationOptions, ExchangeTokenOptions, IntegrationProfileUpdate, IntegrationToken, PrvtIntegration, PrvtIntegrationSession } from "./types.js";
3
3
  export type RoomFactory = () => Promise<Room>;
4
4
  export declare class PrvtIntegrationClient implements PrvtIntegration {
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAU9C,OAAO,KAAK,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EAExB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAUpB,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AA4H9C,qBAAa,qBAAsB,YAAW,eAAe;;gBAO/C,OAAO,EAAE,4BAA4B,EAAE,WAAW,GAAE,WAAgC;IAS1F,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiC5E,aAAa,CAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnG,OAAO,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAYxF;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,4BAA4B,KAAG,eAE7E,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAUzD,OAAO,KAAK,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,wBAAwB,EAKxB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EAEvB,MAAM,YAAY,CAAC;AAyBpB,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAqK9C,qBAAa,qBAAsB,YAAW,eAAe;;gBAO/C,OAAO,EAAE,4BAA4B,EAAE,WAAW,GAAE,WAAgC;IAS1F,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiC5E,aAAa,CAAC,OAAO,EAAE,wBAAwB,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BnG,OAAO,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAYxF;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,4BAA4B,KAAG,eAE7E,CAAC"}
package/dist/client.js CHANGED
@@ -1,5 +1,7 @@
1
+ import { RoomEvent } from "@livekit/rtc-node";
1
2
  import { PrvtApiError, PrvtConnectionError, PrvtDataPublishingUnavailableError, PrvtNetworkError, PrvtProtocolError, PrvtReactionRateLimitError, PrvtRtcUnavailableError, } from "./errors.js";
2
- import { PRVT_CHAT_PINS_TOPIC, PRVT_CHAT_TOPIC, PRVT_REACTION_EMOJI, PRVT_REACTIONS_TOPIC } from "./constants.js";
3
+ import { PRVT_CHAT_CALLBACK_ACK_TOPIC, PRVT_CHAT_CALLBACK_TOPIC, PRVT_CHAT_FORMAT_ATTRIBUTE, PRVT_CHAT_KEYBOARD_ATTRIBUTE, PRVT_CHAT_PINS_TOPIC, PRVT_CHAT_TOPIC, PRVT_REACTION_EMOJI, PRVT_REACTIONS_TOPIC, } from "./constants.js";
4
+ import { decodeChatCallback, encodeChatCallbackAcknowledgement, encodeChatKeyboardAttribute, normalizeChatKeyboard, } from "./chat-actions.js";
3
5
  import { normalizeBaseUrl, normalizeIntegrationKey, parseApiErrorCode, parseIntegrationToken, parseRetryAfter, } from "./validation.js";
4
6
  const defaultRoomFactory = async () => {
5
7
  try {
@@ -30,6 +32,16 @@ class IntegrationSession {
30
32
  permissions;
31
33
  #client;
32
34
  #acceptedReactionAt = [];
35
+ #chatCallbackListeners = new Set();
36
+ #handleDataReceived = (data, participant, _kind, topic) => {
37
+ if (topic !== PRVT_CHAT_CALLBACK_TOPIC || participant?.identity === undefined)
38
+ return;
39
+ const callback = decodeChatCallback(data, participant.identity);
40
+ if (callback === null)
41
+ return;
42
+ for (const listener of this.#chatCallbackListeners)
43
+ void Promise.resolve(listener(callback)).catch(() => undefined);
44
+ };
33
45
  constructor(client, room, token) {
34
46
  this.#client = client;
35
47
  this.room = room;
@@ -37,22 +49,58 @@ class IntegrationSession {
37
49
  this.displayName = token.displayName;
38
50
  this.expiresAt = token.expiresAt;
39
51
  this.permissions = token.permissions;
52
+ if (typeof this.room.on === "function")
53
+ this.room.on(RoomEvent.DataReceived, this.#handleDataReceived);
40
54
  }
41
55
  async disconnect() {
56
+ if (typeof this.room.off === "function")
57
+ this.room.off(RoomEvent.DataReceived, this.#handleDataReceived);
42
58
  await this.room.disconnect();
43
59
  }
44
60
  async updateProfile(profile, options = {}) {
45
61
  await this.#client.updateProfile(profile, options);
46
62
  }
47
- async sendMessage(message) {
63
+ async sendMessage(message, options = {}) {
48
64
  if (typeof message !== "string")
49
65
  throw new TypeError("message must be a string");
50
66
  const normalized = message.trim();
51
67
  if (normalized.length === 0 || normalized.length > 2_000) {
52
68
  throw new TypeError("message must contain 1 to 2000 characters");
53
69
  }
54
- const sent = await this.dataPublisher().sendText(normalized, { topic: PRVT_CHAT_TOPIC });
55
- return { id: sent.streamId, message: normalized, timestamp: sent.timestamp };
70
+ if (options.format !== undefined && options.format !== "plain" && options.format !== "markdown") {
71
+ throw new TypeError("format must be plain or markdown");
72
+ }
73
+ const keyboard = options.keyboard === undefined ? undefined : normalizeChatKeyboard(options.keyboard);
74
+ const format = options.format ?? "plain";
75
+ const sent = await this.dataPublisher().sendText(normalized, {
76
+ topic: PRVT_CHAT_TOPIC,
77
+ attributes: {
78
+ [PRVT_CHAT_FORMAT_ATTRIBUTE]: format,
79
+ ...(keyboard === undefined ? {} : { [PRVT_CHAT_KEYBOARD_ATTRIBUTE]: encodeChatKeyboardAttribute(keyboard) }),
80
+ },
81
+ });
82
+ return {
83
+ id: sent.streamId,
84
+ message: normalized,
85
+ timestamp: sent.timestamp,
86
+ format,
87
+ ...(keyboard === undefined ? {} : { keyboard }),
88
+ };
89
+ }
90
+ onChatCallback(listener) {
91
+ if (typeof listener !== "function")
92
+ throw new TypeError("listener must be a function");
93
+ this.#chatCallbackListeners.add(listener);
94
+ return () => this.#chatCallbackListeners.delete(listener);
95
+ }
96
+ async acknowledgeChatCallback(callback, acknowledgement = { status: "accepted" }) {
97
+ if (!callback || typeof callback.senderIdentity !== "string")
98
+ throw new TypeError("callback is invalid");
99
+ await this.dataPublisher().publishData(encodeChatCallbackAcknowledgement(callback.eventId, acknowledgement), {
100
+ reliable: true,
101
+ topic: PRVT_CHAT_CALLBACK_ACK_TOPIC,
102
+ destination_identities: [callback.senderIdentity],
103
+ });
56
104
  }
57
105
  async pinMessage(messageId) {
58
106
  await this.publishPin(messageId, "pin");
@@ -153,11 +201,11 @@ export class PrvtIntegrationClient {
153
201
  }
154
202
  async updateProfile(profile, options = {}) {
155
203
  if (profile === null || typeof profile !== "object" || Array.isArray(profile)) {
156
- throw new TypeError("profile must contain a profilePicture or statusMessage");
204
+ throw new TypeError("profile must contain a profilePicture, statusMessage, or websiteUrl");
157
205
  }
158
206
  const keys = Object.keys(profile);
159
- if (keys.length === 0 || keys.some((key) => key !== "profilePicture" && key !== "statusMessage")) {
160
- throw new TypeError("profile must contain a profilePicture or statusMessage");
207
+ if (keys.length === 0 || keys.some((key) => key !== "profilePicture" && key !== "statusMessage" && key !== "websiteUrl")) {
208
+ throw new TypeError("profile must contain a profilePicture, statusMessage, or websiteUrl");
161
209
  }
162
210
  let response;
163
211
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
1
  export declare const PRVT_CHAT_TOPIC = "prvt.chat";
2
+ export declare const PRVT_CHAT_LANGUAGE_ATTRIBUTE = "prvt.chat.language";
3
+ export declare const PRVT_CHAT_FORMAT_ATTRIBUTE = "prvt.chat.format";
4
+ export declare const PRVT_CHAT_KEYBOARD_ATTRIBUTE = "prvt.chat.keyboard";
2
5
  export declare const PRVT_CHAT_PINS_TOPIC = "prvt.chat.pins";
6
+ export declare const PRVT_CHAT_CALLBACK_TOPIC = "prvt.chat.callbacks";
7
+ export declare const PRVT_CHAT_CALLBACK_ACK_TOPIC = "prvt.chat.callback.acks";
3
8
  export declare const PRVT_REACTIONS_TOPIC = "prvt.reactions";
4
9
  export declare const PRVT_INTEGRATION_PROFILE_PICTURE_ATTRIBUTE = "prvt.integration.profilePicture";
5
10
  export declare const PRVT_INTEGRATION_STATUS_MESSAGE_ATTRIBUTE = "prvt.integration.statusMessage";
11
+ export declare const PRVT_INTEGRATION_WEBSITE_URL_ATTRIBUTE = "prvt.integration.websiteUrl";
6
12
  export declare const PRVT_REACTION_EMOJI: readonly ["👍", "❤️", "😂", "😮", "😢", "👏", "🎉", "🤔"];
7
13
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,eAAO,MAAM,0CAA0C,oCAAoC,CAAC;AAC5F,eAAO,MAAM,yCAAyC,mCAAmC,CAAC;AAE1F,eAAO,MAAM,mBAAmB,2DAA4D,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,cAAc,CAAC;AAC3C,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AACjE,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAC7D,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AACjE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAC9D,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AACtE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,eAAO,MAAM,0CAA0C,oCAAoC,CAAC;AAC5F,eAAO,MAAM,yCAAyC,mCAAmC,CAAC;AAC1F,eAAO,MAAM,sCAAsC,gCAAgC,CAAC;AAEpF,eAAO,MAAM,mBAAmB,2DAA4D,CAAC"}
package/dist/constants.js CHANGED
@@ -1,7 +1,13 @@
1
1
  export const PRVT_CHAT_TOPIC = "prvt.chat";
2
+ export const PRVT_CHAT_LANGUAGE_ATTRIBUTE = "prvt.chat.language";
3
+ export const PRVT_CHAT_FORMAT_ATTRIBUTE = "prvt.chat.format";
4
+ export const PRVT_CHAT_KEYBOARD_ATTRIBUTE = "prvt.chat.keyboard";
2
5
  export const PRVT_CHAT_PINS_TOPIC = "prvt.chat.pins";
6
+ export const PRVT_CHAT_CALLBACK_TOPIC = "prvt.chat.callbacks";
7
+ export const PRVT_CHAT_CALLBACK_ACK_TOPIC = "prvt.chat.callback.acks";
3
8
  export const PRVT_REACTIONS_TOPIC = "prvt.reactions";
4
9
  export const PRVT_INTEGRATION_PROFILE_PICTURE_ATTRIBUTE = "prvt.integration.profilePicture";
5
10
  export const PRVT_INTEGRATION_STATUS_MESSAGE_ATTRIBUTE = "prvt.integration.statusMessage";
11
+ export const PRVT_INTEGRATION_WEBSITE_URL_ATTRIBUTE = "prvt.integration.websiteUrl";
6
12
  export const PRVT_REACTION_EMOJI = ["👍", "❤️", "😂", "😮", "😢", "👏", "🎉", "🤔"];
7
13
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,0CAA0C,GAAG,iCAAiC,CAAC;AAC5F,MAAM,CAAC,MAAM,yCAAyC,GAAG,gCAAgC,CAAC;AAE1F,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,kBAAkB,CAAC;AAC7D,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACrD,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,4BAA4B,GAAG,yBAAyB,CAAC;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAErD,MAAM,CAAC,MAAM,0CAA0C,GAAG,iCAAiC,CAAC;AAC5F,MAAM,CAAC,MAAM,yCAAyC,GAAG,gCAAgC,CAAC;AAC1F,MAAM,CAAC,MAAM,sCAAsC,GAAG,6BAA6B,CAAC;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { PrvtApiError, PrvtConnectionError, PrvtDataPublishingUnavailableError, PrvtNetworkError, PrvtProtocolError, PrvtReactionRateLimitError, PrvtRtcUnavailableError, } from "./errors.js";
2
2
  export { createPrvtIntegration } from "./client.js";
3
- export type { ConnectIntegrationOptions, CreatePrvtIntegrationOptions, ExchangeTokenOptions, ChatPinPacket, IntegrationChatMessage, IntegrationProfileUpdate, IntegrationPermissions, IntegrationToken, PrvtApiErrorCode, PrvtIntegration, PrvtIntegrationSession, ReactionEmoji, ReactionPacket, } from "./types.js";
4
- export { PRVT_CHAT_PINS_TOPIC, PRVT_CHAT_TOPIC, PRVT_INTEGRATION_PROFILE_PICTURE_ATTRIBUTE, PRVT_INTEGRATION_STATUS_MESSAGE_ATTRIBUTE, PRVT_REACTION_EMOJI, PRVT_REACTIONS_TOPIC, } from "./constants.js";
3
+ export { parseChatMessageLanguage } from "./chat.js";
4
+ export type { ChatLanguageCode, } from "./chat.js";
5
+ export type { ConnectIntegrationOptions, CreatePrvtIntegrationOptions, ExchangeTokenOptions, ChatPinPacket, IntegrationChatButton, IntegrationChatButtonStyle, IntegrationChatCallback, IntegrationChatCallbackAcknowledgement, IntegrationChatKeyboard, IntegrationChatMessage, IntegrationChatMessageFormat, IntegrationChatMessageOptions, IntegrationProfileUpdate, IntegrationPermissions, IntegrationToken, PrvtApiErrorCode, PrvtIntegration, PrvtIntegrationSession, ReactionEmoji, ReactionPacket, } from "./types.js";
6
+ export { PRVT_CHAT_CALLBACK_ACK_TOPIC, PRVT_CHAT_CALLBACK_TOPIC, PRVT_CHAT_FORMAT_ATTRIBUTE, PRVT_CHAT_KEYBOARD_ATTRIBUTE, PRVT_CHAT_LANGUAGE_ATTRIBUTE, PRVT_CHAT_PINS_TOPIC, PRVT_CHAT_TOPIC, PRVT_INTEGRATION_PROFILE_PICTURE_ATTRIBUTE, PRVT_INTEGRATION_STATUS_MESSAGE_ATTRIBUTE, PRVT_INTEGRATION_WEBSITE_URL_ATTRIBUTE, PRVT_REACTION_EMOJI, PRVT_REACTIONS_TOPIC, } from "./constants.js";
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kCAAkC,EAClC,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,0CAA0C,EAC1C,yCAAyC,EACzC,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kCAAkC,EAClC,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EACV,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,sCAAsC,EACtC,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,aAAa,EACb,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,0CAA0C,EAC1C,yCAAyC,EACzC,sCAAsC,EACtC,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { PrvtApiError, PrvtConnectionError, PrvtDataPublishingUnavailableError, PrvtNetworkError, PrvtProtocolError, PrvtReactionRateLimitError, PrvtRtcUnavailableError, } from "./errors.js";
2
2
  export { createPrvtIntegration } from "./client.js";
3
- export { PRVT_CHAT_PINS_TOPIC, PRVT_CHAT_TOPIC, PRVT_INTEGRATION_PROFILE_PICTURE_ATTRIBUTE, PRVT_INTEGRATION_STATUS_MESSAGE_ATTRIBUTE, PRVT_REACTION_EMOJI, PRVT_REACTIONS_TOPIC, } from "./constants.js";
3
+ export { parseChatMessageLanguage } from "./chat.js";
4
+ export { PRVT_CHAT_CALLBACK_ACK_TOPIC, PRVT_CHAT_CALLBACK_TOPIC, PRVT_CHAT_FORMAT_ATTRIBUTE, PRVT_CHAT_KEYBOARD_ATTRIBUTE, PRVT_CHAT_LANGUAGE_ATTRIBUTE, PRVT_CHAT_PINS_TOPIC, PRVT_CHAT_TOPIC, PRVT_INTEGRATION_PROFILE_PICTURE_ATTRIBUTE, PRVT_INTEGRATION_STATUS_MESSAGE_ATTRIBUTE, PRVT_INTEGRATION_WEBSITE_URL_ATTRIBUTE, PRVT_REACTION_EMOJI, PRVT_REACTIONS_TOPIC, } from "./constants.js";
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kCAAkC,EAClC,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAgBpD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,0CAA0C,EAC1C,yCAAyC,EACzC,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kCAAkC,EAClC,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AA0BrD,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,4BAA4B,EAC5B,oBAAoB,EACpB,eAAe,EACf,0CAA0C,EAC1C,yCAAyC,EACzC,sCAAsC,EACtC,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -29,6 +29,38 @@ export type ConnectIntegrationOptions = ExchangeTokenOptions & {
29
29
  export type IntegrationProfileUpdate = {
30
30
  profilePicture?: string | null;
31
31
  statusMessage?: string | null;
32
+ websiteUrl?: string | null;
33
+ };
34
+ export type IntegrationChatMessageFormat = "plain" | "markdown";
35
+ export type IntegrationChatButtonStyle = "primary" | "secondary" | "danger";
36
+ export type IntegrationChatButton = {
37
+ id?: string;
38
+ url?: string;
39
+ label: string;
40
+ style?: IntegrationChatButtonStyle;
41
+ disabled?: boolean;
42
+ };
43
+ export type IntegrationChatKeyboard = {
44
+ v: 1;
45
+ rows: IntegrationChatButton[][];
46
+ };
47
+ export type IntegrationChatMessageOptions = {
48
+ format?: IntegrationChatMessageFormat;
49
+ keyboard?: IntegrationChatKeyboard;
50
+ };
51
+ export type IntegrationChatCallback = {
52
+ v: 1;
53
+ type: "button_click";
54
+ eventId: string;
55
+ messageId: string;
56
+ buttonId: string;
57
+ senderIdentity: string;
58
+ timestamp: number;
59
+ };
60
+ export type IntegrationChatCallbackAcknowledgement = {
61
+ status: "accepted" | "rejected";
62
+ text?: string;
63
+ alert?: boolean;
32
64
  };
33
65
  export type ReactionEmoji = (typeof PRVT_REACTION_EMOJI)[number];
34
66
  export type ReactionPacket = {
@@ -45,6 +77,8 @@ export type IntegrationChatMessage = {
45
77
  id: string;
46
78
  message: string;
47
79
  timestamp: number;
80
+ format: IntegrationChatMessageFormat;
81
+ keyboard?: IntegrationChatKeyboard;
48
82
  };
49
83
  export interface PrvtIntegrationSession {
50
84
  readonly room: Room;
@@ -52,7 +86,9 @@ export interface PrvtIntegrationSession {
52
86
  readonly displayName: string;
53
87
  readonly expiresAt: string;
54
88
  readonly permissions: IntegrationPermissions;
55
- sendMessage(message: string): Promise<IntegrationChatMessage>;
89
+ sendMessage(message: string, options?: IntegrationChatMessageOptions): Promise<IntegrationChatMessage>;
90
+ onChatCallback(listener: (callback: IntegrationChatCallback) => void | Promise<void>): () => void;
91
+ acknowledgeChatCallback(callback: IntegrationChatCallback, acknowledgement?: IntegrationChatCallbackAcknowledgement): Promise<void>;
56
92
  updateProfile(profile: IntegrationProfileUpdate, options?: ExchangeTokenOptions): Promise<void>;
57
93
  pinMessage(messageId: string): Promise<void>;
58
94
  unpinMessage(messageId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@prvt/integration-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "TypeScript SDK for building visible Node.js integrations for prvt rooms.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "files": [
8
8
  "dist",
9
- "README.md"
9
+ "README.md",
10
+ "AGENT_PROMPT.md"
10
11
  ],
11
12
  "main": "./dist/index.js",
12
13
  "module": "./dist/index.js",