@robono/server 0.26.0 → 0.28.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/HISTORY-IMPORT.md +104 -5
  3. package/README.md +1 -1
  4. package/SBOM.spdx.json +9 -9
  5. package/dist/calling.d.ts +30 -0
  6. package/dist/calling.d.ts.map +1 -1
  7. package/dist/calling.js +13 -0
  8. package/dist/calling.js.map +1 -1
  9. package/dist/client.d.ts +22 -1
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +17 -3
  12. package/dist/client.js.map +1 -1
  13. package/dist/generated/history-import-interactions.d.ts +17 -0
  14. package/dist/generated/history-import-interactions.d.ts.map +1 -0
  15. package/dist/generated/history-import-interactions.js +40 -0
  16. package/dist/generated/history-import-interactions.js.map +1 -0
  17. package/dist/generated/interactions.d.ts +199 -0
  18. package/dist/generated/interactions.d.ts.map +1 -0
  19. package/dist/generated/interactions.js +89 -0
  20. package/dist/generated/interactions.js.map +1 -0
  21. package/dist/generated/sdk-versions.d.ts +7 -7
  22. package/dist/generated/sdk-versions.d.ts.map +1 -1
  23. package/dist/generated/sdk-versions.js +1 -1
  24. package/dist/generated/sdk-versions.js.map +1 -1
  25. package/dist/history-convert.d.ts +52 -0
  26. package/dist/history-convert.d.ts.map +1 -0
  27. package/dist/history-convert.js +276 -0
  28. package/dist/history-convert.js.map +1 -0
  29. package/dist/history-import-cli.d.ts +1 -7
  30. package/dist/history-import-cli.d.ts.map +1 -1
  31. package/dist/history-import-cli.js +4 -44
  32. package/dist/history-import-cli.js.map +1 -1
  33. package/dist/history-import-validation.d.ts +8 -0
  34. package/dist/history-import-validation.d.ts.map +1 -0
  35. package/dist/history-import-validation.js +85 -0
  36. package/dist/history-import-validation.js.map +1 -0
  37. package/dist/history-import.d.ts +8 -1
  38. package/dist/history-import.d.ts.map +1 -1
  39. package/dist/history-import.js +27 -6
  40. package/dist/history-import.js.map +1 -1
  41. package/dist/history-migrate-cli.d.ts +3 -0
  42. package/dist/history-migrate-cli.d.ts.map +1 -0
  43. package/dist/history-migrate-cli.js +260 -0
  44. package/dist/history-migrate-cli.js.map +1 -0
  45. package/dist/history-polls.d.ts +4 -0
  46. package/dist/history-polls.d.ts.map +1 -0
  47. package/dist/history-polls.js +66 -0
  48. package/dist/history-polls.js.map +1 -0
  49. package/dist/index.d.ts +3 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/managed-media.d.ts +10 -0
  54. package/dist/managed-media.d.ts.map +1 -1
  55. package/dist/managed-media.js +2 -0
  56. package/dist/managed-media.js.map +1 -1
  57. package/dist/messaging-media.d.ts +16 -0
  58. package/dist/messaging-media.d.ts.map +1 -1
  59. package/dist/messaging-media.js +19 -0
  60. package/dist/messaging-media.js.map +1 -1
  61. package/dist/messaging.d.ts.map +1 -1
  62. package/dist/messaging.js +6 -1
  63. package/dist/messaging.js.map +1 -1
  64. package/dist/messenger-example.json +1 -1
  65. package/dist/messenger-install.d.ts +1 -1
  66. package/dist/push.d.ts.map +1 -1
  67. package/dist/push.js +1 -0
  68. package/dist/push.js.map +1 -1
  69. package/dist/types.d.ts +56 -3
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/webhooks.d.ts.map +1 -1
  72. package/dist/webhooks.js +10 -0
  73. package/dist/webhooks.js.map +1 -1
  74. package/package.json +2 -1
@@ -1,3 +1,5 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { validateHistoryImportFile } from './history-import-validation.js';
1
3
  import { RobonoError } from './errors.js';
2
4
  import { RobonoManagedMedia } from './managed-media.js';
3
5
  const uuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
@@ -52,16 +54,35 @@ export class RobonoHistoryImport {
52
54
  }
53
55
  /** Retry this whole operation with the same job/source IDs after interruption. */
