@agentworkforce/sage 1.2.1 → 1.2.2
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.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +23 -9
- package/dist/integrations/cloud-proxy-provider.d.ts +2 -0
- package/dist/integrations/cloud-proxy-provider.d.ts.map +1 -1
- package/dist/integrations/cloud-proxy-provider.js +2 -0
- package/dist/integrations/slack-egress.d.ts +2 -0
- package/dist/integrations/slack-egress.d.ts.map +1 -1
- package/dist/integrations/slack-egress.js +26 -4
- package/package.json +1 -1
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA0C5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwB/C,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;CACzB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA0C5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAwB/C,UAAU,YAAY;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,KAAK,MAAM,GAAG;IACZ,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,YAAY,CAAC;CACzB,CAAC;AAkwCF,wBAAgB,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,CAoiB5C"}
|
package/dist/app.js
CHANGED
|
@@ -700,7 +700,10 @@ async function processSlackEvent(event, workspaceId, env, slack, options = {}) {
|
|
|
700
700
|
ttlSeconds: ACTIVE_THREAD_TTL_SECONDS,
|
|
701
701
|
});
|
|
702
702
|
const workspaceSlackBotUserId = options.slackBotUserId ?? await detectSlackBotUserId(slack);
|
|
703
|
-
|
|
703
|
+
// Use the cloud workspace UUID for cross-provider lookups (GitHub, Linear,
|
|
704
|
+
// etc.) instead of the Slack team id.
|
|
705
|
+
const cloudWorkspaceId = options.cloudWorkspaceId ?? slack.getResolvedWorkspaceId() ?? workspaceId;
|
|
706
|
+
const { connectionId: githubConnectionId, providerConfigKey: githubProviderConfigKey, } = await resolveGitHubConnection(cloudWorkspaceId, env);
|
|
704
707
|
const relayfileReader = await getRelayFileReader(workspaceId, env);
|
|
705
708
|
const github = githubConnectionId && githubProviderConfigKey
|
|
706
709
|
? new GitHubIntegration({
|
|
@@ -854,9 +857,10 @@ function readCachedSlackBotUserId(workspaceId) {
|
|
|
854
857
|
}
|
|
855
858
|
return entry.userId; // may be undefined (previous fetch failed) — still cached
|
|
856
859
|
}
|
|
857
|
-
function writeCachedSlackBotUserId(workspaceId, userId) {
|
|
860
|
+
function writeCachedSlackBotUserId(workspaceId, userId, cloudWorkspaceId) {
|
|
858
861
|
slackBotUserIdCache.set(workspaceId, {
|
|
859
862
|
userId,
|
|
863
|
+
cloudWorkspaceId,
|
|
860
864
|
expiresAt: Date.now() + SLACK_BOT_USER_ID_CACHE_TTL_MS,
|
|
861
865
|
});
|
|
862
866
|
return userId;
|
|
@@ -865,18 +869,27 @@ async function resolveWorkspaceSlackContext(workspaceId, provider) {
|
|
|
865
869
|
const slack = createSlackEgress(provider, workspaceId);
|
|
866
870
|
// Cache hit = skip the auth.test round trip entirely. Important for
|
|
867
871
|
// hot webhook paths where every saved ms compounds under retry storms.
|
|
868
|
-
|
|
869
|
-
|
|
872
|
+
// Only use the cache when cloudWorkspaceId was actually resolved; an
|
|
873
|
+
// undefined value means a prior call never received the UUID (e.g.
|
|
874
|
+
// staggered proxy rollout or transient response), so we re-resolve.
|
|
875
|
+
const cachedEntry = slackBotUserIdCache.get(workspaceId);
|
|
876
|
+
if (cachedEntry && cachedEntry.expiresAt > Date.now() && cachedEntry.cloudWorkspaceId !== undefined) {
|
|
870
877
|
return {
|
|
871
878
|
workspaceId,
|
|
879
|
+
cloudWorkspaceId: cachedEntry.cloudWorkspaceId,
|
|
872
880
|
slack,
|
|
873
|
-
...(
|
|
881
|
+
...(cachedEntry.userId !== undefined ? { slackBotUserId: cachedEntry.userId } : {}),
|
|
874
882
|
};
|
|
875
883
|
}
|
|
884
|
+
if (cachedEntry) {
|
|
885
|
+
slackBotUserIdCache.delete(workspaceId);
|
|
886
|
+
}
|
|
876
887
|
const userId = await detectSlackBotUserId(slack);
|
|
877
|
-
|
|
888
|
+
const resolvedCloudId = slack.getResolvedWorkspaceId();
|
|
889
|
+
writeCachedSlackBotUserId(workspaceId, userId, resolvedCloudId);
|
|
878
890
|
return {
|
|
879
891
|
workspaceId,
|
|
892
|
+
cloudWorkspaceId: resolvedCloudId ?? workspaceId,
|
|
880
893
|
slack,
|
|
881
894
|
...(userId !== undefined ? { slackBotUserId: userId } : {}),
|
|
882
895
|
};
|
|
@@ -996,8 +1009,8 @@ export function createSageApp() {
|
|
|
996
1009
|
const cloudProxyProvider = getCloudProxyProvider(c.env);
|
|
997
1010
|
if (pathname === "/follow-ups") {
|
|
998
1011
|
try {
|
|
999
|
-
const { slack } = await resolveWorkspaceSlackContext(workspaceId, cloudProxyProvider);
|
|
1000
|
-
const { connectionId: githubConnectionId, providerConfigKey: githubProviderConfigKey, } = await resolveGitHubConnection(
|
|
1012
|
+
const { slack, cloudWorkspaceId } = await resolveWorkspaceSlackContext(workspaceId, cloudProxyProvider);
|
|
1013
|
+
const { connectionId: githubConnectionId, providerConfigKey: githubProviderConfigKey, } = await resolveGitHubConnection(cloudWorkspaceId, c.env);
|
|
1001
1014
|
const collector = new ProviderConfigAwareEvidenceCollector(getFollowUpEvidenceCollector(), githubProviderConfigKey ?? undefined);
|
|
1002
1015
|
const stats = await checkFollowUps(getMemory(workspaceId), slack, notifyChannel, {
|
|
1003
1016
|
collector,
|
|
@@ -1337,7 +1350,7 @@ export function createSageApp() {
|
|
|
1337
1350
|
await markEventSeen(c.env.DEDUP, deduplicationKey);
|
|
1338
1351
|
const workspaceId = getWorkspaceId(event, c.env);
|
|
1339
1352
|
const cloudProxyProvider = getCloudProxyProvider(c.env);
|
|
1340
|
-
const { slack, slackBotUserId: workspaceSlackBotUserId } = await resolveWorkspaceSlackContext(workspaceId, cloudProxyProvider);
|
|
1353
|
+
const { slack, slackBotUserId: workspaceSlackBotUserId, cloudWorkspaceId } = await resolveWorkspaceSlackContext(workspaceId, cloudProxyProvider);
|
|
1341
1354
|
const threadGate = new SlackThreadGate({
|
|
1342
1355
|
store: createThreadStore(c.env.THREADS),
|
|
1343
1356
|
ttlSeconds: ACTIVE_THREAD_TTL_SECONDS,
|
|
@@ -1388,6 +1401,7 @@ export function createSageApp() {
|
|
|
1388
1401
|
raw: {
|
|
1389
1402
|
run: () => processSlackEvent(event, workspaceId, c.env, slack, {
|
|
1390
1403
|
slackBotUserId: workspaceSlackBotUserId,
|
|
1404
|
+
cloudWorkspaceId,
|
|
1391
1405
|
}),
|
|
1392
1406
|
},
|
|
1393
1407
|
});
|
|
@@ -12,6 +12,8 @@ export interface ProxyResponse<T = unknown> {
|
|
|
12
12
|
status: number;
|
|
13
13
|
headers: ProxyHeaders;
|
|
14
14
|
data: T;
|
|
15
|
+
/** Cloud workspace UUID resolved by the proxy (present when the proxy resolves a Slack team id). */
|
|
16
|
+
resolvedWorkspaceId?: string;
|
|
15
17
|
}
|
|
16
18
|
export interface ConnectionProvider {
|
|
17
19
|
readonly name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-proxy-provider.d.ts","sourceRoot":"","sources":["../../src/integrations/cloud-proxy-provider.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cloud-proxy-provider.d.ts","sourceRoot":"","sources":["../../src/integrations/cloud-proxy-provider.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClD,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,YAAY,CAAC;IACtB,IAAI,EAAE,CAAC,CAAC;IACR,oGAAoG;IACpG,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAwDD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE;CAOjG;AAyBD,qBAAa,kBAAmB,YAAW,kBAAkB;IAC3D,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAK5D,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IA2DpE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAWtC"}
|
|
@@ -54,6 +54,7 @@ function parseEnvelope(payload) {
|
|
|
54
54
|
return {
|
|
55
55
|
ok: true,
|
|
56
56
|
data: ("data" in payload ? payload.data : undefined),
|
|
57
|
+
...(readString(payload.workspaceId) ? { workspaceId: readString(payload.workspaceId) } : {}),
|
|
57
58
|
};
|
|
58
59
|
}
|
|
59
60
|
return {
|
|
@@ -122,6 +123,7 @@ export class CloudProxyProvider {
|
|
|
122
123
|
status: response.status,
|
|
123
124
|
headers: {},
|
|
124
125
|
data: payload.data,
|
|
126
|
+
...(payload.workspaceId ? { resolvedWorkspaceId: payload.workspaceId } : {}),
|
|
125
127
|
};
|
|
126
128
|
}
|
|
127
129
|
async healthCheck() {
|
|
@@ -22,6 +22,8 @@ export interface SlackEgress {
|
|
|
22
22
|
fetchThreadHistory(channel: string, threadTs: string, botUserId?: string): Promise<ThreadMessage[]>;
|
|
23
23
|
getBotUserId(): Promise<string | undefined>;
|
|
24
24
|
getReactions(channel: string, timestamp: string): Promise<SlackReaction[]>;
|
|
25
|
+
/** Cloud workspace UUID resolved from the Slack team id. Available after the first proxy call. */
|
|
26
|
+
getResolvedWorkspaceId(): string | undefined;
|
|
25
27
|
}
|
|
26
28
|
export declare function createSlackEgress(provider: ConnectionProvider, workspaceId: string, overlay?: RecentActionsOverlay): SlackEgress;
|
|
27
29
|
export type { ConnectionProvider } from "./cloud-proxy-provider.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-egress.d.ts","sourceRoot":"","sources":["../../src/integrations/slack-egress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AA4BrB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,IAAI,SAAwB,EAAE,YAAY,CAAC,EAAE,MAAM;CAMjF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1F,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"slack-egress.d.ts","sourceRoot":"","sources":["../../src/integrations/slack-egress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAgB,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AA4BrB,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,IAAI,SAAwB,EAAE,YAAY,CAAC,EAAE,MAAM;CAMjF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1F,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,kBAAkB,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC5B,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5C,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC3E,kGAAkG;IAClG,sBAAsB,IAAI,MAAM,GAAG,SAAS,CAAC;CAC9C;AAqGD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,WAAW,CAgNb;AAED,YAAY,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -81,6 +81,7 @@ export function createSlackEgress(provider, workspaceId, overlay) {
|
|
|
81
81
|
const resolvedWorkspaceId = assertWorkspaceId(workspaceId);
|
|
82
82
|
let cachedBotUserId;
|
|
83
83
|
let botUserIdLoaded = false;
|
|
84
|
+
let cloudWorkspaceId;
|
|
84
85
|
const postMessage = async (channel, text, threadTs) => {
|
|
85
86
|
const body = {
|
|
86
87
|
channel,
|
|
@@ -177,10 +178,31 @@ export function createSlackEgress(provider, workspaceId, overlay) {
|
|
|
177
178
|
if (botUserIdLoaded) {
|
|
178
179
|
return cachedBotUserId;
|
|
179
180
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
181
|
+
try {
|
|
182
|
+
const proxyResponse = await provider.proxy(createProxyRequest(resolvedWorkspaceId, "/auth.test", "POST"));
|
|
183
|
+
if (proxyResponse.resolvedWorkspaceId) {
|
|
184
|
+
cloudWorkspaceId = proxyResponse.resolvedWorkspaceId;
|
|
185
|
+
}
|
|
186
|
+
const data = proxyResponse.data;
|
|
187
|
+
// Restore the Slack-level error check that executeSlackRequest performs.
|
|
188
|
+
// The cloud proxy wraps Slack errors as {ok: true, data: {ok: false, error: "..."}},
|
|
189
|
+
// so we must inspect the inner envelope.
|
|
190
|
+
if (isRecord(data) && data.ok === false) {
|
|
191
|
+
throw new SlackEgressError(asString(data.error) ?? "Slack request failed", asString(data.code) ?? "slack_error", asNumber(data.retryAfterMs));
|
|
192
|
+
}
|
|
193
|
+
if (proxyResponse.status >= 400) {
|
|
194
|
+
throw new SlackEgressError(`Slack request failed with status ${proxyResponse.status}`, `http_${proxyResponse.status}`);
|
|
195
|
+
}
|
|
196
|
+
cachedBotUserId = isRecord(data) ? asString(data.user_id) : undefined;
|
|
197
|
+
botUserIdLoaded = true;
|
|
198
|
+
return cachedBotUserId;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
throw toSlackEgressError(error);
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
getResolvedWorkspaceId() {
|
|
205
|
+
return cloudWorkspaceId;
|
|
184
206
|
},
|
|
185
207
|
async getReactions(channel, timestamp) {
|
|
186
208
|
const response = await executeSlackRequest(provider, createProxyRequest(resolvedWorkspaceId, "/reactions.get", "GET", {
|