@hiver/connector-agent 4.22.0-slackM2-beta.0 → 4.22.0-slackM2-beta.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.
@@ -1,6 +1,6 @@
1
1
  export { getExternalConversation, getExternalConversationPage, getExternalConversationsByTarget, getThreadPage, startExistingChannel, startNewChannel } from './conversations';
2
2
  export { postMessage } from './messages';
3
3
  export { getChannelMembers } from './members';
4
- export { getLinks, getThreadPreview, linkExistingChannel, linkExistingThread, markLinkRead, unlinkConversation } from './links';
4
+ export { getLinkPreview, getLinks, linkExistingChannel, linkExistingThread, markLinkRead, unlinkConversation } from './links';
5
5
  export { parseSlackError } from './errors';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,aAAa,EACb,oBAAoB,EACpB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,gCAAgC,EAChC,aAAa,EACb,oBAAoB,EACpB,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,cAAc,EACd,QAAQ,EACR,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { LinkExistingChannelRequest, LinkExistingThreadRequest, SlackLink, SlackLinksResponse, SlackThreadPreview, StartResponse } from '../types/wire';
1
+ import { LinkExistingChannelRequest, LinkExistingResponse, LinkExistingThreadRequest, SlackLink, SlackLinkPreview, SlackLinksResponse } from '../types/wire';
2
2
  /**
3
3
  * Poll cadence for the links list (the switcher payload). The endpoint is
4
4
  * declared safe to poll — it never mutates read state — and it's the ONLY
@@ -68,23 +68,29 @@ export declare const unlinkConversation: (hiverConvId: string, linkId: string) =
68
68
  */
69
69
  export declare const markLinkRead: (hiverConvId: string, linkId: string, lastReadTs?: string) => Promise<void>;
70
70
  /**
71
- * Attach an existing Slack thread. Posts `messageText` into the thread
72
- * (always no silent attach), then links it. Response shape is identical
73
- * to /start/existing-channel so the success path reuses that handling;
74
- * `externalConversationId` IS the new linkId.
71
+ * Attach an existing Slack thread; `externalConversationId` in the
72
+ * response IS the new linkId. `messageText` is posted into the thread
73
+ * only when non-empty the link modal sends '' (D2), so the live
74
+ * response's `postedMessage` is null (silent attach). Normalisation
75
+ * must therefore be null-safe: a 200 with a null postedMessage is the
76
+ * SUCCESS path, not an error.
75
77
  */
76
- export declare const linkExistingThread: (payload: LinkExistingThreadRequest) => Promise<StartResponse>;
78
+ export declare const linkExistingThread: (payload: LinkExistingThreadRequest) => Promise<LinkExistingResponse>;
77
79
  /**
78
- * Attach an existing Slack channel (posts `messageText` top-level, then
79
- * links the whole channel renders in channel mode like a started one).
80
+ * Attach an existing Slack channel (renders in channel mode like a
81
+ * started one). Same posting rule as linkExistingThread: empty
82
+ * `messageText` ⇒ silent attach, `postedMessage: null` on success.
80
83
  */
81
- export declare const linkExistingChannel: (payload: LinkExistingChannelRequest) => Promise<StartResponse>;
84
+ export declare const linkExistingChannel: (payload: LinkExistingChannelRequest) => Promise<LinkExistingResponse>;
82
85
  /**
83
- * DUMMY CONTRACT (decision D1): fetch preview meta for a pasted thread
84
- * URL before linking. The backend endpoint is not designed yet this is
85
- * the shape we agreed to build against (MSW mocks it in dev). Wire
86
- * casing follows the live convention: snake_case query params.
86
+ * Fetch preview meta for a pasted thread permalink before linking
87
+ * (GET /link-preview the real endpoint that closed the D1 gap). The
88
+ * RAW URL travels as `preview_link` (snake_case query, per the casing
89
+ * rule); the BACKEND parses it and returns canonical channelId/threadTs
90
+ * — those, not any client-side parse, feed /link/existing-thread. The
91
+ * client-side parser remains only as a pre-flight validity gate so
92
+ * obviously-invalid input never hits the network.
87
93
  */
