@useatlas/types
Advanced tools
@@ -31,2 +31,21 @@ /** | ||
| workspaceName: string | null; | ||
| /** | ||
| * User id of the admin who completed the OAuth install (from | ||
| * `workspace_plugins.installed_by`). Null on legacy installs that | ||
| * predate the slice-5 install handler — the UI degrades to | ||
| * "Connected on {installedAt}" when null. | ||
| */ | ||
| installedBy: string | null; | ||
| /** | ||
| * True when the active install was completed via OAuth — i.e. a | ||
| * `workspace_plugins` row exists for this workspace's Slack catalog | ||
| * entry. BYOT and env-token installs leave this `false` because they | ||
| * write only to `chat_cache`, not `workspace_plugins`. | ||
| * | ||
| * The admin UI uses this to decide whether to render the OAuth-only | ||
| * Disconnect affordance (slice-6 placeholder pointing at #2655) vs. | ||
| * the existing BYOT Disconnect dialog (which already works against | ||
| * the chat_cache row). | ||
| */ | ||
| hasOAuthInstall: boolean; | ||
| /** Whether Slack OAuth env vars are configured (SLACK_CLIENT_ID etc.). */ | ||
@@ -33,0 +52,0 @@ oauthConfigured: boolean; |
+34
-0
@@ -78,2 +78,36 @@ /** | ||
| /** | ||
| * Chat-adapter encoded thread id (e.g. Slack: `"slack:CHANNEL:THREAD_TS"`). | ||
| * | ||
| * Distinct nominal type from {@link ChannelId} even though both are | ||
| * strings at runtime. The chat-adapter's `Thread.id` and | ||
| * `ReactionEvent.threadId` both surface this encoded form; the bare | ||
| * `"slack:CHANNEL"` channel id is the `ChannelId` brand. Branding the | ||
| * two prevents the #2680 class of bug — a developer reading the chat | ||
| * SDK's `Thread.channelId` (`string`) and passing it where a thread id | ||
| * is expected (`pending.record(thread.channelId, ...)` was the | ||
| * specific instance, which silently broke the proactive reaction-back | ||
| * path for the entire 1.5.0 dogfood window because Map keys never | ||
| * matched the encoded form `event.threadId` carries). | ||
| * | ||
| * Promoted via `assertThreadId` from `@useatlas/chat`. | ||
| */ | ||
| export type ThreadId = string & { | ||
| readonly __brand: "ThreadId"; | ||
| }; | ||
| /** | ||
| * Chat-adapter channel id (e.g. Slack: `"slack:CHANNEL"`). | ||
| * | ||
| * Distinct nominal type from {@link ThreadId}. The chat-adapter's | ||
| * `Thread.channelId` and `channelIdFromThreadId(threadId)` both | ||
| * surface this bare form; the encoded `"slack:CHANNEL:THREAD_TS"` is | ||
| * the `ThreadId` brand. Branding eliminates the can-pass-either-string | ||
| * footgun that lets `pending.record(thread.channelId, ...)` compile | ||
| * against a slot expecting `ThreadId`. | ||
| * | ||
| * Promoted via `assertChannelId` from `@useatlas/chat`. | ||
| */ | ||
| export type ChannelId = string & { | ||
| readonly __brand: "ChannelId"; | ||
| }; | ||
| /** | ||
| * Channel-scoped pause layers (`channel_id IS NOT NULL`). | ||
@@ -80,0 +114,0 @@ * |
+1
-1
| { | ||
| "name": "@useatlas/types", | ||
| "version": "0.1.4", | ||
| "version": "0.1.5", | ||
| "description": "Shared types for the Atlas text-to-SQL agent", | ||
@@ -5,0 +5,0 @@ "type": "module", |
206950
1.15%5236
1.02%