import type { AuthoredPostPage, PublishedPost, PublishPostInput, RemotePostRef, SocialDeletionDriver, SocialIdentityCredentials, SocialPublishingDriver, TimelineQuery, TimelineResult } from '../types'; /** * Escape the reserved characters of LinkedIn's "little text" commentary format * so the literal text renders as typed. Without this, characters like `(` `)` * `@` `#` cause the share to be rejected with a 400. */ export declare function escapeLinkedInText(text: string): string; export declare interface LinkedInDriverOptions { apiVersion?: string authBase?: string apiBase?: string } export declare interface LinkedInAuthUrlInput { clientId: string redirectUrl: string scopes: string[] state: string } export declare interface LinkedInTokenExchangeInput { clientId: string clientSecret: string redirectUrl: string code: string } export declare interface LinkedInTokenResponse { accessToken: string expiresIn?: number scope?: string } export declare interface LinkedInProfile { sub: string name?: string picture?: string } export declare class LinkedInApiError extends Error { public status: number; public body: string; constructor(message: string, status: number, body: string); get isAuthError(): boolean; } /** * Publishing driver for LinkedIn member shares. * * Auth is OAuth 2.0 (authorization code). Posting uses the versioned REST * `/rest/posts` endpoint with the `w_member_social` scope. Unlike Bluesky, * LinkedIn has no app-password, so a token is always obtained via OAuth (or * pasted in from a prior OAuth grant). */ export declare class LinkedInPublishingDriver implements SocialPublishingDriver, SocialDeletionDriver { readonly provider: 'linkedin'; characterLimit: number; protected apiVersion: string; protected authBase: string; protected apiBase: string; constructor(options?: LinkedInDriverOptions); getAuthUrl(input: LinkedInAuthUrlInput): string; exchangeCode(input: LinkedInTokenExchangeInput): Promise; getProfile(accessToken: string): Promise; publish(identity: SocialIdentityCredentials, post: PublishPostInput): Promise; timeline(_identity: SocialIdentityCredentials, _query?: TimelineQuery): Promise; listAuthoredPosts(identity: SocialIdentityCredentials, query?: TimelineQuery): Promise; deletePost(identity: SocialIdentityCredentials, ref: RemotePostRef): Promise; protected request(url: string, init: RequestInit): Promise; }