88
- export declare const getThreadPreview: (channelId: string, threadTs: string) => Promise<SlackThreadPreview>;
94
+ export declare const getLinkPreview: (previewLink: string) => Promise<SlackLinkPreview>;
89
95
  export {};
90
96
  //# sourceMappingURL=links.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/links.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,0BAA0B,EAC1B,yBAAyB,EACzB,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACd,MAAM,6BAA6B,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;wEACwE;AACxE,eAAO,MAAM,aAAa,gBAAiB,MAAM,wCAA6C,CAAC;AAE/F,UAAU,YACR,SAAQ,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,kBAAkB,GAAG,UAAU,GAAG,gBAAgB,GAAG,aAAa,CAAC;IAC3G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD,eAAO,MAAM,sBAAsB,SAAU,gBAAgB,GAAG,SAAS,KAAG,kBAS3E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,SAAU,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,YAAY,CAAC,KAAG,MACC,CAAC;AAExF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,UAAW,SAAS,EAAE,KAAG,SAAS,GAAG,IAShE,CAAC;AAEF,eAAO,MAAM,QAAQ,gBAAuB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAM9E,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,UAAO,EAAE,iBAAiB,GAAE,MAA+B,6EAW/G;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,gBAAuB,MAAM,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAK1F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,gBAAuB,MAAM,UAAU,MAAM,eAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAMzG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YAAmB,yBAAyB,KAAG,OAAO,CAAC,aAAa,CAQlG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,YAAmB,0BAA0B,KAAG,OAAO,CAAC,aAAa,CAQpG,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,cAAqB,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAOtG,CAAC"}
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/api/links.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,6BAA6B,CAAC;AAErC;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAEnC;wEACwE;AACxE,eAAO,MAAM,aAAa,gBAAiB,MAAM,wCAA6C,CAAC;AAE/F,UAAU,YACR,SAAQ,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,kBAAkB,GAAG,UAAU,GAAG,gBAAgB,GAAG,aAAa,CAAC;IAC3G,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAWD,eAAO,MAAM,sBAAsB,SAAU,gBAAgB,GAAG,SAAS,KAAG,kBAS3E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,SAAU,IAAI,CAAC,SAAS,EAAE,aAAa,GAAG,YAAY,CAAC,KAAG,MACC,CAAC;AAExF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,UAAW,SAAS,EAAE,KAAG,SAAS,GAAG,IAShE,CAAC;AAEF,eAAO,MAAM,QAAQ,gBAAuB,MAAM,KAAG,OAAO,CAAC,kBAAkB,CAM9E,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,UAAO,EAAE,iBAAiB,GAAE,MAA+B,6EAW/G;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,gBAAuB,MAAM,UAAU,MAAM,KAAG,OAAO,CAAC,IAAI,CAK1F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,gBAAuB,MAAM,UAAU,MAAM,eAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAMzG,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,YAAmB,yBAAyB,KAAG,OAAO,CAAC,oBAAoB,CAQzG,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,YAAmB,0BAA0B,KAAG,OAAO,CAAC,oBAAoB,CAQ3G,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,gBAAuB,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAOlF,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { FC } from 'react';
2
+ import { SlackChannel } from '../../types/wire';
3
+ interface ChannelPickerProps {
4
+ channels: SlackChannel[];
5
+ isLoading: boolean;
6
+ isWarming: boolean;
7
+ value: string | null;
8
+ /** null clears the selection (the input's × resets the picker). */
9
+ onChange: (channelId: string | null) => void;
10
+ }
11
+ /**
12
+ * Channel tab — Figma M2 1719:109242 (searching) / 1719:109964 (selected).
13
+ * A search input that behaves like a select-with-search: the results
14
+ * list is a FLOATING dropdown that opens only while the input is
15
+ * focused (it overlays, never pushes, the content below). Picking a
16
+ * channel closes it and renders the selected-channel box (name +
17
+ * "N Members") under the input; focusing the input again reopens the
18
+ * dropdown; the input's × clears both the query and the selection.
19
+ *
20
+ * `memberCount` is optional on the /channels wire — the members line is
21
+ * hidden when it's absent, never fabricated.
22
+ */
23
+ export declare const ChannelPicker: FC<ChannelPickerProps>;
24
+ export {};
25
+ //# sourceMappingURL=ChannelPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChannelPicker.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkExistingModal/ChannelPicker.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAqB,MAAM,OAAO,CAAC;AAS9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,mEAAmE;IACnE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAwQhD,CAAC"}
@@ -21,8 +21,10 @@ interface LinkExistingModalProps {
21
21
  *
22
22
  * Both link endpoints ALWAYS post before linking; per product decision
23
23
  * D2 the modal has no compose box and sends `messageText: ''`.
24
- * Preview rides the DUMMY /preview/thread contract (decision D1) until
25
- * the backend endpoint is finalised.
24
+ * Preview rides GET /link-preview (the real endpoint that closed the D1
25
+ * gap): the raw pasted URL goes up as `preview_link`, the response's
26
+ * canonical channelId/threadTs feed /link/existing-thread, and
27
+ * `viewerCanAccess: false` blocks linking with an access error.
26
28
  */
27
29
  export declare const LinkExistingModal: FC<LinkExistingModalProps>;
28
30
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkExistingModal/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAyC,MAAM,OAAO,CAAC;AAsClE,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;4CACwC;IACxC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;uDACmD;IACnD,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD;4DACwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA2WxD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkExistingModal/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAyB,MAAM,OAAO,CAAC;AAsClD,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;4CACwC;IACxC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;uDACmD;IACnD,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD;4DACwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA0UxD,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { BoxProps, StackProps } from '@hiver/hiver-ui-kit';
2
+ import { StyledComponent } from '@emotion/styled';
3
+ /**
4
+ * LinkExistingModal-only chrome (Figma 1705:92605 not-fetched /
5
+ * 1705:86410 fetched). The shared StartModal primitives stay untouched —
6
+ * these three exist because the link modal's layout differs from the
7
+ * start modal's: the field group sits inside its own bordered card, the
8
+ * footer carries a hairline divider, and the content area keeps a fixed
9
+ * minimum height so the not-yet-fetched state doesn't collapse.
10
+ */
11
+ /** Bordered rounded card wrapping the tab's field group (label + URL
12
+ * input + fetched preview on the Thread tab). Radius matches the
13
+ * TabTrack's 12px rather than any t.radius step. */
14
+ export declare const FieldGroupCard: StyledComponent<BoxProps>;
15
+ /** Gives the tab content a stable, ample footprint: before a preview is
16
+ * fetched the card is short, and without this the modal collapses to
17
+ * hug it. The card grows into this space once a preview loads. */
18
+ export declare const TabPanel: StyledComponent<BoxProps>;
19
+ /** ModalFooter + the hairline divider above the actions. */
20
+ export declare const DividedFooter: StyledComponent<StackProps>;
21
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../../../src/features/slack/components/LinkExistingModal/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAKvD;;;;;;;GAOG;AAEH;;qDAEqD;AACrD,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CAMpD,CAAC;AAEF;;mEAEmE;AACnE,eAAO,MAAM,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAI9C,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,UAAU,CAGrD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CAOpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAAC,UAAU,CAO3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAAe,CAAC,QAAQ,CAM7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,QAAQ,CAQrD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,UAAU,CAatD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,WAAW,CAqBtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAAC,WAAW,CA4B3D,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,WAAW,CAexD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,QAAQ,CASnD,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,QAAQ,CAa/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CASpD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,eAAe,CAiB7D,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAIhF,CAAC"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/components/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CAOpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,eAAe,CAAC,UAAU,CAO3D,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAAe,CAAC,QAAQ,CAM7D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,QAAQ,CAQrD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,UAAU,CAatD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,WAAW,CAqBtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,CAAC,WAAW,CA4B3D,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,WAAW,CAkBxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,eAAe,CAAC,QAAQ,CASnD,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,QAAQ,CAa/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,eAAe,CAAC,QAAQ,CASpD,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,eAAe,CAiB7D,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAIhF,CAAC"}
@@ -12,7 +12,7 @@ export declare const SLACK_LINK_BY_ID_API: string;
12
12
  export declare const SLACK_LINK_READ_API: string;
