@polymorfa/browser 0.1.0-dev.20260922094209

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.
Files changed (139) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +248 -0
  3. package/dist/calls/api.d.ts +22 -0
  4. package/dist/calls/api.d.ts.map +1 -0
  5. package/dist/calls/api.js +104 -0
  6. package/dist/calls/api.js.map +1 -0
  7. package/dist/calls/backend.d.ts +85 -0
  8. package/dist/calls/backend.d.ts.map +1 -0
  9. package/dist/calls/backend.js +141 -0
  10. package/dist/calls/backend.js.map +1 -0
  11. package/dist/calls/client.d.ts +56 -0
  12. package/dist/calls/client.d.ts.map +1 -0
  13. package/dist/calls/client.js +260 -0
  14. package/dist/calls/client.js.map +1 -0
  15. package/dist/calls/controller.d.ts +329 -0
  16. package/dist/calls/controller.d.ts.map +1 -0
  17. package/dist/calls/controller.js +1328 -0
  18. package/dist/calls/controller.js.map +1 -0
  19. package/dist/calls/diagnostics.d.ts +52 -0
  20. package/dist/calls/diagnostics.d.ts.map +1 -0
  21. package/dist/calls/diagnostics.js +188 -0
  22. package/dist/calls/diagnostics.js.map +1 -0
  23. package/dist/calls/index.d.ts +3 -0
  24. package/dist/calls/index.d.ts.map +1 -0
  25. package/dist/calls/index.js +5 -0
  26. package/dist/calls/index.js.map +1 -0
  27. package/dist/calls/internal.d.ts +8 -0
  28. package/dist/calls/internal.d.ts.map +1 -0
  29. package/dist/calls/internal.js +8 -0
  30. package/dist/calls/internal.js.map +1 -0
  31. package/dist/calls/media.d.ts +144 -0
  32. package/dist/calls/media.d.ts.map +1 -0
  33. package/dist/calls/media.js +512 -0
  34. package/dist/calls/media.js.map +1 -0
  35. package/dist/calls/signaling.d.ts +74 -0
  36. package/dist/calls/signaling.d.ts.map +1 -0
  37. package/dist/calls/signaling.js +169 -0
  38. package/dist/calls/signaling.js.map +1 -0
  39. package/dist/calls/socket.d.ts +95 -0
  40. package/dist/calls/socket.d.ts.map +1 -0
  41. package/dist/calls/socket.js +267 -0
  42. package/dist/calls/socket.js.map +1 -0
  43. package/dist/chat/composer.d.ts +59 -0
  44. package/dist/chat/composer.d.ts.map +1 -0
  45. package/dist/chat/composer.js +217 -0
  46. package/dist/chat/composer.js.map +1 -0
  47. package/dist/chat/conversation.d.ts +71 -0
  48. package/dist/chat/conversation.d.ts.map +1 -0
  49. package/dist/chat/conversation.js +204 -0
  50. package/dist/chat/conversation.js.map +1 -0
  51. package/dist/chat/index.d.ts +4 -0
  52. package/dist/chat/index.d.ts.map +1 -0
  53. package/dist/chat/index.js +4 -0
  54. package/dist/chat/index.js.map +1 -0
  55. package/dist/chat/voice-recorder.d.ts +75 -0
  56. package/dist/chat/voice-recorder.d.ts.map +1 -0
  57. package/dist/chat/voice-recorder.js +346 -0
  58. package/dist/chat/voice-recorder.js.map +1 -0
  59. package/dist/controller.d.ts +16 -0
  60. package/dist/controller.d.ts.map +1 -0
  61. package/dist/controller.js +50 -0
  62. package/dist/controller.js.map +1 -0
  63. package/dist/diagnostics.d.ts +27 -0
  64. package/dist/diagnostics.d.ts.map +1 -0
  65. package/dist/diagnostics.js +2 -0
  66. package/dist/diagnostics.js.map +1 -0
  67. package/dist/dropin/client.d.ts +82 -0
  68. package/dist/dropin/client.d.ts.map +1 -0
  69. package/dist/dropin/client.js +314 -0
  70. package/dist/dropin/client.js.map +1 -0
  71. package/dist/dropin/connect.d.ts +23 -0
  72. package/dist/dropin/connect.d.ts.map +1 -0
  73. package/dist/dropin/connect.js +54 -0
  74. package/dist/dropin/connect.js.map +1 -0
  75. package/dist/dropin/inbox.d.ts +131 -0
  76. package/dist/dropin/inbox.d.ts.map +1 -0
  77. package/dist/dropin/inbox.js +406 -0
  78. package/dist/dropin/inbox.js.map +1 -0
  79. package/dist/dropin/index.d.ts +5 -0
  80. package/dist/dropin/index.d.ts.map +1 -0
  81. package/dist/dropin/index.js +5 -0
  82. package/dist/dropin/index.js.map +1 -0
  83. package/dist/dropin/permissions.d.ts +29 -0
  84. package/dist/dropin/permissions.d.ts.map +1 -0
  85. package/dist/dropin/permissions.js +53 -0
  86. package/dist/dropin/permissions.js.map +1 -0
  87. package/dist/errors.d.ts +39 -0
  88. package/dist/errors.d.ts.map +1 -0
  89. package/dist/errors.js +41 -0
  90. package/dist/errors.js.map +1 -0
  91. package/dist/index.d.ts +11 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +10 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/internal.d.ts +12 -0
  96. package/dist/internal.d.ts.map +1 -0
  97. package/dist/internal.js +13 -0
  98. package/dist/internal.js.map +1 -0
  99. package/dist/messaging/client.d.ts +54 -0
  100. package/dist/messaging/client.d.ts.map +1 -0
  101. package/dist/messaging/client.js +153 -0
  102. package/dist/messaging/client.js.map +1 -0
  103. package/dist/messaging/composer.d.ts +12 -0
  104. package/dist/messaging/composer.d.ts.map +1 -0
  105. package/dist/messaging/composer.js +36 -0
  106. package/dist/messaging/composer.js.map +1 -0
  107. package/dist/messaging/index.d.ts +4 -0
  108. package/dist/messaging/index.d.ts.map +1 -0
  109. package/dist/messaging/index.js +3 -0
  110. package/dist/messaging/index.js.map +1 -0
  111. package/dist/messaging/types.d.ts +209 -0
  112. package/dist/messaging/types.d.ts.map +1 -0
  113. package/dist/messaging/types.js +2 -0
  114. package/dist/messaging/types.js.map +1 -0
  115. package/dist/templates/controller.d.ts +45 -0
  116. package/dist/templates/controller.d.ts.map +1 -0
  117. package/dist/templates/controller.js +298 -0
  118. package/dist/templates/controller.js.map +1 -0
  119. package/dist/templates/index.d.ts +4 -0
  120. package/dist/templates/index.d.ts.map +1 -0
  121. package/dist/templates/index.js +3 -0
  122. package/dist/templates/index.js.map +1 -0
  123. package/dist/templates/transport.d.ts +7 -0
  124. package/dist/templates/transport.d.ts.map +1 -0
  125. package/dist/templates/transport.js +124 -0
  126. package/dist/templates/transport.js.map +1 -0
  127. package/dist/templates/types.d.ts +141 -0
  128. package/dist/templates/types.d.ts.map +1 -0
  129. package/dist/templates/types.js +2 -0
  130. package/dist/templates/types.js.map +1 -0
  131. package/dist/token.d.ts +37 -0
  132. package/dist/token.d.ts.map +1 -0
  133. package/dist/token.js +152 -0
  134. package/dist/token.js.map +1 -0
  135. package/dist/transport.d.ts +53 -0
  136. package/dist/transport.d.ts.map +1 -0
  137. package/dist/transport.js +328 -0
  138. package/dist/transport.js.map +1 -0
  139. package/package.json +45 -0
