




















@@ -37,6 +37,14 @@ type SlackPendingDelivery = {
3737text: string;
3838blocks: SlackBlock[];
3939};
40+type SlackMetadataItem = {
41+label: string;
42+value: string;
43+};
44+type SlackPluginApprovalView =
45+| PluginApprovalPendingView
46+| PluginApprovalResolvedView
47+| PluginApprovalExpiredView;
40484149const SLACK_CONTEXT_ELEMENTS_MAX = 10;
4250const SLACK_CHAT_UPDATE_TEXT_LIMIT = 4000;
@@ -88,15 +96,15 @@ function formatSlackMetadataLine(label: string, value: string): string {
8896return `*${label}:* ${value}`;
8997}
909891-function buildSlackMetadataLines(metadata: readonly { label: string; value: string }[]): string[] {
99+function buildSlackMetadataLines(metadata: readonly SlackMetadataItem[]): string[] {
92100const lines: string[] = [];
93101for (const item of metadata) {
94102lines.push(formatSlackMetadataLine(item.label, item.value));
95103}
96104return lines;
97105}
9810699-function buildSlackMetadataContextElements(metadata: readonly { label: string; value: string }[]) {
107+function buildSlackMetadataContextElements(metadata: readonly SlackMetadataItem[]) {
100108const lines = buildSlackMetadataLines(metadata);
101109const visibleLineCount =
102110lines.length > SLACK_CONTEXT_ELEMENTS_MAX ? SLACK_CONTEXT_ELEMENTS_MAX - 1 : lines.length;
@@ -120,6 +128,18 @@ function buildSlackMetadataContextElements(metadata: readonly { label: string; v
120128return elements;
121129}
122130131+function buildSlackMetadataContextBlocks(metadata: readonly SlackMetadataItem[]): SlackBlock[] {
132+const metadataElements = buildSlackMetadataContextElements(metadata);
133+return metadataElements.length > 0
134+ ? [
135+{
136+type: "context",
137+elements: metadataElements,
138+} satisfies SlackBlock,
139+]
140+ : [];
141+}
142+123143function resolveSlackApprovalDecisionLabel(
124144decision: "allow-once" | "allow-always" | "deny",
125145): string {
@@ -130,18 +150,27 @@ function resolveSlackApprovalDecisionLabel(
130150 : "Denied";
131151}
132152133-function buildSlackPluginMetadata(
134-view: PluginApprovalPendingView | PluginApprovalResolvedView | PluginApprovalExpiredView,
135-): { label: string; value: string }[] {
153+function buildSlackPluginMetadata(view: SlackPluginApprovalView): SlackMetadataItem[] {
136154return [{ label: "Approval ID", value: view.approvalId }, ...view.metadata];
137155}
138156139-function resolveSlackPluginDescription(
140-view: PluginApprovalPendingView | PluginApprovalResolvedView | PluginApprovalExpiredView,
141-): string {
157+function resolveSlackPluginDescription(view: SlackPluginApprovalView): string {
142158return normalizeOptionalString(view.description) ?? "A plugin action needs your approval.";
143159}
144160161+function buildSlackPluginRequestBlocks(view: SlackPluginApprovalView): SlackBlock[] {
162+return [
163+{
164+type: "section",
165+text: {
166+type: "mrkdwn",
167+text: `*Request*\n${truncateSlackMrkdwn(view.title, 2600)}`,
168+},
169+},
170+ ...buildSlackMetadataContextBlocks(buildSlackPluginMetadata(view)),
171+];
172+}
173+145174function buildSlackExecPendingApprovalText(view: ExecApprovalPendingView): string {
146175const metadataLines = buildSlackMetadataLines(view.metadata);
147176const lines = [
@@ -175,7 +204,6 @@ function buildSlackPendingApprovalText(view: PendingApprovalView): string {
175204}
176205177206function buildSlackExecPendingApprovalBlocks(view: ExecApprovalPendingView): SlackBlock[] {
178-const metadataElements = buildSlackMetadataContextElements(view.metadata);
179207const interactiveBlocks =
180208resolveSlackReplyBlocks({
181209text: "",
@@ -196,20 +224,12 @@ function buildSlackExecPendingApprovalBlocks(view: ExecApprovalPendingView): Sla
196224text: `*Command*\n${buildSlackCodeBlock(truncateSlackMrkdwn(view.commandText, 2600))}`,
197225},
198226},
199- ...(metadataElements.length > 0
200- ? [
201-{
202-type: "context",
203-elements: metadataElements,
204-} satisfies SlackBlock,
205-]
206- : []),
227+ ...buildSlackMetadataContextBlocks(view.metadata),
207228 ...interactiveBlocks,
208229];
209230}
210231211232function buildSlackPluginPendingApprovalBlocks(view: PluginApprovalPendingView): SlackBlock[] {
212-const metadataElements = buildSlackMetadataContextElements(buildSlackPluginMetadata(view));
213233const interactiveBlocks =
214234resolveSlackReplyBlocks({
215235text: "",
@@ -226,21 +246,7 @@ function buildSlackPluginPendingApprovalBlocks(view: PluginApprovalPendingView):
226246 )}`,
227247},
228248},
229-{
230-type: "section",
231-text: {
232-type: "mrkdwn",
233-text: `*Request*\n${truncateSlackMrkdwn(view.title, 2600)}`,
234-},
235-},
236- ...(metadataElements.length > 0
237- ? [
238-{
239-type: "context",
240-elements: metadataElements,
241-} satisfies SlackBlock,
242-]
243- : []),
249+ ...buildSlackPluginRequestBlocks(view),
244250 ...interactiveBlocks,
245251];
246252}
@@ -307,7 +313,6 @@ function buildSlackExecResolvedBlocks(view: ExecApprovalResolvedView): SlackBloc
307313308314function buildSlackPluginResolvedBlocks(view: PluginApprovalResolvedView): SlackBlock[] {
309315const resolvedBy = formatSlackApprover(view.resolvedBy);
310-const metadataElements = buildSlackMetadataContextElements(buildSlackPluginMetadata(view));
311316return [
312317{
313318type: "section",
@@ -318,21 +323,7 @@ function buildSlackPluginResolvedBlocks(view: PluginApprovalResolvedView): Slack
318323 }`,
319324},
320325},
321-{
322-type: "section",
323-text: {
324-type: "mrkdwn",
325-text: `*Request*\n${truncateSlackMrkdwn(view.title, 2600)}`,
326-},
327-},
328- ...(metadataElements.length > 0
329- ? [
330-{
331-type: "context",
332-elements: metadataElements,
333-} satisfies SlackBlock,
334-]
335- : []),
326+ ...buildSlackPluginRequestBlocks(view),
336327];
337328}
338329@@ -390,7 +381,6 @@ function buildSlackExecExpiredBlocks(view: ExecApprovalExpiredView): SlackBlock[
390381}
391382392383function buildSlackPluginExpiredBlocks(view: PluginApprovalExpiredView): SlackBlock[] {
393-const metadataElements = buildSlackMetadataContextElements(buildSlackPluginMetadata(view));
394384return [
395385{
396386type: "section",
@@ -399,21 +389,7 @@ function buildSlackPluginExpiredBlocks(view: PluginApprovalExpiredView): SlackBl
399389text: "*Plugin approval expired*\nThis approval request expired before it was resolved.",
400390},
401391},
402-{
403-type: "section",
404-text: {
405-type: "mrkdwn",
406-text: `*Request*\n${truncateSlackMrkdwn(view.title, 2600)}`,
407-},
408-},
409- ...(metadataElements.length > 0
410- ? [
411-{
412-type: "context",
413-elements: metadataElements,
414-} satisfies SlackBlock,
415-]
416- : []),
392+ ...buildSlackPluginRequestBlocks(view),
417393];
418394}
419395此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。