13
13
  export declare const SLACK_LINK_EXISTING_THREAD_API: string;
14
14
  export declare const SLACK_LINK_EXISTING_CHANNEL_API: string;
15
- export declare const SLACK_THREAD_PREVIEW_API: string;
15
+ export declare const SLACK_LINK_PREVIEW_API: string;
16
16
  export declare const SLACK_CHANNEL_MEMBERS_API: string;
17
17
  export declare const SLACK_CHANNELS_API: string;
18
18
  export declare const SLACK_WORKSPACE_USERS_API: string;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/constants/api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,yBAAyB,CAAC;AACrD,eAAO,MAAM,gBAAgB,+BAA4B,CAAC;AAE1D,eAAO,MAAM,gCAAgC,EAAE,MAAqD,CAAC;AACrG,eAAO,MAAM,2BAA2B,EAAE,MAAgD,CAAC;AAE3F,eAAO,MAAM,kBAAkB,EAAE,MAAuC,CAAC;AAGzE,eAAO,MAAM,uBAAuB,EAAE,MAA0D,CAAC;AAEjG,eAAO,MAAM,+BAA+B,EAAE,MAAiE,CAAC;AAGhH,eAAO,MAAM,gBAAgB,EAAE,MAAmF,CAAC;AACnH,eAAO,MAAM,0CAA0C,EAAE,MAA+D,CAAC;AAKzH,eAAO,MAAM,eAAe,EAAE,MAAwE,CAAC;AAEvG,eAAO,MAAM,oBAAoB,EAAE,MAAgF,CAAC;AAGpH,eAAO,MAAM,mBAAmB,EAAE,MAAqF,CAAC;AAGxH,eAAO,MAAM,8BAA8B,EAAE,MAAmD,CAAC;AACjG,eAAO,MAAM,+BAA+B,EAAE,MAAoD,CAAC;AAKnG,eAAO,MAAM,wBAAwB,EAAE,MAA6C,CAAC;AAErF,eAAO,MAAM,yBAAyB,EAAE,MAA8C,CAAC;AAMvF,eAAO,MAAM,kBAAkB,EAAE,MAAuC,CAAC;AASzE,eAAO,MAAM,yBAAyB,EAAE,MAAoC,CAAC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/constants/api.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,yBAAyB,CAAC;AACrD,eAAO,MAAM,gBAAgB,+BAA4B,CAAC;AAE1D,eAAO,MAAM,gCAAgC,EAAE,MAAqD,CAAC;AACrG,eAAO,MAAM,2BAA2B,EAAE,MAAgD,CAAC;AAE3F,eAAO,MAAM,kBAAkB,EAAE,MAAuC,CAAC;AAGzE,eAAO,MAAM,uBAAuB,EAAE,MAA0D,CAAC;AAEjG,eAAO,MAAM,+BAA+B,EAAE,MAAiE,CAAC;AAGhH,eAAO,MAAM,gBAAgB,EAAE,MAAmF,CAAC;AACnH,eAAO,MAAM,0CAA0C,EAAE,MAA+D,CAAC;AAKzH,eAAO,MAAM,eAAe,EAAE,MAAwE,CAAC;AAEvG,eAAO,MAAM,oBAAoB,EAAE,MAAgF,CAAC;AAGpH,eAAO,MAAM,mBAAmB,EAAE,MAAqF,CAAC;AAIxH,eAAO,MAAM,8BAA8B,EAAE,MAAmD,CAAC;AACjG,eAAO,MAAM,+BAA+B,EAAE,MAAoD,CAAC;AAMnG,eAAO,MAAM,sBAAsB,EAAE,MAA2C,CAAC;AAEjF,eAAO,MAAM,yBAAyB,EAAE,MAA8C,CAAC;AAMvF,eAAO,MAAM,kBAAkB,EAAE,MAAuC,CAAC;AASzE,eAAO,MAAM,yBAAyB,EAAE,MAAoC,CAAC"}
