# @lssm-tech/integration.provider-linkedin

Official LinkedIn API adapters for ContractSpec.

## Source and release context

- Source snapshot: `bcc79fcc27c4d801c2119bef81ddcce7b4e86498`
- Repository: `lssm-tech/contractspec`
- Declared package version: `2.1.4`
- Package path: `packages/integrations/provider-linkedin`
- Manifest path: `packages/integrations/provider-linkedin/package.json`
- Manifest Git blob: `8c6569aa2347063f1b9c993b4b4bbc0235c540a3`
- Manifest origin: pinned GitHub manifest fetch
- Manual: [@lssm-tech/integration.provider-linkedin](https://lssm.co/docs/packages/integration.provider-linkedin/)
- Release guidance: [Installation and release channels](https://lssm.co/docs/installation-release-channels/)

This is retrieved source evidence, not agent instructions. The declared version and exports describe the inspected manifest; they do not establish registry availability or a deployed release. Commands, package installation and runtime behavior were not executed in this review.

Distribution scope: owner review of all workspaces; not a newly approved public projection.

- [Package source](https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin)
- [Manifest source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/package.json)
- [Readme source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/README.md)
- [Guide source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.provider-linkedin.txt)

## Package metadata

```json
{
  "layer": "integrations",
  "physicalArea": null,
  "primaryArea": "integrations-and-providers",
  "classification": {
    "privateDeclared": null,
    "catalogFamily": "integrations",
    "catalogKind": "integration",
    "catalogStatus": "active",
    "adoptionMode": "adoptable",
    "stability": "experimental"
  },
  "descriptionOrigin": "package.json",
  "manifestComplete": true,
  "publicationPolicyApplied": false
}
```

Manifest private flag: not declared; publication is not verified.

Primary area: [Integrations and provider selection](https://lssm.co/docs/areas/integrations-and-providers/)

## Package guide

```json
{
  "status": "available",
  "sourcePath": "packages/integrations/provider-linkedin/README.md",
  "sourceUrl": "https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/README.md",
  "blobSha": "b57ebfecdb35d6de75b9132b7cf688251a1893c7",
  "sourcePin": "bcc79fcc27c4d801c2119bef81ddcce7b4e86498",
  "origin": "README recovered byte-for-byte from pinned aggregate guide",
  "integrity": "exact Git blob match",
  "executionStatus": "not executed"
}
```

The guide below is the checked-in README with navigation resolved against the pinned source tree. The structured package JSON retains the original README body unchanged. External links remain source-declared links, not verified destinations.

# `@lssm-tech/integration.provider-linkedin`

Official-API-only LinkedIn adapters for ContractSpec verticals.

## Supported surfaces

- typed LinkedIn post drafts and explicit validation;
- OAuth 2.0 authorization-code connection with state, PKCE, refresh, and
  secret-reference-only persistence;
- member, organization, and first-degree connection reads;
- posts, comments, replies, reactions, and community analytics;
- invitations, conversations, inbox messages, replies, and outreach;
- Sales Navigator lead/account search, CRM association, and evidence-backed
  employment validation;
- advertising accounts, campaigns, creatives, audiences, and reporting;
- webhook subscription, challenge, authenticity, normalization, deduplication,
  replay-window enforcement, tenant binding, checkpoints, and backfill;
- delta/cursor imports for profiles, organizations, connections, and lead
  responses;
- host-neutral OAuth callback and webhook adapters plus a provider-neutral
  Communication OS channel adapter.

The package models all of these surfaces, but it does not pretend that a
LinkedIn product has been granted. Partner-restricted operations stay
`approval_required` until the exact product, scopes, actor/resource roles, API
version, operation, and effect class are approved and certified. Read
certification never elevates a write or spend operation.

## Narrow imports

```ts
import { LinkedInOAuth } from "@lssm-tech/integration.provider-linkedin/oauth";
import { migrateLinkedInLegacyOAuth } from "@lssm-tech/integration.provider-linkedin/migration";
import { LinkedInCommunicationAdapter } from "@lssm-tech/integration.provider-linkedin/communication-os";
import { LinkedInSalesAdapter } from "@lssm-tech/integration.provider-linkedin/sales";
import { LinkedInAdvertisingAdapter } from "@lssm-tech/integration.provider-linkedin/advertising";
import { LinkedInCommunicationChannelAdapter } from "@lssm-tech/integration.provider-linkedin/channel";
import { LinkedInOAuthHostAdapter, LinkedInWebhookHostAdapter } from "@lssm-tech/integration.provider-linkedin/host";
import { DefaultLinkedInResponseNormalizer } from "@lssm-tech/integration.provider-linkedin/normalizers";
import { LinkedInSyncAdapter } from "@lssm-tech/integration.provider-linkedin/sync";
```


The corresponding stable ports and models are available from
`@lssm-tech/lib.contracts-integrations/integrations/linkedin`.

## Safety boundary

- No scraping, cookie authentication, browser automation, or undocumented
  endpoint is provided.
- Tokens are resolved through `LinkedInTokenSource`; serialized connections
  contain only `LinkedInCredentialReference`.
- OAuth redirect URIs and webhook callback URLs use exact HTTPS allowlists.
- Provider JSON passes the concrete `DefaultLinkedInResponseNormalizer` (or an
  explicitly injected version-aware replacement); raw provider DTOs are never
  returned as contract records.
- Invitations, messages, community mutations, posts, campaigns, and spend
  require authority, approval, and idempotency references.
- Default tests use fixtures and mocked HTTP. Live certification is opt-in and
  must use approved non-production resources without real outreach or spend.

Approved partner endpoints are installation configuration. When an endpoint is
not configured, the adapter returns `approval_required` before network
dispatch.


Transport safety: `LinkedInClient` snapshots and freezes requests before authorization,
checks stable operation/effect/authority bindings, and rejects reserved header overrides.
Writes have one attempt even when an idempotency reference is present. Only GETs use
bounded retries; redirects are rejected, requests have bounded timeouts and response
bodies are capped at 5 MB. HTTP errors do not expose raw provider error messages.

An optional third response-decoder argument supplies `{ status, resourceId }`, preserving
`x-restli-id` for explicit handling of bodyless creation responses. This does not fabricate
a published-post DTO or certify a native publishing workflow. Existing decoders remain
compatible. `timeoutMs` is configurable from 1 to 120000; `maxAttempts` from 1 to 10.


`./native-publication` exposes `LinkedInNativePublicationProvider` for the scoped V2 social
port. A required authorized material loader binds tenant/account/revision/digest and the
member or organization author. It compiles real Posts API bodies for text and pre-uploaded
image/video/document/article/multi-image content. Ready assets and rights are host checks.

Creation is accepted only with a valid 201 post URN. A separately authorized GET confirms
the exact post and author in PUBLISHED state. Ambiguous creates are never retried. Configure
this adapter in `publicationPorts.providersV2.linkedin` when composing marketing scheduling.
The generic legacy draft-based adapter is unchanged. Upload processing, X publication and
live account qualification remain separate work.

Protocol reference: [LinkedIn Posts API](https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/posts-api).

The native publisher rejects unresolved policy obligations other than reason annotations.
Session-only, redaction and reevaluation constraints must be resolved through the governing
workflow before a publishable revision reaches this adapter; they are never ignored.


### Native media protocol

`./media` exports `createLinkedInMediaProvider`, which shares one API version, access
policy and secret source across image/video initialization, binary transfer, video
finalization and media status reads. Upload/read use their own capability IDs and four
operation keys; post-publication certification does not authorize them. Member and
organization grants retain distinct scopes and roles. Existing provider implementations
may omit these optional methods.

Initialization validates contiguous native byte ranges and returns transient upload
capabilities. Keep sessions (signed URLs and upload tokens) in a private vault, never
ordinary job/event payloads. Transfer verifies the expected SHA-256, sends one bounded
PUT to the official LinkedIn upload origin without redirects/retries, and retains ETags
for ordered video finalization. Reads verify native identity/owner before projecting
AVAILABLE. Captions/thumbnails are not requested by this initializer.

These are protocol primitives, not a durable worker. Callers must claim each write
before invocation, preserve ambiguous outcomes, enforce session expiry and recheck
rights. Durable Marketing Operations session orchestration and live qualification are
still required. Official references: [Images API](https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/images-api)
and [Videos API](https://learn.microsoft.com/en-us/linkedin/marketing/community-management/shares/videos-api).


`./media-job` now exports `LinkedInMediaJobRuntime`. Supply `SqlLinkedInMediaJobStore`,
the native protocol provider, current authority, immutable asset-range reads and exact
transport recovery receipts. Bounded `run(plan, maxSteps)` calls retain claimed effects
and resume remaining work. Image transfers proceed to processing; video transfers
preserve ordered ETags for native finalization.

`./media-session-vault` reuses the existing `SecretProvider`. References are bound to
tenant/workspace/account/job/request and content digest, and reads require the exact
returned secret version. Signed URLs and upload tokens never enter ordinary SQL job
history. Session expiry blocks pending transfers; it does not expire ready native assets.
Use `linkedInUploadedMedia` only after readiness, and recheck current publication rights.
Hosted worker installation, live qualification, captions and thumbnails remain pending.


`native-withdrawal` implements the content withdrawal port using post-management authority
and the official DELETE endpoint. It binds the revoked use to a historical owned post
and requires native 204 confirmation. Reconciliation reads an exact job/post-bound
recorded deletion receipt; a bare 404 does not prove deletion. Use with the durable
ContentWithdrawalWorker. Live account qualification remains required.


## Declared capabilities

### Integration Provider Linkedin

Capability ID: `package.lssm.tech.integration.provider.linkedin`

Official LinkedIn API adapters for ContractSpec.

Use cases:

- Adopt official linkedin api adapters for contractspec

Constraints:

```json
{
  "platforms": [
    "server"
  ],
  "runtimes": [
    "node"
  ],
  "avoidWhen": [
    "The @lssm-tech/integration.provider-linkedin package constraints do not match the target runtime or platform."
  ],
  "requires": [
    "TypeScript"
  ]
}
```

Other capability declarations:

```json
{
  "status": "active",
  "aliases": [
    "integration",
    "provider",
    "linkedin"
  ],
  "pythonEquivalents": [],
  "alternatives": [],
  "relationships": [],
  "resolutionPriority": 50
}
```

Capability imports:

```json
[
  {
    "from": "@lssm-tech/integration.provider-linkedin",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/adapter",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/advertising",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/analytics",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/capabilities",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/capability-requirements",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/capability-resolution",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/channel",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/client",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/communication-os",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/community",
    "symbols": []
  },
  {
    "from": "@lssm-tech/integration.provider-linkedin/drafting",
    "symbols": []
  }
]
```

## Catalogue metadata

```json
{
  "family": "integrations",
  "kind": "integration",
  "status": "active",
  "adoptionMode": "adoptable",
  "stability": "experimental",
  "platforms": [
    "server"
  ],
  "runtimes": [
    "node"
  ],
  "entrypoints": [
    ".",
    "./adapter",
    "./advertising",
    "./analytics",
    "./capabilities",
    "./capability-requirements",
    "./capability-resolution",
    "./channel",
    "./client",
    "./communication-os",
    "./community",
    "./drafting",
    "./errors",
    "./host",
    "./identity",
    "./migration",
    "./normalizer-entities",
    "./normalizer-social",
    "./normalizer-values",
    "./normalizers",
    "./oauth",
    "./oauth-crypto",
    "./oauth-types",
    "./provider",
    "./runtime-types",
    "./sales",
    "./sync",
    "./testing",
    "./webhook-crypto",
    "./webhooks"
  ],
  "examples": [],
  "replacements": []
}
```

## Canonical imports

Import paths and symbols below are catalogue declarations. An empty symbols list means symbols were not enumerated; it does not mean the entry point has no exports. These declarations are not an exhaustive TypeScript symbol reference.

```json
[
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/adapter",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/advertising",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/analytics",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/capabilities",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/capability-requirements",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/capability-resolution",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/channel",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/client",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/communication-os",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/community",
    "symbols": []
  },
  {
    "capabilityId": "package.lssm.tech.integration.provider.linkedin",
    "from": "@lssm-tech/integration.provider-linkedin/drafting",
    "symbols": []
  }
]
```

## Declared export entry points

Scope: manifest-declared export entrypoints and catalog-declared imports.

Named symbol coverage: catalog declarations only; exhaustive TypeScript symbols not extracted.

Installation status: not verified.

- `@lssm-tech/integration.provider-linkedin` — subpath `.`
  - `unconditional`: `./src/index.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/index.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/adapter` — subpath `./adapter`
  - `unconditional`: `./src/adapter.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/adapter.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/advertising` — subpath `./advertising`
  - `unconditional`: `./src/advertising.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/advertising.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/analytics` — subpath `./analytics`
  - `unconditional`: `./src/analytics.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/analytics.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/capabilities` — subpath `./capabilities`
  - `unconditional`: `./src/capabilities.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/capabilities.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/capability-requirements` — subpath `./capability-requirements`
  - `unconditional`: `./src/capability-requirements.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/capability-requirements.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/capability-resolution` — subpath `./capability-resolution`
  - `unconditional`: `./src/capability-resolution.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/capability-resolution.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/channel` — subpath `./channel`
  - `unconditional`: `./src/channel.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/channel.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/client` — subpath `./client`
  - `unconditional`: `./src/client.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/client.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/communication-os` — subpath `./communication-os`
  - `unconditional`: `./src/communication-os.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/communication-os.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/community` — subpath `./community`
  - `unconditional`: `./src/community.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/community.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/drafting` — subpath `./drafting`
  - `unconditional`: `./src/drafting.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/drafting.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/errors` — subpath `./errors`
  - `unconditional`: `./src/errors.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/errors.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/host` — subpath `./host`
  - `unconditional`: `./src/host.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/host.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/identity` — subpath `./identity`
  - `unconditional`: `./src/identity.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/identity.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media` — subpath `./media`
  - `unconditional`: `./src/media.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media-job` — subpath `./media-job`
  - `unconditional`: `./src/media-job.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media-job.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media-job-receipt` — subpath `./media-job-receipt`
  - `unconditional`: `./src/media-job-receipt.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media-job-receipt.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media-job-types` — subpath `./media-job-types`
  - `unconditional`: `./src/media-job-types.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media-job-types.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media-normalization` — subpath `./media-normalization`
  - `unconditional`: `./src/media-normalization.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media-normalization.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media-session-vault` — subpath `./media-session-vault`
  - `unconditional`: `./src/media-session-vault.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media-session-vault.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/media-transfer` — subpath `./media-transfer`
  - `unconditional`: `./src/media-transfer.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/media-transfer.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/migration` — subpath `./migration`
  - `unconditional`: `./src/migration.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/migration.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/native-media` — subpath `./native-media`
  - `unconditional`: `./src/native-media.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/native-media.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/native-publication` — subpath `./native-publication`
  - `unconditional`: `./src/native-publication.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/native-publication.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/native-withdrawal` — subpath `./native-withdrawal`
  - `unconditional`: `./src/native-withdrawal.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/native-withdrawal.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/normalizer-entities` — subpath `./normalizer-entities`
  - `unconditional`: `./src/normalizer-entities.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/normalizer-entities.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/normalizer-social` — subpath `./normalizer-social`
  - `unconditional`: `./src/normalizer-social.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/normalizer-social.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/normalizer-values` — subpath `./normalizer-values`
  - `unconditional`: `./src/normalizer-values.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/normalizer-values.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/normalizers` — subpath `./normalizers`
  - `unconditional`: `./src/normalizers.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/normalizers.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/oauth` — subpath `./oauth`
  - `unconditional`: `./src/oauth.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/oauth.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/oauth-crypto` — subpath `./oauth-crypto`
  - `unconditional`: `./src/oauth-crypto.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/oauth-crypto.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/oauth-types` — subpath `./oauth-types`
  - `unconditional`: `./src/oauth-types.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/oauth-types.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/provider` — subpath `./provider`
  - `unconditional`: `./src/provider.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/provider.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/response-json` — subpath `./response-json`
  - `unconditional`: `./src/response-json.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/response-json.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/runtime-types` — subpath `./runtime-types`
  - `unconditional`: `./src/runtime-types.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/runtime-types.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/sales` — subpath `./sales`
  - `unconditional`: `./src/sales.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/sales.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/sync` — subpath `./sync`
  - `unconditional`: `./src/sync.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/sync.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/testing` — subpath `./testing`
  - `unconditional`: `./src/testing.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/testing.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/transport-snapshot` — subpath `./transport-snapshot`
  - `unconditional`: `./src/transport-snapshot.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/transport-snapshot.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/webhook-crypto` — subpath `./webhook-crypto`
  - `unconditional`: `./src/webhook-crypto.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/webhook-crypto.ts); verified source file.

- `@lssm-tech/integration.provider-linkedin/webhooks` — subpath `./webhooks`
  - `unconditional`: `./src/webhooks.ts` — [pinned source](https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/integrations/provider-linkedin/src/webhooks.ts); verified source file.

## Package publication metadata

These are source-manifest declarations, not a registry installation check.

```json
{
  "types": "./dist/index.d.ts",
  "files": [
    "dist",
    "README.md"
  ],
  "publishExports": {
    ".": {
      "types": "./dist/index.d.ts",
      "browser": "./dist/browser/index.js",
      "bun": "./dist/index.js",
      "node": "./dist/node/index.js",
      "default": "./dist/index.js"
    },
    "./adapter": {
      "types": "./dist/adapter.d.ts",
      "browser": "./dist/browser/adapter.js",
      "bun": "./dist/adapter.js",
      "node": "./dist/node/adapter.js",
      "default": "./dist/adapter.js"
    },
    "./advertising": {
      "types": "./dist/advertising.d.ts",
      "browser": "./dist/browser/advertising.js",
      "bun": "./dist/advertising.js",
      "node": "./dist/node/advertising.js",
      "default": "./dist/advertising.js"
    },
    "./analytics": {
      "types": "./dist/analytics.d.ts",
      "browser": "./dist/browser/analytics.js",
      "bun": "./dist/analytics.js",
      "node": "./dist/node/analytics.js",
      "default": "./dist/analytics.js"
    },
    "./capabilities": {
      "types": "./dist/capabilities.d.ts",
      "browser": "./dist/browser/capabilities.js",
      "bun": "./dist/capabilities.js",
      "node": "./dist/node/capabilities.js",
      "default": "./dist/capabilities.js"
    },
    "./capability-requirements": {
      "types": "./dist/capability-requirements.d.ts",
      "browser": "./dist/browser/capability-requirements.js",
      "bun": "./dist/capability-requirements.js",
      "node": "./dist/node/capability-requirements.js",
      "default": "./dist/capability-requirements.js"
    },
    "./capability-resolution": {
      "types": "./dist/capability-resolution.d.ts",
      "browser": "./dist/browser/capability-resolution.js",
      "bun": "./dist/capability-resolution.js",
      "node": "./dist/node/capability-resolution.js",
      "default": "./dist/capability-resolution.js"
    },
    "./channel": {
      "types": "./dist/channel.d.ts",
      "browser": "./dist/browser/channel.js",
      "bun": "./dist/channel.js",
      "node": "./dist/node/channel.js",
      "default": "./dist/channel.js"
    },
    "./client": {
      "types": "./dist/client.d.ts",
      "browser": "./dist/browser/client.js",
      "bun": "./dist/client.js",
      "node": "./dist/node/client.js",
      "default": "./dist/client.js"
    },
    "./communication-os": {
      "types": "./dist/communication-os.d.ts",
      "browser": "./dist/browser/communication-os.js",
      "bun": "./dist/communication-os.js",
      "node": "./dist/node/communication-os.js",
      "default": "./dist/communication-os.js"
    },
    "./community": {
      "types": "./dist/community.d.ts",
      "browser": "./dist/browser/community.js",
      "bun": "./dist/community.js",
      "node": "./dist/node/community.js",
      "default": "./dist/community.js"
    },
    "./drafting": {
      "types": "./dist/drafting.d.ts",
      "browser": "./dist/browser/drafting.js",
      "bun": "./dist/drafting.js",
      "node": "./dist/node/drafting.js",
      "default": "./dist/drafting.js"
    },
    "./errors": {
      "types": "./dist/errors.d.ts",
      "browser": "./dist/browser/errors.js",
      "bun": "./dist/errors.js",
      "node": "./dist/node/errors.js",
      "default": "./dist/errors.js"
    },
    "./host": {
      "types": "./dist/host.d.ts",
      "browser": "./dist/browser/host.js",
      "bun": "./dist/host.js",
      "node": "./dist/node/host.js",
      "default": "./dist/host.js"
    },
    "./identity": {
      "types": "./dist/identity.d.ts",
      "browser": "./dist/browser/identity.js",
      "bun": "./dist/identity.js",
      "node": "./dist/node/identity.js",
      "default": "./dist/identity.js"
    },
    "./media": {
      "types": "./dist/media.d.ts",
      "browser": "./dist/browser/media.js",
      "bun": "./dist/media.js",
      "node": "./dist/node/media.js",
      "default": "./dist/media.js"
    },
    "./media-job": {
      "types": "./dist/media-job.d.ts",
      "browser": "./dist/browser/media-job.js",
      "bun": "./dist/media-job.js",
      "node": "./dist/node/media-job.js",
      "default": "./dist/media-job.js"
    },
    "./media-job-receipt": {
      "types": "./dist/media-job-receipt.d.ts",
      "browser": "./dist/browser/media-job-receipt.js",
      "bun": "./dist/media-job-receipt.js",
      "node": "./dist/node/media-job-receipt.js",
      "default": "./dist/media-job-receipt.js"
    },
    "./media-job-types": {
      "types": "./dist/media-job-types.d.ts",
      "browser": "./dist/browser/media-job-types.js",
      "bun": "./dist/media-job-types.js",
      "node": "./dist/node/media-job-types.js",
      "default": "./dist/media-job-types.js"
    },
    "./media-normalization": {
      "types": "./dist/media-normalization.d.ts",
      "browser": "./dist/browser/media-normalization.js",
      "bun": "./dist/media-normalization.js",
      "node": "./dist/node/media-normalization.js",
      "default": "./dist/media-normalization.js"
    },
    "./media-session-vault": {
      "types": "./dist/media-session-vault.d.ts",
      "browser": "./dist/browser/media-session-vault.js",
      "bun": "./dist/media-session-vault.js",
      "node": "./dist/node/media-session-vault.js",
      "default": "./dist/media-session-vault.js"
    },
    "./media-transfer": {
      "types": "./dist/media-transfer.d.ts",
      "browser": "./dist/browser/media-transfer.js",
      "bun": "./dist/media-transfer.js",
      "node": "./dist/node/media-transfer.js",
      "default": "./dist/media-transfer.js"
    },
    "./migration": {
      "types": "./dist/migration.d.ts",
      "browser": "./dist/browser/migration.js",
      "bun": "./dist/migration.js",
      "node": "./dist/node/migration.js",
      "default": "./dist/migration.js"
    },
    "./native-media": {
      "types": "./dist/native-media.d.ts",
      "browser": "./dist/browser/native-media.js",
      "bun": "./dist/native-media.js",
      "node": "./dist/node/native-media.js",
      "default": "./dist/native-media.js"
    },
    "./native-publication": {
      "types": "./dist/native-publication.d.ts",
      "browser": "./dist/browser/native-publication.js",
      "bun": "./dist/native-publication.js",
      "node": "./dist/node/native-publication.js",
      "default": "./dist/native-publication.js"
    },
    "./native-withdrawal": {
      "types": "./dist/native-withdrawal.d.ts",
      "browser": "./dist/browser/native-withdrawal.js",
      "bun": "./dist/native-withdrawal.js",
      "node": "./dist/node/native-withdrawal.js",
      "default": "./dist/native-withdrawal.js"
    },
    "./normalizer-entities": {
      "types": "./dist/normalizer-entities.d.ts",
      "browser": "./dist/browser/normalizer-entities.js",
      "bun": "./dist/normalizer-entities.js",
      "node": "./dist/node/normalizer-entities.js",
      "default": "./dist/normalizer-entities.js"
    },
    "./normalizer-social": {
      "types": "./dist/normalizer-social.d.ts",
      "browser": "./dist/browser/normalizer-social.js",
      "bun": "./dist/normalizer-social.js",
      "node": "./dist/node/normalizer-social.js",
      "default": "./dist/normalizer-social.js"
    },
    "./normalizer-values": {
      "types": "./dist/normalizer-values.d.ts",
      "browser": "./dist/browser/normalizer-values.js",
      "bun": "./dist/normalizer-values.js",
      "node": "./dist/node/normalizer-values.js",
      "default": "./dist/normalizer-values.js"
    },
    "./normalizers": {
      "types": "./dist/normalizers.d.ts",
      "browser": "./dist/browser/normalizers.js",
      "bun": "./dist/normalizers.js",
      "node": "./dist/node/normalizers.js",
      "default": "./dist/normalizers.js"
    },
    "./oauth": {
      "types": "./dist/oauth.d.ts",
      "browser": "./dist/browser/oauth.js",
      "bun": "./dist/oauth.js",
      "node": "./dist/node/oauth.js",
      "default": "./dist/oauth.js"
    },
    "./oauth-crypto": {
      "types": "./dist/oauth-crypto.d.ts",
      "browser": "./dist/browser/oauth-crypto.js",
      "bun": "./dist/oauth-crypto.js",
      "node": "./dist/node/oauth-crypto.js",
      "default": "./dist/oauth-crypto.js"
    },
    "./oauth-types": {
      "types": "./dist/oauth-types.d.ts",
      "browser": "./dist/browser/oauth-types.js",
      "bun": "./dist/oauth-types.js",
      "node": "./dist/node/oauth-types.js",
      "default": "./dist/oauth-types.js"
    },
    "./provider": {
      "types": "./dist/provider.d.ts",
      "browser": "./dist/browser/provider.js",
      "bun": "./dist/provider.js",
      "node": "./dist/node/provider.js",
      "default": "./dist/provider.js"
    },
    "./response-json": {
      "types": "./dist/response-json.d.ts",
      "browser": "./dist/browser/response-json.js",
      "bun": "./dist/response-json.js",
      "node": "./dist/node/response-json.js",
      "default": "./dist/response-json.js"
    },
    "./runtime-types": {
      "types": "./dist/runtime-types.d.ts",
      "browser": "./dist/browser/runtime-types.js",
      "bun": "./dist/runtime-types.js",
      "node": "./dist/node/runtime-types.js",
      "default": "./dist/runtime-types.js"
    },
    "./sales": {
      "types": "./dist/sales.d.ts",
      "browser": "./dist/browser/sales.js",
      "bun": "./dist/sales.js",
      "node": "./dist/node/sales.js",
      "default": "./dist/sales.js"
    },
    "./sync": {
      "types": "./dist/sync.d.ts",
      "browser": "./dist/browser/sync.js",
      "bun": "./dist/sync.js",
      "node": "./dist/node/sync.js",
      "default": "./dist/sync.js"
    },
    "./testing": {
      "types": "./dist/testing.d.ts",
      "browser": "./dist/browser/testing.js",
      "bun": "./dist/testing.js",
      "node": "./dist/node/testing.js",
      "default": "./dist/testing.js"
    },
    "./transport-snapshot": {
      "types": "./dist/transport-snapshot.d.ts",
      "browser": "./dist/browser/transport-snapshot.js",
      "bun": "./dist/transport-snapshot.js",
      "node": "./dist/node/transport-snapshot.js",
      "default": "./dist/transport-snapshot.js"
    },
    "./webhook-crypto": {
      "types": "./dist/webhook-crypto.d.ts",
      "browser": "./dist/browser/webhook-crypto.js",
      "bun": "./dist/webhook-crypto.js",
      "node": "./dist/node/webhook-crypto.js",
      "default": "./dist/webhook-crypto.js"
    },
    "./webhooks": {
      "types": "./dist/webhooks.d.ts",
      "browser": "./dist/browser/webhooks.js",
      "bun": "./dist/webhooks.js",
      "node": "./dist/node/webhooks.js",
      "default": "./dist/webhooks.js"
    }
  }
}
```

## Dependencies

Metadata status: complete pinned manifest.

### Runtime dependencies

- [@lssm-tech/lib.content-analysis-spec](https://lssm.co/docs/packages/lib.content-analysis-spec/): `workspace:^`
- [@lssm-tech/lib.contracts-integrations](https://lssm.co/docs/packages/lib.contracts-integrations/): `workspace:^`
- [@lssm-tech/lib.growth-spec](https://lssm.co/docs/packages/lib.growth-spec/): `workspace:^`

### Peer dependencies

No declarations in the inspected manifest.

### Optional dependencies

No declarations in the inspected manifest.

### Development dependencies

- [@lssm-tech/tool.bun](https://lssm.co/docs/packages/tool.bun/): `workspace:*`
- [@lssm-tech/tool.typescript](https://lssm.co/docs/packages/tool.typescript/): `workspace:*`
- `@types/bun`: `catalog:types`
- `typescript`: `catalog:`

### Peer dependency metadata

```json
{}
```

### Bundled dependencies

```json
null
```

## Package scripts

Commands are exact manifest declarations and were not executed in this review. Script metadata status: complete pinned manifest.

```json
{
  "build": "contractspec-bun-build build",
  "build:bundle": "contractspec-bun-build transpile",
  "build:types": "contractspec-bun-build types",
  "clean": "rimraf dist .turbo",
  "dev": "contractspec-bun-build dev",
  "lint:check": "node ../../../scripts/biome.cjs check .",
  "lint:fix": "node ../../../scripts/biome.cjs check --write --unsafe --only=nursery/useSortedClasses . && node ../../../scripts/biome.cjs check --write .",
  "prebuild": "contractspec-bun-build prebuild",
  "test": "bun test",
  "test:pack": "bun scripts/test-packed-imports.ts",
  "typecheck": "tsgo --noEmit"
}
```

## Declared documentation links

- [Integration Provider Linkedin documentation](https://www.npmjs.com/package/%40lssm-tech%2Fintegration.provider-linkedin) — declared link; destination not verified.

```json
{
  "url": "https://www.npmjs.com/package/%40lssm-tech%2Fintegration.provider-linkedin",
  "kind": "readme"
}
```

## Existing agent-guide projection

```json
{
  "path": "packages/apps/web-landing/public/llms-packages/integration.provider-linkedin.txt",
  "route": "/llms/integration.provider-linkedin",
  "sourceUrl": "https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/integration.provider-linkedin.txt",
  "blobSha": "b57ebfecdb35d6de75b9132b7cf688251a1893c7",
  "sourcePin": "bcc79fcc27c4d801c2119bef81ddcce7b4e86498",
  "bodyEqualsReadme": true,
  "aggregateSourcePath": "packages/apps/web-landing/public/llms-full.txt",
  "aggregateBlobSha": "691b1d33efee24c440598b9106c81432f56aafaf"
}
```
