@microsoft/teams.apps
Version:
<p> <a href="https://www.npmjs.com/package/@microsoft/teams.apps" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.apps/latest" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.apps?activeTab=code
26 lines • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toThreadedConversationId = toThreadedConversationId;
/**
* Constructs a threaded conversation ID by appending `;messageid={messageId}`
* to the conversation ID.
*
* In a channel, sending to the result posts a thread reply to the message `messageId`.
* `App.reply()` does not use this form: it posts through the `replyChains` endpoint and throws when the service rejects it.
*
* @param conversationId the conversation to thread into (e.g. `19:abc@thread.skype`)
* @param messageId the thread root message ID (must be a non-zero numeric string)
* @returns the threaded conversation ID (e.g. `19:abc@thread.skype;messageid=123`)
*/
function toThreadedConversationId(conversationId, messageId) {
if (!conversationId) {
throw new Error('conversationId must be a non-empty string');
}
if (!messageId || !/^\d+$/.test(messageId) || messageId === '0') {
throw new Error(`Invalid messageId "${messageId}": must be a non-zero numeric value`);
}
// Strip any existing ;messageid= suffix (mirrors the Teams service's conversation-ID normalization)
const baseId = conversationId.split(';')[0];
return `${baseId};messageid=${messageId}`;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3RocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVdBLDREQWNDO0FBekJEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxjQUFzQixFQUFFLFNBQWlCO0lBQ2hGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoRSxNQUFNLElBQUksS0FBSyxDQUNiLHNCQUFzQixTQUFTLHFDQUFxQyxDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUVELG9HQUFvRztJQUNwRyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxNQUFNLGNBQWMsU0FBUyxFQUFFLENBQUM7QUFDNUMsQ0FBQyJ9