@@ -202,16 +202,40 @@ export interface LinkExistingChannelRequest {
202
202
  messageText: string;
203
203
  }
204
204
  /**
205
- * DUMMY CONTRACT (D1) response of the pending /preview/thread
206
- * endpoint, used to render the link-a-thread preview card before the
207
- * rep confirms. Shape agreed in discussion; confirm with backend.
205
+ * Response of both /link/existing-* endpoints. Leaner than StartResponse
206
+ * (no channelId/externalThreadTs on the wire), and `postedMessage` is
207
+ * null when nothing was posted which is the NORMAL case: the link
208
+ * modal sends `messageText: ''` (D2) and the backend then attaches
209
+ * silently instead of posting.
208
210
  */
209
- export interface SlackThreadPreview {
210
- /** First (root) message text of the thread. */
211
- firstMessage: string;
211
+ export interface LinkExistingResponse {
212
+ /** The new link's id what the switcher/selection addresses. */
213
+ externalConversationId: string;
214
+ postedMessage: SlackMessage | null;
215
+ }
216
+ /**
217
+ * Response of GET /link-preview?preview_link=<pasted URL> — renders the
218
+ * link-a-thread preview card before the rep confirms. The backend parses
219
+ * the URL; `channelId`/`threadTs` here are CANONICAL (it resolves a
220
+ * reply permalink to the thread root) and are what the subsequent
221
+ * /link/existing-thread call must send.
222
+ */
223
+ export interface SlackLinkPreview {
224
+ channelId: string;
212
225
  channelName: string;
226
+ isPrivate: boolean;
213
227
  memberCount: number;
214
- channelType: 'private' | 'public';
228
+ /** Root ts of the thread the pasted link resolves to. */
229
+ threadTs: string;
230
+ /** Snippet of the thread's first (root) message. */
231
+ previewText: string;
232
+ previewAuthor: string;
233
+ /** Slack ts of the previewed message. */
234
+ previewPostedAt: string;
235
+ /** false ⇒ the viewer can't see the target (e.g. private channel they
236
+ * aren't in) — the UI must block linking, not just hide the preview. */
237
+ viewerCanAccess: boolean;
238
+ viewerBlockReason: string | null;
215
239
  }
216
240
  export interface MemberResolutionReport {
217
241
  added: Array<{
@@ -276,6 +300,9 @@ export interface SlackChannel {
276
300
  name: string;
277
301
  isPrivate: boolean;
278
302
  isMember: boolean;
303
+ /** Optional on the wire — hide the "N Members" line when absent,
304
+ * never fabricate a count. */
305
+ memberCount?: number;
279
306
  }
280
307
  /**
281
308
  * GET /channels response. The backend serves the picker from a pre-warmed Redis
@@ -1 +1 @@
1
- {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/types/wire.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/types/wire.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  /**
2
- * Parse a pasted Slack thread permalink into the {channelId, threadTs}
3
- * pair the /link/existing-thread and /preview/thread endpoints need.
4
- * Parsing happens CLIENT-SIDE (decision D1) — the backend receives ids,
5
- * never the raw URL.
2
+ * Parse a pasted Slack thread permalink into a {channelId, threadTs}
3
+ * pair. Since GET /link-preview landed (closing the D1 gap), the BACKEND
4
+ * is the authority on parsingit receives the raw URL as
5
+ * `preview_link` and returns the canonical ids, which are what
6
+ * /link/existing-thread is called with. This client-side parse survives
7
+ * as a pre-flight validity gate: obviously-invalid input is rejected
8
+ * with an inline error before any network call (TC-010).
6
9
  *
7
10
  * Permalink shapes Slack produces ("Copy link" on a message):
8
11
  * https://<ws>.slack.com/archives/C0A21B3CD/p1727123456123456
@@ -1 +1 @@
1
- {"version":3,"file":"slack-thread-url.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/utils/slack-thread-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,eAAO,MAAM,mBAAmB,QAAS,MAAM,KAAG,oBAAoB,GAAG,IAuBxE,CAAC"}
1
+ {"version":3,"file":"slack-thread-url.d.ts","sourceRoot":"","sources":["../../../../src/features/slack/utils/slack-thread-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAUD,eAAO,MAAM,mBAAmB,QAAS,MAAM,KAAG,oBAAoB,GAAG,IAuBxE,CAAC"}