54
56
  async importMessages(input) {
55
- if (!input.messages.length || input.messages.length > 10000 || new Set(input.messages.map(m => m.sourceId)).size !== input.messages.length)
56
- throw Error('Import 1–10,000 messages with unique source IDs.');
57
- const started = await this.start({ jobId: input.jobId, conversationId: input.conversationId, authors: input.authors, count: input.messages.length });
57
+ validateHistoryImportFile(input);
58
+ const inputDigest = createHash('sha256').update(JSON.stringify(input.messages)).digest('hex');
59
+ const started = await this.start({ jobId: input.jobId, conversationId: input.conversationId, authors: input.authors, count: input.messages.length, inputDigest });
58
60
  if (started.state === 'complete')
59
61
  return started;
60
62
  if (started.state !== 'staging')
61
63
  throw Error('This import is no longer active.');
62
- for (let offset = 0; offset < input.messages.length; offset += 20) {
63
- await this.append(input.jobId, input.messages.slice(offset, offset + 20).map((message, index) => ({ ...message, ordinal: offset + index })));
64
- input.onProgress?.(Math.min(offset + 20, input.messages.length), input.messages.length);
64
+ const resume = started.inputDigest === inputDigest ? started.stagedCount ?? 0 : 0;
65
+ if (!Number.isSafeInteger(resume) || resume < 0 || resume > input.messages.length)
66
+ throw Error('Invalid import progress from the service.');
67
+ input.onProgress?.(resume, input.messages.length);
68
+ // The service stages a batch before screening it. Recheck the last batch after
69
+ // interruption so an accepted stage is never mistaken for completed screening.
70
+ for (let offset = Math.max(0, resume - 20); offset < input.messages.length;) {
71
+ const batch = [];
72
+ let bytes = 0;
73
+ while (offset + batch.length < input.messages.length && batch.length < 20) {
74
+ const message = { ...input.messages[offset + batch.length], ordinal: offset + batch.length };
75
+ const size = Buffer.byteLength(JSON.stringify(message));
76
+ if (size > 1048576)
77
+ throw Error('An imported message exceeds the batch size limit.');
78
+ if (batch.length && bytes + size > 1048576)
79
+ break;
80
+ batch.push(message);
81
+ bytes += size;
82
+ }
83
+ await this.append(input.jobId, batch);
84
+ offset += batch.length;
85
+ input.onProgress?.(offset, input.messages.length);
65
86
  }
66
87
  return this.commit(input.jobId);
67
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"history-import.js","sourceRoot":"","sources":["../src/history-import.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history-import.js","sourceRoot":"","sources":["../src/history-import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function runHistoryMigration(args: string[], env?: NodeJS.ProcessEnv, log?: (s: string) => void, fetcher?: typeof fetch): Promise<void>;
3
+ //# sourceMappingURL=history-migrate-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-migrate-cli.d.ts","sourceRoot":"","sources":["../src/history-migrate-cli.ts"],"names":[],"mappings":";AAmCA,wBAAsB,mBAAmB,CAAC,IAAI,EAAC,MAAM,EAAE,EAAC,GAAG,GAAC,MAAM,CAAC,UAAsB,EAAC,GAAG,GAAC,CAAC,CAAC,EAAC,MAAM,KAAG,IAAgB,EAAC,OAAO,CAAC,EAAC,OAAO,KAAK,iBAoF/I"}
@@ -0,0 +1,260 @@
1
+ #!/usr/bin/env node
2
+ import { constants } from 'node:fs';
3
+ import { open, mkdir, lstat, rename, unlink } from 'node:fs/promises';
4
+ import { join, resolve, dirname, isAbsolute } from 'node:path';
5
+ import { pathToFileURL } from 'node:url';
6
+ import { createHash, randomUUID } from 'node:crypto';
7
+ import { isDeepStrictEqual } from 'node:util';
8
+ import { convertHistory } from './history-convert.js';
9
+ import { validateHistoryImportFile } from './history-import-validation.js';
10
+ import { RobonoHistoryImport } from './history-import.js';
11
+ import { RobonoError } from './errors.js';
12
+ async function readAttachment(root, name, expected) {
13
+ if (typeof name !== 'string' || !name || isAbsolute(name) || name.includes('\\') || name.split('/').some(p => !p || p === '.' || p === '..'))
14
+ throw Error('Attachment paths must stay inside the folder beside the mapping file.');
15
+ let path = root;
16
+ for (const part of name.split('/')) {
17
+ path = join(path, part);
18
+ if ((await lstat(path)).isSymbolicLink())
19
+ throw Error('Linked attachment paths are not accepted.');
20
+ }
21
+ const h = await open(path, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
22
+ try {
23
+ const stat = await h.stat();
24
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size < 1 || stat.size > 104857600)
25
+ throw Error('Each attachment must be a regular file of 1–100 MiB.');
26
+ const bytes = await h.readFile();
27
+ if (bytes.length !== stat.size || expected && (bytes.length !== expected.byteSize || createHash('sha256').update(bytes).digest('hex') !== expected.sha256))
28
+ throw Error('An attachment changed. Restore the original private migration files.');
29
+ return bytes;
30
+ }
31
+ finally {
32
+ await h.close();
33
+ }
34
+ }
35
+ async function readJson(file, jsonl = false) {
36
+ const handle = await open(file, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
37
+ try {
38
+ const stat = await handle.stat();
39
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size > 268435456)
40
+ throw Error('Use a regular JSON/JSONL file of at most 256 MiB.');
41
+ const text = await handle.readFile('utf8');
42
+ try {
43
+ return JSON.parse(text);
44
+ }
45
+ catch {
46
+ if (jsonl) {
47
+ try {
48
+ return text.split(/\r?\n/).filter(line => line.trim()).map(line => JSON.parse(line));
49
+ }
50
+ catch { }
51
+ }
52
+ throw Error('Invalid JSON/JSONL file.');
53
+ }
54
+ }
55
+ finally {
56
+ await handle.close();
57
+ }
58
+ }
59
+ async function save(folder, name, value) {
60
+ const temporary = join(folder, '.save-' + randomUUID());
61
+ const h = await open(temporary, 'wx', 0o600);
62
+ try {
63
+ await h.writeFile(JSON.stringify(value, null, 2) + '\n');
64
+ await h.sync();
65
+ }
66
+ finally {
67
+ await h.close();
68
+ }
69
+ await rename(temporary, join(folder, name));
70
+ if (process.platform !== 'win32') {
71
+ const d = await open(folder, 'r');
72
+ try {
73
+ await d.sync();
74
+ }
75
+ finally {
76
+ await d.close();
77
+ }
78
+ }
79
+ }
80
+ export async function runHistoryMigration(args, env = process.env, log = console.log, fetcher) {
81
+ if (args.length === 1 && args[0] === '--help') {
82
+ log('Prepare locally: robono-history-migrate --provider sendbird|stream --source export.json --mapping mapping.json --out new-private-folder\nApply/resume: robono-history-migrate --apply folder\nInspect plan.json and report.json first. Mapping supplies authorized conversation IDs and authenticated user IDs. Conversion needs no credentials. Applying requires ROBONO_API_KEY on your server.');
83
+ return;
84
+ }
85
+ const options = new Map();
86
+ for (let i = 0; i < args.length; i += 2) {
87
+ const key = args[i], value = args[i + 1];
88
+ if (!key || !['--provider', '--source', '--mapping', '--out', '--apply'].includes(key) || !value || value.startsWith('--') || options.has(key))
89
+ throw Error('Invalid migration options. Use --help.');
90
+ options.set(key, value);
91
+ }
92
+ if (!options.has('--apply')) {
93
+ if (options.size !== 4 || !options.has('--out') || !options.has('--source') || !options.has('--mapping') || !['sendbird', 'stream'].includes(options.get('--provider') ?? ''))
94
+ throw Error('Supply --provider, --source, --mapping and --out.');
95
+ const plan = convertHistory(options.get('--provider'), await readJson(options.get('--source'), true), await readJson(options.get('--mapping')));
96
+ const folder = resolve(options.get('--out'));
97
+ await mkdir(folder, { mode: 0o700 });
98
+ if (plan.attachments?.length) {
99
+ await mkdir(join(folder, 'files'), { mode: 0o700 });
100
+ let total = 0;
101
+ for (const attachment of plan.attachments) {
102
+ const bytes = await readAttachment(dirname(resolve(options.get('--mapping'))), attachment.path);
103
+ total += bytes.length;
104
+ if (total > 536870912)
105
+ throw Error('Prepared attachment files exceed 512 MiB. Split the source by conversations.');
106
+ attachment.path = 'files/' + attachment.uploadId + '.bin';
107
+ attachment.sha256 = createHash('sha256').update(bytes).digest('hex');
108
+ attachment.file.byteSize = bytes.length;
109
+ const h = await open(join(folder, attachment.path), 'wx', 0o600);
110
+ try {
111
+ await h.writeFile(bytes);
112
+ await h.sync();
113
+ }
114
+ finally {
115
+ await h.close();
116
+ }
117
+ const message = plan.conversations.find(c => c.conversationId === attachment.conversationId)?.messages.find(m => m.sourceId === attachment.sourceId);
118
+ if (!message?.content.media)
119
+ throw Error('Invalid attachment reference.');
120
+ message.content.media.byteSize = bytes.length;
121
+ }
122
+ }
123
+ await save(folder, 'plan.json', plan);
124
+ await save(folder, 'report.json', { version: 1, ready: plan.issues.length === 0 && plan.conversations.length > 0, conversations: plan.conversations.length, messages: plan.conversations.reduce((n, c) => n + c.messages.length, 0), issues: plan.issues, notices: plan.notices ?? [] });
125
+ log(`Prepared ${plan.conversations.length} conversations. ${plan.issues.length} items need attention; ${plan.notices?.length ?? 0} conversion notes; see the private report.json. Nothing sent.`);
126
+ return;
127
+ }
128
+ if (options.size !== 1)
129
+ throw Error('--apply takes only the previously prepared folder.');
130
+ const key = env.ROBONO_API_KEY;
131
+ if (!key)
132
+ throw Error('Set ROBONO_API_KEY privately on your server.');
133
+ const folder = resolve(options.get('--apply')), stat = await lstat(folder);
134
+ if (!stat.isDirectory() || stat.isSymbolicLink() || process.platform !== 'win32' && (stat.mode & 0o077) !== 0)
135
+ throw Error('Use the private migration folder created by this command.');
136
+ const lockPath = join(folder, '.migration.lock');
137
+ let lock;
138
+ try {
139
+ lock = await open(lockPath, 'wx', 0o600);
140
+ }
141
+ catch {
142
+ throw Error('Migration is locked. If an earlier process crashed, confirm it stopped before removing .migration.lock.');
143
+ }
144
+ try {
145
+ await lock.writeFile(JSON.stringify({ pid: process.pid }));
146
+ const plan = await readJson(join(folder, 'plan.json'));
147
+ if (plan.version !== 1 || !Array.isArray(plan.conversations) || !plan.conversations.length || plan.conversations.length > 10000 || !Array.isArray(plan.issues) || plan.issues.length)
148
+ throw Error('Resolve the conversion report before applying. No history has been sent.');
149
+ const destinations = new Set(), jobs = new Set();
150
+ for (const conversation of plan.conversations) {
151
+ validateHistoryImportFile(conversation);
152
+ if (destinations.has(conversation.conversationId) || jobs.has(conversation.jobId))
153
+ throw Error('Each conversation and job must occur only once.');
154
+ destinations.add(conversation.conversationId);
155
+ jobs.add(conversation.jobId);
156
+ }
157
+ const attachments = plan.attachments ?? [], attachmentTargets = new Set();
158
+ let attachmentBytes = 0;
159
+ if (!Array.isArray(attachments) || attachments.length > 100000)
160
+ throw Error('Invalid migration attachment list.');
161
+ for (const attachment of attachments) {
162
+ const target = JSON.stringify([attachment.conversationId, attachment.sourceId]), message = plan.conversations.find(c => c.conversationId === attachment.conversationId)?.messages.find(m => m.sourceId === attachment.sourceId);
163
+ if (attachmentTargets.has(target) || !message?.content.media || message.content.kind !== attachment.kind || message.content.media.assetId !== 'robono-r2:pending-' + attachment.uploadId || !/^files\/[0-9a-f-]{36}\.bin$/.test(attachment.path) || attachment.path !== 'files/' + attachment.uploadId + '.bin' || !/^[0-9a-f]{64}$/.test(attachment.sha256 ?? '') || !isDeepStrictEqual({ ...message.content.media, assetId: undefined }, { ...attachment.file, assetId: undefined }))
164
+ throw Error('Invalid migration attachment reference.');
165
+ attachmentTargets.add(target);
166
+ const bytes = await readAttachment(folder, attachment.path, { sha256: attachment.sha256, byteSize: attachment.file.byteSize });
167
+ attachmentBytes += bytes.length;
168
+ if (attachmentBytes > 536870912)
169
+ throw Error('Prepared attachment files exceed 512 MiB.');
170
+ }
171
+ for (const c of plan.conversations)
172
+ for (const m of c.messages)
173
+ if (m.content.media?.assetId.startsWith('robono-r2:pending-') && !attachmentTargets.has(JSON.stringify([c.conversationId, m.sourceId])))
174
+ throw Error('A prepared attachment is missing.');
175
+ const digest = createHash('sha256').update(JSON.stringify(plan)).digest('hex');
176
+ let progress = { version: 1, digest, completed: [] };
177
+ try {
178
+ const saved = await readJson(join(folder, 'progress.json'));
179
+ if (saved.version !== 1 || saved.digest !== digest || !Array.isArray(saved.completed) || saved.completed.some((v) => typeof v !== 'string' || !jobs.has(v)))
180
+ throw Error('The migration plan changed after applying. Restore the original plan before resuming.');
181
+ progress = saved;
182
+ }
183
+ catch (error) {
184
+ if (error.code !== 'ENOENT')
185
+ throw error;
186
+ }
187
+ await save(folder, 'progress.json', progress);
188
+ const importer = new RobonoHistoryImport({ apiKey: key, ...(fetcher ? { fetch: fetcher } : {}) });
189
+ for (const [index, conversation] of plan.conversations.entries()) {
190
+ // Always confirm completed jobs with the service; a local report is not proof of import.
191
+ for (let attempt = 0;; attempt++)
192
+ try {
193
+ const selected = attachments.filter(a => a.conversationId === conversation.conversationId);
194
+ let prepared = structuredClone(conversation);
195
+ if (selected.length) {
196
+ let resolved = false;
197
+ try {
198
+ const saved = await readJson(join(folder, 'resolved-' + conversation.jobId + '.json'));
199
+ if (saved.digest !== digest)
200
+ throw Error('The migration attachment checkpoint changed.');
201
+ validateHistoryImportFile(saved.conversation);
202
+ const expected = structuredClone(conversation), savedMessages = new Map(saved.conversation.messages.map((m) => [m.sourceId, m]));
203
+ for (const attachment of selected) {
204
+ const original = expected.messages.find(m => m.sourceId === attachment.sourceId), restored = savedMessages.get(attachment.sourceId);
205
+ if (!restored?.content.media || !restored.content.media.assetId.startsWith('robono-r2:') || restored.content.media.assetId.startsWith('robono-r2:pending-') || !isDeepStrictEqual({ ...restored.content.media, assetId: undefined }, { ...attachment.file, assetId: undefined }))
206
+ throw Error('Invalid attachment checkpoint.');
207
+ original.content.media = restored.content.media;
208
+ }
209
+ if (!isDeepStrictEqual(expected, saved.conversation))
210
+ throw Error('Invalid attachment checkpoint.');
211
+ prepared = saved.conversation;
212
+ resolved = true;
213
+ }
214
+ catch (error) {
215
+ if (error.code !== 'ENOENT')
216
+ throw error;
217
+ }
218
+ if (!resolved) {
219
+ const status = await importer.start({ jobId: conversation.jobId, conversationId: conversation.conversationId, authors: conversation.authors, count: conversation.messages.length });
220
+ if (status.state !== 'staging')
221
+ throw Error('Restore the original migration attachment checkpoint before resuming.');
222
+ for (const attachment of selected) {
223
+ const message = prepared.messages.find(m => m.sourceId === attachment.sourceId);
224
+ const bytes = await readAttachment(folder, attachment.path, { sha256: attachment.sha256, byteSize: attachment.file.byteSize });
225
+ message.content.media = await importer.upload({ jobId: conversation.jobId, conversationId: conversation.conversationId, authorId: message.authorId, uploadId: attachment.uploadId, kind: attachment.kind, file: attachment.file, bytes });
226
+ }
227
+ await save(folder, 'resolved-' + conversation.jobId + '.json', { digest, conversation: prepared });
228
+ }
229
+ }
230
+ const result = await importer.importMessages({ ...prepared, onProgress: (done, total) => log(`Conversation ${index + 1}/${plan.conversations.length}: ${done}/${total} prepared.`) });
231
+ if (result.state !== 'complete')
232
+ throw Error('Import did not complete.');
233
+ if (!progress.completed.includes(conversation.jobId))
234
+ progress.completed.push(conversation.jobId);
235
+ delete progress.failed;
236
+ await save(folder, 'progress.json', progress);
237
+ break;
238
+ }
239
+ catch (error) {
240
+ if (attempt < 8 && (error instanceof TypeError || error instanceof RobonoError && error.retryable)) {
241
+ log('Waiting for a connection or attachment check. Retrying this conversation.');
242
+ await new Promise(r => setTimeout(r, Math.min(15000, 1000 * 2 ** attempt)));
243
+ continue;
244
+ }
245
+ const code = error instanceof RobonoError && /^[a-z_]{1,80}$/.test(error.code) ? error.code : 'import_failed';
246
+ progress.failed = { jobId: conversation.jobId, code };
247
+ await save(folder, 'progress.json', progress);
248
+ throw Error(`Conversation ${index + 1} stopped (${code}). Earlier completed conversations are saved. Rerun the same command after resolving the cause.`);
249
+ }
250
+ }
251
+ log(`Migration complete: ${progress.completed.length} conversations. Keep this folder private for recovery.`);
252
+ }
253
+ finally {
254
+ await lock.close();
255
+ await unlink(lockPath);
256
+ }
257
+ }
258
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href)
259
+ runHistoryMigration(process.argv.slice(2)).catch(error => { console.error(error instanceof Error ? error.message : 'Migration failed.'); process.exitCode = 1; });
260
+ //# sourceMappingURL=history-migrate-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-migrate-cli.js","sourceRoot":"","sources":["../src/history-migrate-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { HistoryImportMessage } from './history-import.js';
2
+ /** Consume complete provider exports. Counts are checks, never invented voters. */
3
+ export declare function convertImportedPoll(provider: 'sendbird' | 'stream', p: any, exportedVotes: any[] | undefined, user: (v: any) => string | null): Pick<HistoryImportMessage, 'content' | 'interactions'>;
4
+ //# sourceMappingURL=history-polls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-polls.d.ts","sourceRoot":"","sources":["../src/history-polls.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,qBAAqB,CAAC;AAG9D,mFAAmF;AACnF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAC,UAAU,GAAC,QAAQ,EAAC,CAAC,EAAC,GAAG,EAAC,aAAa,EAAC,GAAG,EAAE,GAAC,SAAS,EAAC,IAAI,EAAC,CAAC,CAAC,EAAC,GAAG,KAAG,MAAM,GAAC,IAAI,GAAE,IAAI,CAAC,oBAAoB,EAAC,SAAS,GAAC,cAAc,CAAC,CA8BlL"}
@@ -0,0 +1,66 @@
1
+ import { validatePoll } from './generated/interactions.js';
2
+ const key = (v) => typeof v === 'string' || typeof v === 'number' ? String(v) : null;
3
+ const object = (v) => v && typeof v === 'object' && !Array.isArray(v);
4
+ /** Consume complete provider exports. Counts are checks, never invented voters. */
5
+ export function convertImportedPoll(provider, p, exportedVotes, user) {
6
+ const fail = (code) => { throw Error(code); };
7
+ if (!object(p) || !Array.isArray(p.options))
8
+ fail('poll_requires_complete_options_and_votes');
9
+ const closed = provider === 'sendbird' ? p.status === 'closed' : p.is_closed === true;
10
+ if (p.voting_visibility === 'anonymous' || p.is_anonymous === true)
11
+ fail('anonymous_poll_not_supported');
12
+ if (p.status === 'removed')
13
+ fail('removed_poll_not_supported');
14
+ if (!closed && (p.allow_user_suggestion || p.allow_user_suggested_options || p.allow_answers || provider === 'sendbird' && p.close_at > 0))
15
+ fail('poll_behavior_requires_mapping');
16
+ if (p.description || p.data && p.data !== '' && JSON.stringify(p.data) !== '{}')
17
+ fail('poll_custom_data_requires_mapping');
18
+ const multiple = provider === 'sendbird' ? p.allow_multiple_votes === true : p.enforce_unique_vote !== true && p.max_votes_allowed !== 1;
19
+ if (!closed && multiple && p.max_votes_allowed && p.max_votes_allowed < p.options.length)
20
+ fail('poll_vote_limit_requires_mapping');
21
+ const optionIds = p.options.map((o) => key(o?.id));
22
+ if (optionIds.some((v) => !v) || new Set(optionIds).size !== optionIds.length)
23
+ fail('invalid_poll_options');
24
+ let poll;
25
+ try {
26
+ poll = validatePoll({ question: provider === 'sendbird' ? p.title : p.name, options: p.options.map((o) => o.text), multiple });
27
+ }
28
+ catch {
29
+ fail('poll_limits_require_mapping');
30
+ }
31
+ const votes = new Map();
32
+ function add(rawUser, option) { const who = user(rawUser), index = optionIds.indexOf(key(option)); if (!who || index < 0)
33
+ throw Error('poll_vote_mapping_required'); const choices = votes.get(who) ?? []; if (choices.includes(index))
34
+ fail('duplicate_poll_vote'); choices.push(index); votes.set(who, choices); }
35
+ if (provider === 'sendbird') {
36
+ p.options.forEach((o) => {
37
+ const list = o.voters ?? o.partial_voter_list ?? [];
38
+ if (!Array.isArray(list) || !Number.isSafeInteger(o.vote_count) || o.vote_count !== list.length || o.next)
39
+ fail('complete_poll_voters_required');
40
+ for (const v of list)
41
+ add(v.user_id, o.id);
42
+ });
43
+ if (!Number.isSafeInteger(p.voter_count) || p.voter_count !== votes.size)
44
+ fail('complete_poll_voters_required');
45
+ }
46
+ else {
47
+ const list = exportedVotes ?? p.votes ?? (p.vote_count === 0 ? [] : undefined);
48
+ if (!Array.isArray(list))
49
+ fail('complete_poll_voters_required');
50
+ if (p.vote_count !== undefined && (!Number.isSafeInteger(p.vote_count) || p.vote_count !== list.length))
51
+ fail('complete_poll_voters_required');
52
+ for (const v of list) {
53
+ if (v.is_answer || v.answer_text || v.poll_id !== undefined && key(v.poll_id) !== key(p.id))
54
+ fail('poll_vote_mapping_required');
55
+ add(v.user_id ?? v.user, v.option_id);
56
+ }
57
+ if (object(p.vote_counts_by_option))
58
+ for (const [id, count] of Object.entries(p.vote_counts_by_option))
59
+ if (count !== [...votes.values()].filter(indices => indices.includes(optionIds.indexOf(id))).length)
60
+ fail('complete_poll_voters_required');
61
+ }
62
+ if (votes.size > 2000 || [...votes.values()].some(v => !multiple && v.length > 1))
63
+ fail('poll_limits_require_mapping');
64
+ return { content: { kind: 'poll', poll: poll }, interactions: { closed, votes: [...votes].map(([userId, options]) => ({ userId, options: options.sort((a, b) => a - b) })) } };
65
+ }
66
+ //# sourceMappingURL=history-polls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-polls.js","sourceRoot":"","sources":["../src/history-polls.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { RobonoServer } from "./client.js";
2
2
  export { RobonoCallingBackend } from './calling.js';
3
- export type { RobonoCallingBackendOptions, CallingRelationshipInput, CallingRelationshipResult, CallingSession } from './calling.js';
3
+ export type { RobonoCallingBackendOptions, CallingRelationshipInput, CallingRelationshipResult, CallingSession, CallingRecording } from './calling.js';
4
4
  export { createRobonoBackendAdapter } from "./adapter.js";
5
5
  export type { RobonoAuthorizationAction, RobonoAuthorizationContext, RobonoBackendAdapterOptions, } from "./adapter.js";
6
6
  export { RobonoAuthenticationError, RobonoError, RobonoWebhookError, } from "./errors.js";
@@ -35,5 +35,7 @@ export { RobonoHistoryImport } from './history-import.js';
35
35
  export { RobonoHistoryExport } from './history-export.js';
36
36
  export type { HistoryExportAttachment, HistoryExportSelection, HistoryExportCursor, HistoryExportStatus, HistoryExportPage, HistoryExportRecord } from './history-export.js';
37
37
  export type { HistoryImportMessage, HistoryImportStatus } from './history-import.js';
38
+ export { convertHistory } from './history-convert.js';
39
+ export type { HistoryMigrationMapping, HistoryMigrationPlan, HistoryConversionIssue } from './history-convert.js';
38
40
  export type { CustomMessageContent, MessageDataValue } from './generated/custom-messages.js';
39
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACrI,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtE,mBAAmB,YAAY,CAAC;AAEhC,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AACvF,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEpF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AACxE,YAAY,EAAC,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAC1J,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AACjF,YAAY,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACtD,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAC,2BAA2B,EAAC,KAAK,qBAAqB,EAAC,MAAM,gBAAgB,CAAC;AACtF,YAAY,EAAC,4BAA4B,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAEjF,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AAErD,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAC/C,YAAY,EAAC,aAAa,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAC,yBAAyB,EAAC,KAAK,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAC,+BAA+B,EAAC,+BAA+B,EAAC,MAAM,qBAAqB,CAAC;AAGpG,OAAO,EAAC,4BAA4B,EAAC,mCAAmC,EAAC,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAC,0BAA0B,EAAC,KAAK,qBAAqB,EAAC,KAAK,uBAAuB,EAAC,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAC,cAAc,EAAC,wBAAwB,EAAC,KAAK,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAEtG,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAC,uBAAuB,EAAC,sBAAsB,EAAC,mBAAmB,EAAC,mBAAmB,EAAC,iBAAiB,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACtK,YAAY,EAAC,oBAAoB,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAElF,YAAY,EAAC,oBAAoB,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -23,4 +23,5 @@ export { RobonoMessengerConnections } from './messenger-connections.js';
23
23
  export { RobonoSessions, createRobonoTokenHandler } from './hosted-sessions.js';
24
24
  export { RobonoHistoryImport } from './history-import.js';
25
25
  export { RobonoHistoryExport } from './history-export.js';
26
+ export { convertHistory } from './history-convert.js';
26
27
  //# 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,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAM1D,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGvF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAC,2BAA2B,EAA4B,MAAM,gBAAgB,CAAC;AAGtF,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AAErD,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAC,yBAAyB,EAA0B,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAC,+BAA+B,EAAC,+BAA+B,EAAC,MAAM,qBAAqB,CAAC;AAGpG,OAAO,EAAC,4BAA4B,EAAC,mCAAmC,EAAC,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAC,0BAA0B,EAAyD,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAC,cAAc,EAAC,wBAAwB,EAA0B,MAAM,sBAAsB,CAAC;AAEtG,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAM1D,OAAO,EACL,yBAAyB,EACzB,WAAW,EACX,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGvF,OAAO,EAAC,kCAAkC,EAAC,MAAM,sBAAsB,CAAC;AAExE,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAC,sCAAsC,EAAC,MAAM,2BAA2B,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,4BAA4B,EAAC,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAC,yBAAyB,EAAC,MAAM,oBAAoB,CAAC;AAE7D,OAAO,EAAC,2BAA2B,EAA4B,MAAM,gBAAgB,CAAC;AAGtF,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AAErD,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAC,yBAAyB,EAA0B,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAC,+BAA+B,EAAC,+BAA+B,EAAC,MAAM,qBAAqB,CAAC;AAGpG,OAAO,EAAC,4BAA4B,EAAC,mCAAmC,EAAC,MAAM,uBAAuB,CAAC;AAEvG,OAAO,EAAC,0BAA0B,EAAyD,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAC,cAAc,EAAC,wBAAwB,EAA0B,MAAM,sBAAsB,CAAC;AAEtG,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC"}
@@ -10,6 +10,16 @@ export declare class RobonoManagedMedia implements MessagingPrivateStorage {
10
10
  importJobId?: string;
11
11
  });
12
12
  private request;
13
+ authorizePrepare(input: Parameters<MessagingPrivateStorage['prepare']>[0]): Promise<{
14
+ url: string;
15
+ headers?: Record<string, string>;
16
+ } | {
17
+ media: MessagingStoredMedia;
18
+ }>;
19
+ authorizeComplete(input: Parameters<MessagingPrivateStorage['complete']>[0]): Promise<{
20
+ kind: import("./messaging-media.js").MessagingMediaKind;
21
+ media: MessagingStoredMedia;
22
+ }>;
13
23
  prepare(input: Parameters<MessagingPrivateStorage['prepare']>[0]): ReturnType<MessagingPrivateStorage['prepare']>;
14
24
  complete(input: Parameters<MessagingPrivateStorage['complete']>[0]): ReturnType<MessagingPrivateStorage['complete']>;
15
25
  download(input: Parameters<MessagingPrivateStorage['download']>[0]): ReturnType<MessagingPrivateStorage['download']>;
@@ -1 +1 @@
1
- {"version":3,"file":"managed-media.d.ts","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACvF,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,uBAAuB;IAErD,OAAO,CAAC,OAAO;IAD3B,OAAO,CAAC,GAAG,CAAQ;gBACC,OAAO,EAAC;QAAC,MAAM,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC;QAAA,KAAK,CAAC,EAAC,OAAO,KAAK,CAAC,CAAA,iDAAiD;QAAA,WAAW,CAAC,EAAC,MAAM,CAAA;KAAC;YAKtI,OAAO;IAOrB,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACzG,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAKxH,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAClH,iBAAiB,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC;IAChK,SAAS,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,GAAC,IAAI,CAAC;IACvJ,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC,oBAAoB,GAAC,IAAI,CAAC;CAG7G"}
1
+ {"version":3,"file":"managed-media.d.ts","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,uBAAuB,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AACvF,yFAAyF;AACzF,qBAAa,kBAAmB,YAAW,uBAAuB;IAErD,OAAO,CAAC,OAAO;IAD3B,OAAO,CAAC,GAAG,CAAQ;gBACC,OAAO,EAAC;QAAC,MAAM,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC;QAAA,KAAK,CAAC,EAAC,OAAO,KAAK,CAAC,CAAA,iDAAiD;QAAA,WAAW,CAAC,EAAC,MAAM,CAAA;KAAC;YAKtI,OAAO;IAOrB,gBAAgB,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;IACxE,iBAAiB,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;;;IAC1E,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACzG,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAKxH,QAAQ,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAE,UAAU,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAClH,iBAAiB,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,CAAC;IAChK,SAAS,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC;QAAC,GAAG,EAAC,MAAM,CAAC;QAAA,OAAO,CAAC,EAAC,MAAM,CAAC,MAAM,EAAC,MAAM,CAAC,CAAC;QAAA,KAAK,EAAC,oBAAoB,CAAA;KAAC,GAAC,IAAI,CAAC;IACvJ,OAAO,CAAC,KAAK,EAAC,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,KAAK,EAAC;QAAC,OAAO,EAAC,MAAM,CAAC;QAAA,cAAc,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,GAAE,OAAO,CAAC,oBAAoB,GAAC,IAAI,CAAC;CAG7G"}
@@ -19,6 +19,8 @@ export class RobonoManagedMedia {
19
19
  throw new RobonoError(data?.error?.message ?? 'Attachment request failed.', { status: response.status, code: data?.error?.code ?? 'media_unavailable', retryable: response.status === 429 || response.status >= 500 });
20
20
  return data;
21
21
  }
22
+ authorizePrepare(input) { return this.prepare(input); }
23
+ authorizeComplete(input) { return this.complete(input); }
22
24
  prepare(input) { return this.request('prepare', input); }
23
25
  async complete(input) {
24
26
  const result = await this.request('complete', input);
@@ -1 +1 @@
1
- {"version":3,"file":"managed-media.js","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"managed-media.js","sourceRoot":"","sources":["../src/managed-media.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,22 @@ export interface MessagingStorageContext {
19
19
  conversationId: string;
20
20
  }
21
21
  export interface MessagingPrivateStorage {
22
+ /** Optional combined operations. MUST enforce current membership, blocks, kind,
23
+ * file policy and upload ownership in the same service request. Do not implement
24
+ * these by trusting client metadata or previously cached permissions. */
25
+ authorizePrepare?(input: MessagingStorageContext & {
26
+ kind: MessagingMediaKind;
27
+ file: MessagingUploadFile;
28
+ }): Promise<{
29
+ url: string;
30
+ headers?: Record<string, string>;
31
+ } | {
32
+ media: MessagingStoredMedia;
33
+ }>;
34
+ authorizeComplete?(input: MessagingStorageContext): Promise<{
35
+ kind: MessagingMediaKind;
36
+ media: MessagingStoredMedia;
37
+ }>;
22
38
  /** Optional authorized, bounded JPEG preview; never return original video/image bytes. */
23
39
  thumbnail?(input: {
24
40
  actorId: string;