@@ -0,0 +1,406 @@
1
+ import { ConversationController } from "../chat/conversation.js";
2
+ import { ObservableController, } from "../controller.js";
3
+ import { BrowserError } from "../errors.js";
4
+ /**
5
+ * Framework-neutral state for an inbox: the conversation list, the selected
6
+ * conversation and one `ConversationController` per opened conversation.
7
+ */
8
+ export class InboxController extends ObservableController {
9
+ source;
10
+ #conversations = new Map();
11
+ #abort = new AbortController();
12
+ #unsubscribe;
13
+ constructor(source, options = {}) {
14
+ super({ status: "idle", conversations: [], hasMore: false }, options.now);
15
+ this.source = source;
16
+ }
17
+ async load() {
18
+ this.assertActive();
19
+ this.#abort.abort();
20
+ this.#abort = new AbortController();
21
+ const signal = this.#abort.signal;
22
+ const selectedId = this.getSnapshot().selectedId;
23
+ this.transition({
24
+ status: "loading",
25
+ conversations: [],
26
+ hasMore: false,
27
+ ...(selectedId === undefined ? {} : { selectedId }),
28
+ });
29
+ try {
30
+ const page = await this.source.listConversations(undefined, signal);
31
+ if (signal.aborted)
32
+ return;
33
+ this.transition({
34
+ status: "ready",
35
+ conversations: sortConversations(page.conversations).map((conversation) => conversation.id === selectedId && conversation.unreadCount > 0
36
+ ? { ...conversation, unreadCount: 0 }
37
+ : conversation),
38
+ hasMore: page.nextCursor !== undefined,
39
+ ...(page.nextCursor === undefined ? {} : { cursor: page.nextCursor }),
40
+ ...(selectedId === undefined ? {} : { selectedId }),
41
+ });
42
+ this.#unsubscribe?.();
43
+ this.#unsubscribe = this.source.subscribe?.((change) => this.#apply(change));
44
+ }
45
+ catch (cause) {
46
+ if (!signal.aborted)
47
+ this.transition({
48
+ status: "error",
49
+ conversations: [],
50
+ hasMore: false,
51
+ error: message(cause),
52
+ ...(selectedId === undefined ? {} : { selectedId }),
53
+ });
54
+ }
55
+ }
56
+ async loadMore() {
57
+ const current = this.getSnapshot();
58
+ if (current.status !== "ready" || current.cursor === undefined)
59
+ return;
60
+ const signal = this.#abort.signal;
61
+ this.transition({ ...rest(current), status: "loading_more" });
62
+ try {
63
+ const page = await this.source.listConversations(current.cursor, signal);
64
+ if (signal.aborted)
65
+ return;
66
+ const latest = this.getSnapshot();
67
+ const { cursor: _cursor, ...base } = rest(latest);
68
+ void _cursor;
69
+ this.transition({
70
+ ...base,
71
+ status: "ready",
72
+ conversations: sortConversations(merge(latest.conversations, page.conversations)),
73
+ hasMore: page.nextCursor !== undefined,
74
+ ...(page.nextCursor === undefined ? {} : { cursor: page.nextCursor }),
75
+ });
76
+ }
77
+ catch (cause) {
78
+ if (!signal.aborted)
79
+ this.transition({
80
+ ...rest(this.getSnapshot()),
81
+ status: "ready",
82
+ error: message(cause),
83
+ });
84
+ }
85
+ }
86
+ /** Select a conversation, or pass `undefined` to go back to the list. */
87
+ select(conversationId) {
88
+ const current = rest(this.getSnapshot());
89
+ const { selectedId: _selected, ...base } = current;
90
+ void _selected;
91
+ this.transition({
92
+ ...base,
93
+ ...(conversationId === undefined ? {} : { selectedId: conversationId }),
94
+ // Opening a conversation clears its unread badge locally.
95
+ conversations: base.conversations.map((conversation) => conversation.id === conversationId && conversation.unreadCount > 0
96
+ ? { ...conversation, unreadCount: 0 }
97
+ : conversation),
98
+ });
99
+ }
100
+ get selected() {
101
+ const { selectedId, conversations } = this.getSnapshot();
102
+ return conversations.find((conversation) => conversation.id === selectedId);
103
+ }
104
+ /** The shared controller for a conversation, created and loaded on first use. */
105
+ conversation(conversation) {
106
+ let controller = this.#conversations.get(conversation.id);
107
+ if (controller === undefined) {
108
+ controller = new ConversationController(this.source.conversation(conversation));
109
+ this.#conversations.set(conversation.id, controller);
110
+ void controller.load();
111
+ }
112
+ return controller;
113
+ }
114
+ onDispose() {
115
+ this.#abort.abort();
116
+ this.#unsubscribe?.();
117
+ for (const controller of this.#conversations.values())
118
+ controller.dispose();
119
+ this.#conversations.clear();
120
+ this.source.close?.();
121
+ }
122
+ #apply(change) {
123
+ const current = rest(this.getSnapshot());
124
+ if (change.type === "remove") {
125
+ this.transition({
126
+ ...current,
127
+ conversations: current.conversations.filter((conversation) => conversation.id !== change.conversationId),
128
+ });
129
+ return;
130
+ }
131
+ let incoming;
132
+ if (change.type === "activity") {
133
+ const existing = current.conversations.find((conversation) => conversation.id === change.conversationId);
134
+ incoming = {
135
+ ...(existing ?? { id: change.conversationId, unreadCount: 0 }),
136
+ ...(existing?.session === undefined && change.session !== undefined
137
+ ? { session: change.session }
138
+ : {}),
139
+ ...(existing?.name === undefined && change.name !== undefined
140
+ ? { name: change.name }
141
+ : {}),
142
+ ...(existing?.phoneNumber === undefined &&
143
+ change.phoneNumber !== undefined
144
+ ? { phoneNumber: change.phoneNumber }
145
+ : {}),
146
+ lastMessage: change.lastMessage,
147
+ lastActivity: change.lastMessage.createdAt,
148
+ unreadCount: (existing?.unreadCount ?? 0) +
149
+ (change.lastMessage.direction === "inbound" ? 1 : 0),
150
+ };
151
+ }
152
+ else
153
+ incoming = change.conversation;
154
+ if (incoming.id === current.selectedId)
155
+ incoming = { ...incoming, unreadCount: 0 };
156
+ this.transition({
157
+ ...current,
158
+ conversations: sortConversations(merge(current.conversations, [incoming])),
159
+ });
160
+ }
161
+ }
162
+ function rest(snapshot) {
163
+ const { revision: _revision, updatedAt: _updatedAt, ...fields } = snapshot;
164
+ void _revision;
165
+ void _updatedAt;
166
+ return fields;
167
+ }
168
+ function merge(current, incoming) {
169
+ const byId = new Map(current.map((item) => [item.id, item]));
170
+ for (const item of incoming)
171
+ byId.set(item.id, item);
172
+ return [...byId.values()];
173
+ }
174
+ function sortConversations(conversations) {
175
+ return [...conversations].sort((a, b) => b.lastActivity - a.lastActivity);
176
+ }
177
+ function message(cause) {
178
+ return cause instanceof Error ? cause.message : String(cause);
179
+ }
180
+ /**
181
+ * The default `<Inbox/>` source: history from your handler's `history`
182
+ * routes, live changes from its `events` route, and sends straight to the
183
+ * Polymorfa API with the client token (the API enforces `send_message`).
184
+ */
185
+ export function createHandlerInboxSource(client, options = {}) {
186
+ const listeners = new Set();
187
+ let source;
188
+ const EventSourceImpl = options.EventSource ??
189
+ globalThis
190
+ .EventSource;
191
+ const live = options.live !== false && EventSourceImpl !== undefined;
192
+ const listen = (listener) => {
193
+ if (!live || !client.can("subscribe_events"))
194
+ return () => undefined;
195
+ listeners.add(listener);
196
+ if (source === undefined) {
197
+ source = new EventSourceImpl(client.url("events"), {
198
+ withCredentials: true,
199
+ });
200
+ source.addEventListener("message", (frame) => {
201
+ let parsed;
202
+ try {
203
+ parsed = JSON.parse(frame.data);
204
+ }
205
+ catch {
206
+ return;
207
+ }
208
+ for (const item of Array.isArray(parsed) ? parsed : [parsed])
209
+ if (isRelayedEvent(item))
210
+ for (const notify of [...listeners])
211
+ notify(item);
212
+ });
213
+ }
214
+ return () => {
215
+ listeners.delete(listener);
216
+ if (listeners.size === 0) {
217
+ source?.close();
218
+ source = undefined;
219
+ }
220
+ };
221
+ };
222
+ return {
223
+ async listConversations(cursor, signal) {
224
+ const page = await client.request(`history/conversations${query(cursor)}`, signal === undefined ? {} : { signal });
225
+ return {
226
+ conversations: page.data,
227
+ ...(typeof page.nextCursor === "string"
228
+ ? { nextCursor: page.nextCursor }
229
+ : {}),
230
+ };
231
+ },
232
+ conversation(conversation) {
233
+ const path = `history/conversations/${encodeURIComponent(conversation.id)}/messages`;
234
+ return {
235
+ async load(cursor, signal) {
236
+ const page = await client.request(`${path}${query(cursor)}`, signal === undefined ? {} : { signal });
237
+ return {
238
+ messages: page.data,
239
+ ...(typeof page.nextCursor === "string"
240
+ ? { nextCursor: page.nextCursor }
241
+ : {}),
242
+ };
243
+ },
244
+ subscribe(listener) {
245
+ return listen((event) => {
246
+ const change = conversationEvent(event, conversation.id);
247
+ if (change !== undefined)
248
+ listener(change);
249
+ });
250
+ },
251
+ async send(outgoing, signal) {
252
+ const messaging = client.messaging(conversation.session);
253
+ const body = {
254
+ conversation: { id: conversation.id },
255
+ content: { text: outgoing.text },
256
+ ...(outgoing.replyTo === undefined
257
+ ? {}
258
+ : { quotedMessage: { id: outgoing.replyTo } }),
259
+ };
260
+ const request = () => messaging.messages.send(body, signal === undefined ? {} : { signal });
261
+ let response;
262
+ try {
263
+ response = await request();
264
+ }
265
+ catch (cause) {
266
+ // A refused token gets exactly one fresh token, then gives up.
267
+ if (cause instanceof BrowserError &&
268
+ (cause.status === 401 || cause.status === 403)) {
269
+ await client.refresh();
270
+ response = await request();
271
+ }
272
+ else
273
+ throw cause;
274
+ }
275
+ const data = response.data.data;
276
+ return {
277
+ id: typeof data?.id === "string" ? data.id : outgoing.clientId,
278
+ clientId: outgoing.clientId,
279
+ text: outgoing.text,
280
+ createdAt: Date.now(),
281
+ direction: "outbound",
282
+ status: "sent",
283
+ ...(outgoing.replyTo === undefined
284
+ ? {}
285
+ : { replyTo: outgoing.replyTo }),
286
+ };
287
+ },
288
+ };
289
+ },
290
+ async contact(conversation, signal) {
291
+ try {
292
+ const page = await client.request(`history/conversations/${encodeURIComponent(conversation.id)}/contact`, signal === undefined ? {} : { signal });
293
+ return page.data;
294
+ }
295
+ catch (cause) {
296
+ if (cause instanceof BrowserError && cause.status === 404)
297
+ return undefined;
298
+ throw cause;
299
+ }
300
+ },
301
+ subscribe(listener) {
302
+ return listen((event) => {
303
+ const change = inboxChange(event);
304
+ if (change !== undefined)
305
+ listener(change);
306
+ });
307
+ },
308
+ close() {
309
+ listeners.clear();
310
+ source?.close();
311
+ source = undefined;
312
+ },
313
+ };
314
+ }
315
+ function query(cursor) {
316
+ return cursor === undefined ? "" : `?cursor=${encodeURIComponent(cursor)}`;
317
+ }
318
+ function isRelayedEvent(value) {
319
+ if (typeof value !== "object" || value === null)
320
+ return false;
321
+ const event = value;
322
+ return (typeof event.id === "string" &&
323
+ typeof event.event === "string" &&
324
+ typeof event.session === "string");
325
+ }
326
+ function record(value) {
327
+ return typeof value === "object" && value !== null
328
+ ? value
329
+ : undefined;
330
+ }
331
+ /** The conversation an event belongs to, as the store reducers read it. */
332
+ export function relayedConversationId(event) {
333
+ const payload = record(event.payload);
334
+ const id = record(payload?.conversation)?.id ?? record(payload?.from)?.id ?? undefined;
335
+ return typeof id === "string" ? id : undefined;
336
+ }
337
+ function messageFromEvent(event) {
338
+ if (event.event !== "message.received" &&
339
+ event.event !== "message.sent" &&
340
+ event.event !== "message.edited")
341
+ return undefined;
342
+ const payload = record(event.payload);
343
+ const conversationId = relayedConversationId(event);
344
+ if (payload === undefined || conversationId === undefined)
345
+ return undefined;
346
+ const id = payload.id;
347
+ if (typeof id !== "string")
348
+ return undefined;
349
+ const text = typeof payload.text === "string"
350
+ ? payload.text
351
+ : typeof payload.caption === "string"
352
+ ? payload.caption
353
+ : "";
354
+ const time = Date.parse(typeof payload.timestamp === "string" ? payload.timestamp : event.timestamp);
355
+ return {
356
+ conversationId,
357
+ id,
358
+ text,
359
+ createdAt: Number.isFinite(time) ? time : Date.now(),
360
+ direction: payload.fromMe === true ? "outbound" : "inbound",
361
+ status: "sent",
362
+ };
363
+ }
364
+ function conversationEvent(event, conversationId) {
365
+ if (relayedConversationId(event) !== conversationId)
366
+ return undefined;
367
+ if (event.event === "message.delete" || event.event === "message.revoked") {
368
+ const payload = record(event.payload);
369
+ const id = payload?.revokedId ?? payload?.id;
370
+ return typeof id === "string"
371
+ ? { type: "delete", messageId: id }
372
+ : undefined;
373
+ }
374
+ const message = messageFromEvent(event);
375
+ if (message === undefined)
376
+ return undefined;
377
+ const { conversationId: _id, ...rest } = message;
378
+ void _id;
379
+ return { type: "upsert", message: rest };
380
+ }
381
+ function inboxChange(event) {
382
+ const message = messageFromEvent(event);
383
+ if (message === undefined)
384
+ return undefined;
385
+ const payload = record(event.payload);
386
+ const conversation = record(payload?.conversation);
387
+ const name = message.direction === "inbound" && typeof payload?.pushName === "string"
388
+ ? payload.pushName
389
+ : undefined;
390
+ const phone = typeof conversation?.phoneNumber === "string"
391
+ ? conversation.phoneNumber
392
+ : undefined;
393
+ return {
394
+ type: "activity",
395
+ conversationId: message.conversationId,
396
+ session: event.session,
397
+ ...(name === undefined ? {} : { name }),
398
+ ...(phone === undefined ? {} : { phoneNumber: phone }),
399
+ lastMessage: {
400
+ text: message.text,
401
+ createdAt: message.createdAt,
402
+ direction: message.direction,
403
+ },
404
+ };
405
+ }
406
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../src/dropin/inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { PolymorfaClient, createPolymorfaClient, type PolymorfaClientOptions, type PolymorfaClientSnapshot, type PolymorfaClientStatus, } from "./client.js";
2
+ export { POLYMORFA_PERMISSIONS, warnMissingPermission, type PolymorfaGrant, type PolymorfaPermission, } from "./permissions.js";
3
+ export { InboxController, createHandlerInboxSource, relayedConversationId, type EventSourceLike, type HandlerInboxSourceOptions, type InboxChange, type InboxContact, type InboxConversation, type InboxConversationPage, type InboxDataSource, type InboxSnapshot, type RelayedEvent, } from "./inbox.js";
4
+ export { connectWhatsApp, type ConnectWhatsAppOptions, type ConnectWhatsAppResult, } from "./connect.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dropin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { PolymorfaClient, createPolymorfaClient, } from "./client.js";
2
+ export { POLYMORFA_PERMISSIONS, warnMissingPermission, } from "./permissions.js";
3
+ export { InboxController, createHandlerInboxSource, relayedConversationId, } from "./inbox.js";
4
+ export { connectWhatsApp, } from "./connect.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dropin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,qBAAqB,GAItB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GAGtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,qBAAqB,GAUtB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,eAAe,GAGhB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * What a drop-in grant can allow. The API enforces the client-token actions
3
+ * (`send_*`, `read_*`, `subscribe_presence`, `voip_*`); your handler enforces
4
+ * the rest on its own routes (`read_messages`, `subscribe_events`,
5
+ * `connect_whatsapp`, `manage_templates`).
6
+ */
7
+ export type PolymorfaPermission = "read_messages" | "subscribe_events" | "send_message" | "send_reaction" | "send_typing" | "send_seen" | "read_presence" | "subscribe_presence" | "read_contact" | "voip_place" | "voip_answer" | "voip_signal" | "connect_whatsapp" | "manage_templates";
8
+ export declare const POLYMORFA_PERMISSIONS: readonly PolymorfaPermission[];
9
+ /**
10
+ * The grant your server's `mint()` returned, as the token route reports it.
11
+ * The browser reads it only to decide what to render.
12
+ */
13
+ export interface PolymorfaGrant {
14
+ readonly session?: string;
15
+ readonly customer?: string;
16
+ /** Conversation IDs the user may read, or `"all"`. */
17
+ readonly conversations: "all" | readonly string[];
18
+ readonly allow: readonly PolymorfaPermission[];
19
+ }
20
+ /**
21
+ * Logs one development warning per component and permission, naming the
22
+ * control that was hidden and where to grant it. Production builds log
23
+ * nothing.
24
+ */
25
+ export declare function warnMissingPermission(component: string, control: string, permission: PolymorfaPermission): void;
26
+ /** @internal Resets the once-per-key warning memory for tests. */
27
+ export declare function resetPermissionWarnings(): void;
28
+ export declare function isPolymorfaGrant(value: unknown): value is PolymorfaGrant;
29
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/dropin/permissions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAC3B,eAAe,GACf,kBAAkB,GAClB,cAAc,GACd,eAAe,GACf,aAAa,GACb,WAAW,GACX,eAAe,GACf,oBAAoB,GACpB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,kBAAkB,CAAC;AAEvB,eAAO,MAAM,qBAAqB,EAAE,SAAS,mBAAmB,EAgB5D,CAAC;AAEL;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,aAAa,EAAE,KAAK,GAAG,SAAS,MAAM,EAAE,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAChD;AAaD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,mBAAmB,GAC9B,IAAI,CAQN;AAED,kEAAkE;AAClE,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAcxE"}
@@ -0,0 +1,53 @@
1
+ export const POLYMORFA_PERMISSIONS = Object.freeze([
2
+ "read_messages",
3
+ "subscribe_events",
4
+ "send_message",
5
+ "send_reaction",
6
+ "send_typing",
7
+ "send_seen",
8
+ "read_presence",
9
+ "subscribe_presence",
10
+ "read_contact",
11
+ "voip_place",
12
+ "voip_answer",
13
+ "voip_signal",
14
+ "connect_whatsapp",
15
+ "manage_templates",
16
+ ]);
17
+ const warned = new Set();
18
+ function isDevelopment() {
19
+ const env = globalThis.process?.env?.NODE_ENV;
20
+ return env !== "production";
21
+ }
22
+ /**
23
+ * Logs one development warning per component and permission, naming the
24
+ * control that was hidden and where to grant it. Production builds log
25
+ * nothing.
26
+ */
27
+ export function warnMissingPermission(component, control, permission) {
28
+ if (!isDevelopment())
29
+ return;
30
+ const key = `${component}:${permission}`;
31
+ if (warned.has(key))
32
+ return;
33
+ warned.add(key);
34
+ console.warn(`<${component}/>: ${control} hidden; the token lacks "${permission}". Add it to allow in mint().`);
35
+ }
36
+ /** @internal Resets the once-per-key warning memory for tests. */
37
+ export function resetPermissionWarnings() {
38
+ warned.clear();
39
+ }
40
+ export function isPolymorfaGrant(value) {
41
+ if (typeof value !== "object" || value === null)
42
+ return false;
43
+ const grant = value;
44
+ const conversationsValid = grant.conversations === "all" ||
45
+ (Array.isArray(grant.conversations) &&
46
+ grant.conversations.every((id) => typeof id === "string"));
47
+ return (conversationsValid &&
48
+ Array.isArray(grant.allow) &&
49
+ grant.allow.every((permission) => typeof permission === "string") &&
50
+ (grant.session === undefined || typeof grant.session === "string") &&
51
+ (grant.customer === undefined || typeof grant.customer === "string"));
52
+ }
53
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/dropin/permissions.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,qBAAqB,GAChC,MAAM,CAAC,MAAM,CAAC;IACZ,eAAe;IACf,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,aAAa;IACb,WAAW;IACX,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,YAAY;IACZ,aAAa;IACb,aAAa;IACb,kBAAkB;IAClB,kBAAkB;CACnB,CAAC,CAAC;AAcL,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;AAEjC,SAAS,aAAa;IACpB,MAAM,GAAG,GACP,UAGD,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC;IACzB,OAAO,GAAG,KAAK,YAAY,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,OAAe,EACf,UAA+B;IAE/B,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO;IAC7B,MAAM,GAAG,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;IACzC,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CACV,IAAI,SAAS,OAAO,OAAO,6BAA6B,UAAU,+BAA+B,CAClG,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,uBAAuB;IACrC,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAuD,CAAC;IACtE,MAAM,kBAAkB,GACtB,KAAK,CAAC,aAAa,KAAK,KAAK;QAC7B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YACjC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC;IAC/D,OAAO,CACL,kBAAkB;QAClB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,UAAU,KAAK,QAAQ,CAAC;QACjE,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;QAClE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CACrE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { BrowserResponseMetadata } from "./transport.js";
2
+ export type BrowserErrorCategory = "configuration" | "validation" | "authentication" | "authorization" | "not_found" | "conflict" | "rate_limit" | "server" | "connection" | "timeout" | "cancelled" | "http";
3
+ export interface BrowserErrorOptions {
4
+ readonly category: BrowserErrorCategory;
5
+ readonly code?: string;
6
+ readonly status?: number;
7
+ readonly requestId?: string;
8
+ readonly docUrl?: string;
9
+ readonly details?: unknown;
10
+ readonly metadata?: BrowserResponseMetadata;
11
+ readonly cause?: unknown;
12
+ }
13
+ export declare class BrowserError extends Error {
14
+ readonly category: BrowserErrorCategory;
15
+ readonly code: string | undefined;
16
+ readonly status: number | undefined;
17
+ /** `error.request_id` from the body, else the `X-Request-Id` header. */
18
+ readonly requestId: string | undefined;
19
+ /** Documentation for `code` (the body's `docs` link). */
20
+ readonly docUrl: string | undefined;
21
+ readonly details: unknown;
22
+ readonly metadata: BrowserResponseMetadata | undefined;
23
+ constructor(message: string, options: BrowserErrorOptions);
24
+ }
25
+ export declare class BrowserConfigurationError extends BrowserError {
26
+ constructor(message: string, code?: string);
27
+ }
28
+ export declare class BrowserValidationError extends BrowserError {
29
+ constructor(message: string, code?: string);
30
+ }
31
+ export declare class BrowserHttpError extends BrowserError {
32
+ }
33
+ export declare class BrowserConnectionError extends BrowserError {
34
+ }
35
+ export declare class BrowserTimeoutError extends BrowserError {
36
+ }
37
+ export declare class BrowserCancelledError extends BrowserError {
38
+ }
39
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,MAAM,oBAAoB,GAC5B,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,WAAW,GACX,UAAU,GACV,YAAY,GACZ,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,WAAW,GACX,MAAM,CAAC;AAEX,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,GAAG,SAAS,CAAC;gBAE3C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB;CAc1D;AAED,qBAAa,yBAA0B,SAAQ,YAAY;gBAC7C,OAAO,EAAE,MAAM,EAAE,IAAI,SAAwB;CAG1D;AAED,qBAAa,sBAAuB,SAAQ,YAAY;gBAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,SAAqB;CAGvD;AAED,qBAAa,gBAAiB,SAAQ,YAAY;CAAG;AACrD,qBAAa,sBAAuB,SAAQ,YAAY;CAAG;AAC3D,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AACxD,qBAAa,qBAAsB,SAAQ,YAAY;CAAG"}
package/dist/errors.js ADDED
@@ -0,0 +1,41 @@
1
+ export class BrowserError extends Error {
2
+ category;
3
+ code;
4
+ status;
5
+ /** `error.request_id` from the body, else the `X-Request-Id` header. */
6
+ requestId;
7
+ /** Documentation for `code` (the body's `docs` link). */
8
+ docUrl;
9
+ details;
10
+ metadata;
11
+ constructor(message, options) {
12
+ super(message, options.cause === undefined ? undefined : { cause: options.cause });
13
+ this.name = new.target.name;
14
+ this.category = options.category;
15
+ this.code = options.code;
16
+ this.status = options.status;
17
+ this.requestId = options.requestId;
18
+ this.docUrl = options.docUrl;
19
+ this.details = options.details;
20
+ this.metadata = options.metadata;
21
+ }
22
+ }
23
+ export class BrowserConfigurationError extends BrowserError {
24
+ constructor(message, code = "configuration_error") {
25
+ super(message, { category: "configuration", code });
26
+ }
27
+ }
28
+ export class BrowserValidationError extends BrowserError {
29
+ constructor(message, code = "validation_error") {
30
+ super(message, { category: "validation", code });
31
+ }
32
+ }
33
+ export class BrowserHttpError extends BrowserError {
34
+ }
35
+ export class BrowserConnectionError extends BrowserError {
36
+ }
37
+ export class BrowserTimeoutError extends BrowserError {
38
+ }
39
+ export class BrowserCancelledError extends BrowserError {
40
+ }
41
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,QAAQ,CAAuB;IAC/B,IAAI,CAAqB;IACzB,MAAM,CAAqB;IACpC,wEAAwE;IAC/D,SAAS,CAAqB;IACvC,yDAAyD;IAChD,MAAM,CAAqB;IAC3B,OAAO,CAAU;IACjB,QAAQ,CAAsC;IAEvD,YAAY,OAAe,EAAE,OAA4B;QACvD,KAAK,CACH,OAAO,EACP,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CACnE,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,yBAA0B,SAAQ,YAAY;IACzD,YAAY,OAAe,EAAE,IAAI,GAAG,qBAAqB;QACvD,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,YAAY;IACtD,YAAY,OAAe,EAAE,IAAI,GAAG,kBAAkB;QACpD,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,YAAY;CAAG;AACrD,MAAM,OAAO,sBAAuB,SAAQ,YAAY;CAAG;AAC3D,MAAM,OAAO,mBAAoB,SAAQ,YAAY;CAAG;AACxD,MAAM,OAAO,qBAAsB,SAAQ,YAAY;CAAG"}
@@ -0,0 +1,11 @@
1
+ export { ObservableController, type ControllerListener, type ControllerSnapshot, } from "./controller.js";
2
+ export type { BrowserDiagnosticEvent, BrowserDiagnosticSink, BrowserRequestCompletedDiagnostic, BrowserRequestFailedDiagnostic, BrowserRequestStartedDiagnostic, } from "./diagnostics.js";
3
+ export { BrowserCancelledError, BrowserConfigurationError, BrowserConnectionError, BrowserError, BrowserHttpError, BrowserTimeoutError, BrowserValidationError, type BrowserErrorCategory, type BrowserErrorOptions, } from "./errors.js";
4
+ export * from "./chat/index.js";
5
+ export * from "./calls/index.js";
6
+ export * from "./messaging/index.js";
7
+ export { ClientTokenManager, createClientTokenProvider, type ClientToken, type ClientTokenManagerOptions, type ClientTokenProviderOptions, type ClientTokenProvider, } from "./token.js";
8
+ export * from "./templates/index.js";
9
+ export { BrowserTransport, type BrowserHttpMethod, type BrowserRequest, type BrowserResponse, type BrowserResponseMetadata, type BrowserTransportOptions, } from "./transport.js";
10
+ export * from "./dropin/index.js";
11
+ //# sourceMappingURL=index.d.ts.map