@dbx-tools/teams 0.3.44 → 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
+ /**
2
+ * The Teams runtime: a lazily-resolved, process-wide config shared by the
3
+ * plugin and the `create_teams_card` tool, so both read one resolved card
4
+ * version / webhook set. The first caller (normally the plugin at setup)
5
+ * primes it from the plugin's config; later callers (the tool's `execute`)
6
+ * reuse it.
7
+ *
8
+ * The runtime also carries the {@link TeamsExecutor} every operation runs
9
+ * through. The plugin installs its own `execute()` there at setup, which is how
10
+ * the tool - a plain function with no plugin instance in scope - still gets
11
+ * AppKit's cache / retry / timeout / telemetry chain. Without a registered
12
+ * plugin (a direct call from a script or a test) the operations still run, just
13
+ * without interceptors.
14
+ *
15
+ * Like the web-search runtime and unlike the email one, there is no connection
16
+ * pool to hold - card building is in-process and a webhook post is a stateless
17
+ * HTTP call - so the runtime holds only the resolved config and that executor.
18
+ *
19
+ * @module
20
+ */
21
+ import { AppKitError, ExecutionError } from "@databricks/appkit";
22
+ import { async, error, log } from "@dbx-tools/shared-core";
23
+ import { buildCardResult } from "./builder.js";
24
+ import { resolveTeamsConfig } from "./config.js";
25
+ import { TEAMS_BUILD_SETTINGS, TEAMS_POST_SETTINGS } from "./defaults.js";
26
+ const logger = log.logger("teams/runtime");
27
+ /**
28
+ * Executor used until (or unless) the plugin installs its own: run the call
29
+ * directly, mapping a throw onto the same {@link ExecutionResult} shape so
30
+ * call sites branch on `ok` either way.
31
+ */
32
+ const directExecute = async (fn) => {
33
+ try {
34
+ return { ok: true, data: await fn() };
35
+ }
36
+ catch (err) {
37
+ return {
38
+ ok: false,
39
+ status: err instanceof AppKitError ? err.statusCode : 500,
40
+ message: error.errorMessage(err),
41
+ };
42
+ }
43
+ };
44
+ let runtime;
45
+ /**
46
+ * Return the shared runtime, building it on first use from the supplied config
47
+ * layered over environment defaults. Overrides are only read when the runtime
48
+ * is first created, so prime it from the plugin's config at setup; subsequent
49
+ * calls (the tool's `execute`) pass nothing and get the same instance.
50
+ */
51
+ export function getTeamsRuntime(overrides) {
52
+ if (!runtime) {
53
+ runtime = { config: resolveTeamsConfig(overrides), execute: directExecute };
54
+ }
55
+ return runtime;
56
+ }
57
+ /**
58
+ * Install the executor operations run through. The plugin calls this at setup
59
+ * with its own `execute()`; a second call replaces the previous one, so a
60
+ * re-registered plugin does not leave the tool bound to a dead instance.
61
+ */
62
+ export function setTeamsExecutor(execute) {
63
+ getTeamsRuntime().execute = execute;
64
+ }
65
+ /** Drop the memoized runtime so the next {@link getTeamsRuntime} rebuilds it. */
66
+ export function resetTeamsRuntime() {
67
+ runtime = undefined;
68
+ }
69
+ /**
70
+ * Run one operation through the shared executor and unwrap it.
71
+ *
72
+ * `execute()` never throws, so a failed call arrives as `{ ok: false }` with a
73
+ * status the interceptors already sanitized; it is logged here and re-raised as
74
+ * a stable {@link ExecutionError} so an upstream message never becomes the
75
+ * caller's error text.
76
+ */
77
+ async function run(operation, settings, fn, signal) {
78
+ const { execute } = getTeamsRuntime();
79
+ const result = await execute((executeSignal) => fn(async.combineAbortSignals(executeSignal, signal)), settings);
80
+ if (result.ok)
81
+ return result.data;
82
+ if (signal?.aborted)
83
+ throw ExecutionError.canceled();
84
+ logger.warn("execution-failed", {
85
+ operation,
86
+ status: result.status,
87
+ error: result.message,
88
+ });
89
+ throw new ExecutionError(`teams: ${operation} failed`, {
90
+ context: { operation, status: result.status },
91
+ });
92
+ }
93
+ /**
94
+ * Compile a card spec into an Adaptive Card document, stamped with the runtime's
95
+ * resolved card version. Runs through the shared executor so a build picks up
96
+ * the app's telemetry / timeout chain.
97
+ */
98
+ export async function buildCard(spec, signal) {
99
+ const { config } = getTeamsRuntime();
100
+ return run("build", TEAMS_BUILD_SETTINGS, async () => {
101
+ const result = buildCardResult(spec);
102
+ result.card.version = config.cardVersion;
103
+ return result;
104
+ }, signal);
105
+ }
106
+ /**
107
+ * POST a compiled Adaptive Card to the configured Teams incoming webhook,
108
+ * wrapped in the `MessageCard` attachment envelope Teams expects. Throws when
109
+ * no webhook is configured, so a caller that reaches here without one gets a
110
+ * clear error rather than a silent no-op.
111
+ */
112
+ export async function postCard(cardDocument, signal) {
113
+ const { config } = getTeamsRuntime();
114
+ const webhookUrl = config.webhookUrl;
115
+ if (!webhookUrl) {
116
+ throw new ExecutionError("teams: no webhook configured", {
117
+ context: { operation: "post" },
118
+ });
119
+ }
120
+ await run("post", TEAMS_POST_SETTINGS, async (executeSignal) => {
121
+ const body = {
122
+ type: "message",
123
+ attachments: [
124
+ {
125
+ contentType: "application/vnd.microsoft.card.adaptive",
126
+ content: cardDocument,
127
+ },
128
+ ],
129
+ };
130
+ const response = await fetch(webhookUrl, {
131
+ method: "POST",
132
+ headers: { "content-type": "application/json" },
133
+ body: JSON.stringify(body),
134
+ ...(executeSignal ? { signal: executeSignal } : {}),
135
+ });
136
+ if (!response.ok) {
137
+ throw new ExecutionError(`teams: webhook responded ${response.status}`, {
138
+ context: { operation: "post", status: response.status },
139
+ });
140
+ }
141
+ }, signal);
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBRUgsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDdkYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQW9ELE1BQU0sVUFBVSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBK0IsTUFBTSxZQUFZLENBQUM7QUFFcEcsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQWtCM0M7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFrQixLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUU7SUFDaEQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE9BQU87WUFDTCxFQUFFLEVBQUUsS0FBSztZQUNULE1BQU0sRUFBRSxHQUFHLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ3pELE9BQU8sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztTQUNqQyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFB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QUcsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3ZDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQixHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3BELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLGNBQWMsQ0FBQyw0QkFBNEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUN0RSxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFO2FBQ3hELENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLEVBQ0QsTUFBTSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgVGVhbXMgcnVudGltZTogYSBsYXppbHktcmVzb2x2ZWQsIHByb2Nlc3Mtd2lkZSBjb25maWcgc2hhcmVkIGJ5IHRoZVxuICogcGx1Z2luIGFuZCB0aGUgYGNyZWF0ZV90ZWFtc19jYXJkYCB0b29sLCBzbyBib3RoIHJlYWQgb25lIHJlc29sdmVkIGNhcmRcbiAqIHZlcnNpb24gLyB3ZWJob29rIHNldC4gVGhlIGZpcnN0IGNhbGxlciAobm9ybWFsbHkgdGhlIHBsdWdpbiBhdCBzZXR1cClcbiAqIHByaW1lcyBpdCBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWc7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgKVxuICogcmV1c2UgaXQuXG4gKlxuICogVGhlIHJ1bnRpbWUgYWxzbyBjYXJyaWVzIHRoZSB7QGxpbmsgVGVhbXNFeGVjdXRvcn0gZXZlcnkgb3BlcmF0aW9uIHJ1bnNcbiAqIHRocm91Z2guIFRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93biBgZXhlY3V0ZSgpYCB0aGVyZSBhdCBzZXR1cCwgd2hpY2ggaXMgaG93XG4gKiB0aGUgdG9vbCAtIGEgcGxhaW4gZnVuY3Rpb24gd2l0aCBubyBwbHVnaW4gaW5zdGFuY2UgaW4gc2NvcGUgLSBzdGlsbCBnZXRzXG4gKiBBcHBLaXQncyBjYWNoZSAvIHJldHJ5IC8gdGltZW91dCAvIHRlbGVtZXRyeSBjaGFpbi4gV2l0aG91dCBhIHJlZ2lzdGVyZWRcbiAqIHBsdWdpbiAoYSBkaXJlY3QgY2FsbCBmcm9tIGEgc2NyaXB0IG9yIGEgdGVzdCkgdGhlIG9wZXJhdGlvbnMgc3RpbGwgcnVuLCBqdXN0XG4gKiB3aXRob3V0IGludGVyY2VwdG9ycy5cbiAqXG4gKiBMaWtlIHRoZSB3ZWItc2VhcmNoIHJ1bnRpbWUgYW5kIHVubGlrZSB0aGUgZW1haWwgb25lLCB0aGVyZSBpcyBubyBjb25uZWN0aW9uXG4gKiBwb29sIHRvIGhvbGQgLSBjYXJkIGJ1aWxkaW5nIGlzIGluLXByb2Nlc3MgYW5kIGEgd2ViaG9vayBwb3N0IGlzIGEgc3RhdGVsZXNzXG4gKiBIVFRQIGNhbGwgLSBzbyB0aGUgcnVudGltZSBob2xkcyBvbmx5IHRoZSByZXNvbHZlZCBjb25maWcgYW5kIHRoYXQgZXhlY3V0b3IuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IEFwcEtpdEVycm9yLCBFeGVjdXRpb25FcnJvciwgdHlwZSBFeGVjdXRpb25SZXN1bHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBhc3luYywgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBjYXJkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgeyBidWlsZENhcmRSZXN1bHQgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlVGVhbXNDb25maWcsIHR5cGUgUmVzb2x2ZWRUZWFtc0NvbmZpZywgdHlwZSBUZWFtc1BsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHsgVEVBTVNfQlVJTERfU0VUVElOR1MsIFRFQU1TX1BPU1RfU0VUVElOR1MsIHR5cGUgVGVhbXNFeGVjdXRpb25TZXR0aW5ncyB9IGZyb20gXCIuL2RlZmF1bHRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtcy9ydW50aW1lXCIpO1xuXG4vKipcbiAqIFJ1bnMgb25lIG9wZXJhdGlvbiB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgVGVhbXNFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG4pID0+IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PFQ+PjtcblxuLyoqIFRoZSBzaGFyZWQgcmVzb2x2ZWQgY29uZmlnIHBsdXMgdGhlIGV4ZWN1dG9yIG9wZXJhdGlvbnMgcnVuIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFRlYW1zUnVudGltZSB7XG4gIGNvbmZpZzogUmVzb2x2ZWRUZWFtc0NvbmZpZztcbiAgZXhlY3V0ZTogVGVhbXNFeGVjdXRvcjtcbn1cblxuLyoqXG4gKiBFeGVjdXRvciB1c2VkIHVudGlsIChvciB1bmxlc3MpIHRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93bjogcnVuIHRoZSBjYWxsXG4gKiBkaXJlY3RseSwgbWFwcGluZyBhIHRocm93IG9udG8gdGhlIHNhbWUge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gc2hhcGUgc29cbiAqIGNhbGwgc2l0ZXMgYnJhbmNoIG9uIGBva2AgZWl0aGVyIHdheS5cbiAqL1xuY29uc3QgZGlyZWN0RXhlY3V0ZTogVGVhbXNFeGVjdXRvciA9IGFzeW5jIChmbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCBkYXRhOiBhd2FpdCBmbigpIH07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB7XG4gICAgICBvazogZmFsc2UsXG4gICAgICBzdGF0dXM6IGVyciBpbnN0YW5jZW9mIEFwcEtpdEVycm9yID8gZXJyLnN0YXR1c0NvZGUgOiA1MDAsXG4gICAgICBtZXNzYWdlOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9O1xuICB9XG59O1xuXG5sZXQgcnVudGltZTogVGVhbXNSdW50aW1lIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFJldHVybiB0aGUgc2hhcmVkIHJ1bnRpbWUsIGJ1aWxkaW5nIGl0IG9uIGZpcnN0IHVzZSBmcm9tIHRoZSBzdXBwbGllZCBjb25maWdcbiAqIGxheWVyZWQgb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cy4gT3ZlcnJpZGVzIGFyZSBvbmx5IHJlYWQgd2hlbiB0aGUgcnVudGltZVxuICogaXMgZmlyc3QgY3JlYXRlZCwgc28gcHJpbWUgaXQgZnJvbSB0aGUgcGx1Z2luJ3MgY29uZmlnIGF0IHNldHVwOyBzdWJzZXF1ZW50XG4gKiBjYWxscyAodGhlIHRvb2wncyBgZXhlY3V0ZWApIHBhc3Mgbm90aGluZyBhbmQgZ2V0IHRoZSBzYW1lIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVhbXNSdW50aW1lKG92ZXJyaWRlcz86IFRlYW1zUGx1Z2luQ29uZmlnKTogVGVhbXNSdW50aW1lIHtcbiAgaWYgKCFydW50aW1lKSB7XG4gICAgcnVudGltZSA9IHsgY29uZmlnOiByZXNvbHZlVGVhbXNDb25maWcob3ZlcnJpZGVzKSwgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSB9O1xuICB9XG4gIHJldHVybiBydW50aW1lO1xufVxuXG4vKipcbiAqIEluc3RhbGwgdGhlIGV4ZWN1dG9yIG9wZXJhdGlvbnMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdCBzZXR1cFxuICogd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvIGFcbiAqIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29sIGJvdW5kIHRvIGEgZGVhZCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRlYW1zRXhlY3V0b3IoZXhlY3V0ZTogVGVhbXNFeGVjdXRvcik6IHZvaWQge1xuICBnZXRUZWFtc1J1bnRpbWUoKS5leGVjdXRlID0gZXhlY3V0ZTtcbn1cblxuLyoqIERyb3AgdGhlIG1lbW9pemVkIHJ1bnRpbWUgc28gdGhlIG5leHQge0BsaW5rIGdldFRlYW1zUnVudGltZX0gcmVidWlsZHMgaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRUZWFtc1J1bnRpbWUoKTogdm9pZCB7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBvcGVyYXRpb24gdGhyb3VnaCB0aGUgc2hhcmVkIGV4ZWN1dG9yIGFuZCB1bndyYXAgaXQuXG4gKlxuICogYGV4ZWN1dGUoKWAgbmV2ZXIgdGhyb3dzLCBzbyBhIGZhaWxlZCBjYWxsIGFycml2ZXMgYXMgYHsgb2s6IGZhbHNlIH1gIHdpdGggYVxuICogc3RhdHVzIHRoZSBpbnRlcmNlcHRvcnMgYWxyZWFkeSBzYW5pdGl6ZWQ7IGl0IGlzIGxvZ2dlZCBoZXJlIGFuZCByZS1yYWlzZWQgYXNcbiAqIGEgc3RhYmxlIHtAbGluayBFeGVjdXRpb25FcnJvcn0gc28gYW4gdXBzdHJlYW0gbWVzc2FnZSBuZXZlciBiZWNvbWVzIHRoZVxuICogY2FsbGVyJ3MgZXJyb3IgdGV4dC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuPFQ+KFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgc2V0dGluZ3M6IFRlYW1zRXhlY3V0aW9uU2V0dGluZ3MsXG4gIGZuOiAoc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHsgZXhlY3V0ZSB9ID0gZ2V0VGVhbXNSdW50aW1lKCk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGUoXG4gICAgKGV4ZWN1dGVTaWduYWwpID0+IGZuKGFzeW5jLmNvbWJpbmVBYm9ydFNpZ25hbHMoZXhlY3V0ZVNpZ25hbCwgc2lnbmFsKSksXG4gICAgc2V0dGluZ3MsXG4gICk7XG4gIGlmIChyZXN1bHQub2spIHJldHVybiByZXN1bHQuZGF0YTtcbiAgaWYgKHNpZ25hbD8uYWJvcnRlZCkgdGhyb3cgRXhlY3V0aW9uRXJyb3IuY2FuY2VsZWQoKTtcbiAgbG9nZ2VyLndhcm4oXCJleGVjdXRpb24tZmFpbGVkXCIsIHtcbiAgICBvcGVyYXRpb24sXG4gICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgIGVycm9yOiByZXN1bHQubWVzc2FnZSxcbiAgfSk7XG4gIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihgdGVhbXM6ICR7b3BlcmF0aW9ufSBmYWlsZWRgLCB7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb24sIHN0YXR1czogcmVzdWx0LnN0YXR1cyB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBDb21waWxlIGEgY2FyZCBzcGVjIGludG8gYW4gQWRhcHRpdmUgQ2FyZCBkb2N1bWVudCwgc3RhbXBlZCB3aXRoIHRoZSBydW50aW1lJ3NcbiAqIHJlc29sdmVkIGNhcmQgdmVyc2lvbi4gUnVucyB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3Igc28gYSBidWlsZCBwaWNrcyB1cFxuICogdGhlIGFwcCdzIHRlbGVtZXRyeSAvIHRpbWVvdXQgY2hhaW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENhcmQoXG4gIHNwZWM6IGNhcmQuQ2FyZFNwZWMsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxjYXJkLkNhcmRSZXN1bHQ+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICByZXR1cm4gcnVuKFxuICAgIFwiYnVpbGRcIixcbiAgICBURUFNU19CVUlMRF9TRVRUSU5HUyxcbiAgICBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBidWlsZENhcmRSZXN1bHQoc3BlYyk7XG4gICAgICByZXN1bHQuY2FyZC52ZXJzaW9uID0gY29uZmlnLmNhcmRWZXJzaW9uO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cblxuLyoqXG4gKiBQT1NUIGEgY29tcGlsZWQgQWRhcHRpdmUgQ2FyZCB0byB0aGUgY29uZmlndXJlZCBUZWFtcyBpbmNvbWluZyB3ZWJob29rLFxuICogd3JhcHBlZCBpbiB0aGUgYE1lc3NhZ2VDYXJkYCBhdHRhY2htZW50IGVudmVsb3BlIFRlYW1zIGV4cGVjdHMuIFRocm93cyB3aGVuXG4gKiBubyB3ZWJob29rIGlzIGNvbmZpZ3VyZWQsIHNvIGEgY2FsbGVyIHRoYXQgcmVhY2hlcyBoZXJlIHdpdGhvdXQgb25lIGdldHMgYVxuICogY2xlYXIgZXJyb3IgcmF0aGVyIHRoYW4gYSBzaWxlbnQgbm8tb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwb3N0Q2FyZChcbiAgY2FyZERvY3VtZW50OiBjYXJkLkFkYXB0aXZlQ2FyZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSgpO1xuICBjb25zdCB3ZWJob29rVXJsID0gY29uZmlnLndlYmhvb2tVcmw7XG4gIGlmICghd2ViaG9va1VybCkge1xuICAgIHRocm93IG5ldyBFeGVjdXRpb25FcnJvcihcInRlYW1zOiBubyB3ZWJob29rIGNvbmZpZ3VyZWRcIiwge1xuICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwicG9zdFwiIH0sXG4gICAgfSk7XG4gIH1cbiAgYXdhaXQgcnVuKFxuICAgIFwicG9zdFwiLFxuICAgIFRFQU1TX1BPU1RfU0VUVElOR1MsXG4gICAgYXN5bmMgKGV4ZWN1dGVTaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgIHR5cGU6IFwibWVzc2FnZVwiLFxuICAgICAgICBhdHRhY2htZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQuY2FyZC5hZGFwdGl2ZVwiLFxuICAgICAgICAgICAgY29udGVudDogY2FyZERvY3VtZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh3ZWJob29rVXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYm9keSksXG4gICAgICAgIC4uLihleGVjdXRlU2lnbmFsID8geyBzaWduYWw6IGV4ZWN1dGVTaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXhlY3V0aW9uRXJyb3IoYHRlYW1zOiB3ZWJob29rIHJlc3BvbmRlZCAke3Jlc3BvbnNlLnN0YXR1c31gLCB7XG4gICAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IFwicG9zdFwiLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,67 @@
1
+ /**
2
+ * The `create_teams_card` Mastra tool: a model describes a card in the small
3
+ * {@link card.CardSpec} vocabulary and gets back a compiled Adaptive Card
4
+ * document. Unlike `send_email`, building a card is a pure, side-effect-free
5
+ * transform - nothing leaves the building - so it is NOT approval-gated: the
6
+ * card is data the app then decides what to do with (render it in a preview,
7
+ * post it to a Teams incoming webhook, attach it to a bot reply).
8
+ *
9
+ * The build runs through the executor the plugin installs on the shared
10
+ * runtime, so a build from this tool picks up the same telemetry / timeout
11
+ * chain as one from the AppKit tool. In a Mastra app with no AppKit plugin
12
+ * registered the build still runs, just without interceptors.
13
+ *
14
+ * @module
15
+ */
16
+ /**
17
+ * The model-facing description of the card-building capability, shared by the
18
+ * Mastra {@link teamsCardTool} and the AppKit `teams.createCard` tool so both
19
+ * agents get the same guidance about the vocabulary and when to reach for it.
20
+ */
21
+ export declare const CREATE_CARD_DESCRIPTION: string;
22
+ /** Options accepted by {@link teamsCardTool}. */
23
+ export interface TeamsCardToolOptions {
24
+ /**
25
+ * Override the tool id. Defaults to `"create_teams_card"`. A UI that renders
26
+ * the returned card keys off this id, so keep it unless you also teach the
27
+ * client about the new name.
28
+ */
29
+ id?: string;
30
+ }
31
+ /**
32
+ * Build the `create_teams_card` tool. Spread it into the agents that should be
33
+ * able to produce Teams cards.
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * import { teamsCardTool } from "@dbx-tools/teams";
38
+ * import { createAgent } from "@dbx-tools/appkit-mastra";
39
+ *
40
+ * const support = createAgent({
41
+ * instructions: "...",
42
+ * tools: () => ({ create_teams_card: teamsCardTool() }),
43
+ * });
44
+ * ```
45
+ */
46
+ export declare function teamsCardTool(opts?: TeamsCardToolOptions): import("@mastra/core/tools").Tool<{
47
+ title: string;
48
+ subtitle?: string | undefined;
49
+ text?: string | undefined;
50
+ facts?: {
51
+ title: string;
52
+ value: string;
53
+ }[] | undefined;
54
+ actions?: {
55
+ title: string;
56
+ url: string;
57
+ }[] | undefined;
58
+ }, {
59
+ title: string;
60
+ card: {
61
+ type: "AdaptiveCard";
62
+ $schema: string;
63
+ version: string;
64
+ body: Record<string, unknown>[];
65
+ actions?: Record<string, unknown>[] | undefined;
66
+ };
67
+ }, unknown, unknown, import("@mastra/core/tools").ToolExecutionContext<unknown, unknown, unknown>, string, unknown>;
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The `create_teams_card` Mastra tool: a model describes a card in the small
3
+ * {@link card.CardSpec} vocabulary and gets back a compiled Adaptive Card
4
+ * document. Unlike `send_email`, building a card is a pure, side-effect-free
5
+ * transform - nothing leaves the building - so it is NOT approval-gated: the
6
+ * card is data the app then decides what to do with (render it in a preview,
7
+ * post it to a Teams incoming webhook, attach it to a bot reply).
8
+ *
9
+ * The build runs through the executor the plugin installs on the shared
10
+ * runtime, so a build from this tool picks up the same telemetry / timeout
11
+ * chain as one from the AppKit tool. In a Mastra app with no AppKit plugin
12
+ * registered the build still runs, just without interceptors.
13
+ *
14
+ * @module
15
+ */
16
+ import { log, string } from "@dbx-tools/shared-core";
17
+ import { card } from "@dbx-tools/shared-teams";
18
+ import { createTool } from "@mastra/core/tools";
19
+ import { buildCard } from "./runtime.js";
20
+ const logger = log.logger("teams/tool/create-card");
21
+ /**
22
+ * The model-facing description of the card-building capability, shared by the
23
+ * Mastra {@link teamsCardTool} and the AppKit `teams.createCard` tool so both
24
+ * agents get the same guidance about the vocabulary and when to reach for it.
25
+ */
26
+ export const CREATE_CARD_DESCRIPTION = string.toDescription(`
27
+ Build a Microsoft Teams Adaptive Card from a short structured description.
28
+ Provide a title, an optional subtitle and body text, an optional list of
29
+ key/value facts, and optional link buttons; the tool returns a compiled
30
+ Adaptive Card document (Adaptive Card 1.5) ready to render or post to Teams.
31
+ Use it when the user asks to summarize a status, result, or record as a Teams
32
+ card / message card, or to prepare something to post to a channel. Keep body
33
+ text to the Teams Markdown subset - **bold**, _italic_, links, and '-'
34
+ bullet lists - and put tabular key/value detail in the 'facts' array, not in
35
+ the text. Do NOT hand-author raw Adaptive Card JSON; describe the card and
36
+ this tool compiles the valid document.
37
+ `);
38
+ /**
39
+ * Build the `create_teams_card` tool. Spread it into the agents that should be
40
+ * able to produce Teams cards.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * import { teamsCardTool } from "@dbx-tools/teams";
45
+ * import { createAgent } from "@dbx-tools/appkit-mastra";
46
+ *
47
+ * const support = createAgent({
48
+ * instructions: "...",
49
+ * tools: () => ({ create_teams_card: teamsCardTool() }),
50
+ * });
51
+ * ```
52
+ */
53
+ export function teamsCardTool(opts = {}) {
54
+ return createTool({
55
+ id: opts.id ?? "create_teams_card",
56
+ description: CREATE_CARD_DESCRIPTION,
57
+ inputSchema: card.cardSpecSchema,
58
+ outputSchema: card.cardResultSchema,
59
+ execute: async (input, context) => {
60
+ const spec = card.cardSpecSchema.parse(input);
61
+ const result = await buildCard(spec, context?.abortSignal);
62
+ logger.info("built", {
63
+ title: result.title,
64
+ elements: result.card.body.length,
65
+ actions: result.card.actions?.length ?? 0,
66
+ });
67
+ return result;
68
+ },
69
+ });
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFdEMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRXBEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7OztDQVczRCxDQUFDLENBQUM7QUFZSDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsT0FBNkIsRUFBRTtJQUMzRCxPQUFPLFVBQVUsQ0FBQztRQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxtQkFBbUI7UUFDbEMsV0FBVyxFQUFFLHVCQUF1QjtRQUNwQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDaEMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7UUFDbkMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDbkIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDakMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO2FBQzFDLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgYGNyZWF0ZV90ZWFtc19jYXJkYCBNYXN0cmEgdG9vbDogYSBtb2RlbCBkZXNjcmliZXMgYSBjYXJkIGluIHRoZSBzbWFsbFxuICoge0BsaW5rIGNhcmQuQ2FyZFNwZWN9IHZvY2FidWxhcnkgYW5kIGdldHMgYmFjayBhIGNvbXBpbGVkIEFkYXB0aXZlIENhcmRcbiAqIGRvY3VtZW50LiBVbmxpa2UgYHNlbmRfZW1haWxgLCBidWlsZGluZyBhIGNhcmQgaXMgYSBwdXJlLCBzaWRlLWVmZmVjdC1mcmVlXG4gKiB0cmFuc2Zvcm0gLSBub3RoaW5nIGxlYXZlcyB0aGUgYnVpbGRpbmcgLSBzbyBpdCBpcyBOT1QgYXBwcm92YWwtZ2F0ZWQ6IHRoZVxuICogY2FyZCBpcyBkYXRhIHRoZSBhcHAgdGhlbiBkZWNpZGVzIHdoYXQgdG8gZG8gd2l0aCAocmVuZGVyIGl0IGluIGEgcHJldmlldyxcbiAqIHBvc3QgaXQgdG8gYSBUZWFtcyBpbmNvbWluZyB3ZWJob29rLCBhdHRhY2ggaXQgdG8gYSBib3QgcmVwbHkpLlxuICpcbiAqIFRoZSBidWlsZCBydW5zIHRocm91Z2ggdGhlIGV4ZWN1dG9yIHRoZSBwbHVnaW4gaW5zdGFsbHMgb24gdGhlIHNoYXJlZFxuICogcnVudGltZSwgc28gYSBidWlsZCBmcm9tIHRoaXMgdG9vbCBwaWNrcyB1cCB0aGUgc2FtZSB0ZWxlbWV0cnkgLyB0aW1lb3V0XG4gKiBjaGFpbiBhcyBvbmUgZnJvbSB0aGUgQXBwS2l0IHRvb2wuIEluIGEgTWFzdHJhIGFwcCB3aXRoIG5vIEFwcEtpdCBwbHVnaW5cbiAqIHJlZ2lzdGVyZWQgdGhlIGJ1aWxkIHN0aWxsIHJ1bnMsIGp1c3Qgd2l0aG91dCBpbnRlcmNlcHRvcnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGxvZywgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNhcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcbmltcG9ydCB7IGNyZWF0ZVRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCI7XG5pbXBvcnQgeyBidWlsZENhcmQgfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtcy90b29sL2NyZWF0ZS1jYXJkXCIpO1xuXG4vKipcbiAqIFRoZSBtb2RlbC1mYWNpbmcgZGVzY3JpcHRpb24gb2YgdGhlIGNhcmQtYnVpbGRpbmcgY2FwYWJpbGl0eSwgc2hhcmVkIGJ5IHRoZVxuICogTWFzdHJhIHtAbGluayB0ZWFtc0NhcmRUb29sfSBhbmQgdGhlIEFwcEtpdCBgdGVhbXMuY3JlYXRlQ2FyZGAgdG9vbCBzbyBib3RoXG4gKiBhZ2VudHMgZ2V0IHRoZSBzYW1lIGd1aWRhbmNlIGFib3V0IHRoZSB2b2NhYnVsYXJ5IGFuZCB3aGVuIHRvIHJlYWNoIGZvciBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IENSRUFURV9DQVJEX0RFU0NSSVBUSU9OID0gc3RyaW5nLnRvRGVzY3JpcHRpb24oYFxuICBCdWlsZCBhIE1pY3Jvc29mdCBUZWFtcyBBZGFwdGl2ZSBDYXJkIGZyb20gYSBzaG9ydCBzdHJ1Y3R1cmVkIGRlc2NyaXB0aW9uLlxuICBQcm92aWRlIGEgdGl0bGUsIGFuIG9wdGlvbmFsIHN1YnRpdGxlIGFuZCBib2R5IHRleHQsIGFuIG9wdGlvbmFsIGxpc3Qgb2ZcbiAga2V5L3ZhbHVlIGZhY3RzLCBhbmQgb3B0aW9uYWwgbGluayBidXR0b25zOyB0aGUgdG9vbCByZXR1cm5zIGEgY29tcGlsZWRcbiAgQWRhcHRpdmUgQ2FyZCBkb2N1bWVudCAoQWRhcHRpdmUgQ2FyZCAxLjUpIHJlYWR5IHRvIHJlbmRlciBvciBwb3N0IHRvIFRlYW1zLlxuICBVc2UgaXQgd2hlbiB0aGUgdXNlciBhc2tzIHRvIHN1bW1hcml6ZSBhIHN0YXR1cywgcmVzdWx0LCBvciByZWNvcmQgYXMgYSBUZWFtc1xuICBjYXJkIC8gbWVzc2FnZSBjYXJkLCBvciB0byBwcmVwYXJlIHNvbWV0aGluZyB0byBwb3N0IHRvIGEgY2hhbm5lbC4gS2VlcCBib2R5XG4gIHRleHQgdG8gdGhlIFRlYW1zIE1hcmtkb3duIHN1YnNldCAtICoqYm9sZCoqLCBfaXRhbGljXywgbGlua3MsIGFuZCAnLSdcbiAgYnVsbGV0IGxpc3RzIC0gYW5kIHB1dCB0YWJ1bGFyIGtleS92YWx1ZSBkZXRhaWwgaW4gdGhlICdmYWN0cycgYXJyYXksIG5vdCBpblxuICB0aGUgdGV4dC4gRG8gTk9UIGhhbmQtYXV0aG9yIHJhdyBBZGFwdGl2ZSBDYXJkIEpTT047IGRlc2NyaWJlIHRoZSBjYXJkIGFuZFxuICB0aGlzIHRvb2wgY29tcGlsZXMgdGhlIHZhbGlkIGRvY3VtZW50LlxuYCk7XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHtAbGluayB0ZWFtc0NhcmRUb29sfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVhbXNDYXJkVG9vbE9wdGlvbnMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRvb2wgaWQuIERlZmF1bHRzIHRvIGBcImNyZWF0ZV90ZWFtc19jYXJkXCJgLiBBIFVJIHRoYXQgcmVuZGVyc1xuICAgKiB0aGUgcmV0dXJuZWQgY2FyZCBrZXlzIG9mZiB0aGlzIGlkLCBzbyBrZWVwIGl0IHVubGVzcyB5b3UgYWxzbyB0ZWFjaCB0aGVcbiAgICogY2xpZW50IGFib3V0IHRoZSBuZXcgbmFtZS5cbiAgICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBgY3JlYXRlX3RlYW1zX2NhcmRgIHRvb2wuIFNwcmVhZCBpdCBpbnRvIHRoZSBhZ2VudHMgdGhhdCBzaG91bGQgYmVcbiAqIGFibGUgdG8gcHJvZHVjZSBUZWFtcyBjYXJkcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHRlYW1zQ2FyZFRvb2wgfSBmcm9tIFwiQGRieC10b29scy90ZWFtc1wiO1xuICogaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3Qgc3VwcG9ydCA9IGNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgY3JlYXRlX3RlYW1zX2NhcmQ6IHRlYW1zQ2FyZFRvb2woKSB9KSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0ZWFtc0NhcmRUb29sKG9wdHM6IFRlYW1zQ2FyZFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRzLmlkID8/IFwiY3JlYXRlX3RlYW1zX2NhcmRcIixcbiAgICBkZXNjcmlwdGlvbjogQ1JFQVRFX0NBUkRfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IGNhcmQuY2FyZFNwZWNTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBjYXJkLmNhcmRSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzcGVjID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBidWlsZENhcmQoc3BlYywgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJidWlsdFwiLCB7XG4gICAgICAgIHRpdGxlOiByZXN1bHQudGl0bGUsXG4gICAgICAgIGVsZW1lbnRzOiByZXN1bHQuY2FyZC5ib2R5Lmxlbmd0aCxcbiAgICAgICAgYWN0aW9uczogcmVzdWx0LmNhcmQuYWN0aW9ucz8ubGVuZ3RoID8/IDAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1 @@
1
+ {"root":["../src/auth.ts","../src/builder.ts","../src/config.ts","../src/connector.ts","../src/conversation.ts","../src/defaults.ts","../src/messaging.ts","../src/plugin.ts","../src/runtime.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -17,24 +17,28 @@
17
17
  "@mastra/core": "^1.47.0",
18
18
  "jose": "^6.2.3",
19
19
  "zod": "4.3.6",
20
- "@dbx-tools/shared-core": "0.3.44",
21
- "@dbx-tools/shared-teams": "0.3.44"
20
+ "@dbx-tools/shared-core": "0.4.0",
21
+ "@dbx-tools/shared-teams": "0.4.0"
22
22
  },
23
- "main": "index.ts",
23
+ "main": "./lib/index.js",
24
24
  "license": "UNLICENSED",
25
25
  "publishConfig": {
26
26
  "access": "public"
27
27
  },
28
- "version": "0.3.44",
29
- "types": "index.ts",
28
+ "version": "0.4.0",
29
+ "types": "./lib/index.d.ts",
30
30
  "type": "module",
31
31
  "exports": {
32
- ".": "./index.ts",
32
+ ".": {
33
+ "types": "./lib/index.d.ts",
34
+ "default": "./lib/index.js"
35
+ },
33
36
  "./package.json": "./package.json"
34
37
  },
35
38
  "files": [
36
39
  "index.ts",
37
- "src"
40
+ "src",
41
+ "lib"
38
42
  ],
39
43
  "dbxToolsConfig": {
40
44
  "tags": [