# patmmccann/sharedid-edge architecture

> Architecture diagram of the GitHub repository patmmccann/sharedid-edge, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/patmmccann/sharedid-edge
- Repository: https://github.com/patmmccann/sharedid-edge

## Overview

SharedID Edge is an edge worker that makes Prebid SharedID durable with first-party cookies and can return additional edge-derived signals. A browser’s Prebid.js sync request reaches a platform adapter, which invokes the shared core request handler; the handler processes consent and identity, runs configured modules, and returns a response with cookies and signals. The README documents eight deployment targets and several built-in and vendor modules. Some subsystem links below reflect that documentation; unsampled implementation details are not inferred.

Main entry points: [`packages/core/src/handler.ts`](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/handler.ts) (Request handler), [`packages/core/src/modules.ts`](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/modules.ts) (Module runner), [`packages/vendor-modules`](https://github.com/patmmccann/sharedid-edge/tree/main/packages/vendor-modules) (Vendor modules), [`packages/adapters/akamai/src/handler.ts`](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/akamai/src/handler.ts) (Akamai adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Request adapters"]
  node_akamai["Akamai adapter<br/>[handler.ts]"]
  node_aws["AWS Lambda adapter<br/>[handler.ts]"]
  node_azure["Azure Functions adapter<br/>[handler.ts]"]
  node_cloudflare["Cloudflare adapter<br/>[worker.ts]"]
  node_fastly["Fastly adapter<br/>[main.ts]"]
  node_gcp["GCP Functions adapter<br/>[handler.ts]"]
  node_node["Node adapter<br/>[index.ts]"]
  node_vercel["Vercel adapter<br/>[handler.ts]"]
end

subgraph group_runtime["Shared core"]
  node_handler["Request handler<br/>[handler.ts]"]
  node_config["Configuration<br/>[config.ts]"]
  node_consent["Consent and TCF<br/>[consent.ts]"]
  node_modules["Module runner<br/>[modules.ts]"]
  node_traffic["Traffic signals<br/>[traffic.ts]"]
end

subgraph group_signals["Signal modules"]
  node_bot["Bot signals<br/>[index.ts]"]
  node_clickid["Click ID retention<br/>[index.ts]"]
  node_geo["Geolocation<br/>[index.ts]"]
  node_ip["Client IP<br/>[index.ts]"]
  node_reflect["Cookie reflection<br/>[index.ts]"]
  node_ua["Device and UA data<br/>[module.ts]"]
  node_vendor["Vendor modules"]
  node_ec["Edge Cookies module<br/>[index.ts]"]
end

subgraph group_ipdata["IP data"]
  node_ranges["IP range utilities"]
  node_dbip["DB-IP data<br/>[index.ts]"]
  node_maxmind["MaxMind data<br/>[index.ts]"]
end

node_browser(("Browser / Prebid.js"))

node_browser -->|"syncs through"| node_akamai
node_browser -->|"syncs through"| node_aws
node_browser -->|"syncs through"| node_azure
node_browser -->|"syncs through"| node_cloudflare
node_browser -->|"syncs through"| node_fastly
node_browser -->|"syncs through"| node_gcp
node_browser -->|"syncs through"| node_node
node_browser -->|"syncs through"| node_vercel
node_akamai -->|"invokes"| node_handler
node_aws -->|"invokes"| node_handler
node_azure -->|"invokes"| node_handler
node_cloudflare -->|"dispatches to"| node_handler
node_fastly -->|"dispatches to"| node_handler
node_gcp -->|"invokes"| node_handler
node_vercel -->|"invokes"| node_handler
node_handler -->|"runs modules"| node_modules
node_handler -->|"uses consent"| node_consent
node_handler -->|"reads settings"| node_config
node_handler -->|"merges traffic"| node_traffic
node_modules -->|"reports signals"| node_traffic
node_modules -.->|"can run"| node_bot
node_modules -.->|"can run"| node_clickid
node_modules -.->|"can run"| node_geo
node_modules -.->|"can run"| node_ip
node_modules -.->|"can run"| node_reflect
node_modules -.->|"can run"| node_ua
node_modules -.->|"can run"| node_vendor
node_vendor -->|"includes"| node_ec
node_vendor -->|"includes"| node_dbip
node_vendor -->|"includes"| node_maxmind

click node_akamai "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/akamai/src/handler.ts"
click node_aws "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/aws-lambda/src/handler.ts"
click node_azure "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/azure-functions/src/handler.ts"
click node_cloudflare "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/cloudflare/src/worker.ts"
click node_fastly "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/fastly/src/main.ts"
click node_gcp "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/gcp-functions/src/handler.ts"
click node_node "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/node/src/index.ts"
click node_vercel "https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/vercel/src/handler.ts"
click node_handler "https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/handler.ts"
click node_config "https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/config.ts"
click node_consent "https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/consent.ts"
click node_modules "https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/modules.ts"
click node_traffic "https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/traffic.ts"
click node_bot "https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/bot/src/index.ts"
click node_clickid "https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/clickid/src/index.ts"
click node_geo "https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/geo/src/index.ts"
click node_ip "https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/ip/src/index.ts"
click node_reflect "https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/reflect/src/index.ts"
click node_ua "https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/ua/src/module.ts"
click node_vendor "https://github.com/patmmccann/sharedid-edge/tree/main/packages/vendor-modules"
click node_ranges "https://github.com/patmmccann/sharedid-edge/tree/main/packages/ip-ranges/src"
click node_dbip "https://github.com/patmmccann/sharedid-edge/blob/main/packages/vendor-modules/dbip/src/index.ts"
click node_maxmind "https://github.com/patmmccann/sharedid-edge/blob/main/packages/vendor-modules/maxmind/src/index.ts"
click node_ec "https://github.com/patmmccann/sharedid-edge/blob/main/packages/vendor-modules/ec/src/index.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_akamai,node_aws,node_azure,node_cloudflare,node_fastly,node_gcp,node_node,node_vercel,node_browser toneBlue
class node_handler,node_config,node_consent,node_modules,node_traffic toneAmber
class node_bot,node_clickid,node_geo,node_ip,node_reflect,node_ua,node_vendor,node_ec toneMint
class node_ranges,node_dbip,node_maxmind toneRose
```

## Components

### Request adapters

- [Akamai adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/akamai/src/handler.ts): `packages/adapters/akamai/src/handler.ts`
- [AWS Lambda adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/aws-lambda/src/handler.ts): `packages/adapters/aws-lambda/src/handler.ts`
- [Azure Functions adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/azure-functions/src/handler.ts): `packages/adapters/azure-functions/src/handler.ts`
- [Cloudflare adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/cloudflare/src/worker.ts): `packages/adapters/cloudflare/src/worker.ts`
- [Fastly adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/fastly/src/main.ts): `packages/adapters/fastly/src/main.ts`
- [GCP Functions adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/gcp-functions/src/handler.ts): `packages/adapters/gcp-functions/src/handler.ts`
- [Node adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/node/src/index.ts): `packages/adapters/node/src/index.ts`
- [Vercel adapter](https://github.com/patmmccann/sharedid-edge/blob/main/packages/adapters/vercel/src/handler.ts): `packages/adapters/vercel/src/handler.ts`

### Shared core

- [Request handler](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/handler.ts): `packages/core/src/handler.ts`
- [Configuration](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/config.ts): `packages/core/src/config.ts`
- [Consent and TCF](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/consent.ts): `packages/core/src/consent.ts`
- [Module runner](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/modules.ts): `packages/core/src/modules.ts`
- [Traffic signals](https://github.com/patmmccann/sharedid-edge/blob/main/packages/core/src/traffic.ts): `packages/core/src/traffic.ts`

### Signal modules

- [Bot signals](https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/bot/src/index.ts): `packages/modules/bot/src/index.ts`
- [Click ID retention](https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/clickid/src/index.ts): `packages/modules/clickid/src/index.ts`
- [Geolocation](https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/geo/src/index.ts): `packages/modules/geo/src/index.ts`
- [Client IP](https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/ip/src/index.ts): `packages/modules/ip/src/index.ts`
- [Cookie reflection](https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/reflect/src/index.ts): `packages/modules/reflect/src/index.ts`
- [Device and UA data](https://github.com/patmmccann/sharedid-edge/blob/main/packages/modules/ua/src/module.ts): `packages/modules/ua/src/module.ts`
- [Vendor modules](https://github.com/patmmccann/sharedid-edge/tree/main/packages/vendor-modules): `packages/vendor-modules`
- [Edge Cookies module](https://github.com/patmmccann/sharedid-edge/blob/main/packages/vendor-modules/ec/src/index.ts): `packages/vendor-modules/ec/src/index.ts`

### IP data

- [IP range utilities](https://github.com/patmmccann/sharedid-edge/tree/main/packages/ip-ranges/src): `packages/ip-ranges/src`
- [DB-IP data](https://github.com/patmmccann/sharedid-edge/blob/main/packages/vendor-modules/dbip/src/index.ts): `packages/vendor-modules/dbip/src/index.ts`
- [MaxMind data](https://github.com/patmmccann/sharedid-edge/blob/main/packages/vendor-modules/maxmind/src/index.ts): `packages/vendor-modules/maxmind/src/index.ts`

### Other components

- **Browser / Prebid.js**

## Connections

- Browser / Prebid.js → Akamai adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → AWS Lambda adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → Azure Functions adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → Cloudflare adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → Fastly adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → GCP Functions adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → Node adapter: syncs through (evidence: `README.md`)
- Browser / Prebid.js → Vercel adapter: syncs through (evidence: `README.md`)
- Akamai adapter → Request handler: invokes (evidence: `packages/adapters/akamai/src/handler.ts`)
- AWS Lambda adapter → Request handler: invokes (evidence: `packages/adapters/aws-lambda/src/handler.ts`)
- Azure Functions adapter → Request handler: invokes (evidence: `packages/adapters/azure-functions/src/handler.ts`)
- Cloudflare adapter → Request handler: dispatches to (evidence: `packages/adapters/cloudflare/src/worker.ts`)
- Fastly adapter → Request handler: dispatches to (evidence: `packages/adapters/fastly/src/main.ts`)
- GCP Functions adapter → Request handler: invokes
- Vercel adapter → Request handler: invokes (evidence: `packages/adapters/vercel/src/handler.ts`)
- Request handler → Module runner: runs modules (evidence: `packages/core/src/handler.ts`)
- Request handler → Consent and TCF: uses consent (evidence: `packages/core/src/handler.ts`)
- Request handler → Configuration: reads settings (evidence: `packages/core/src/handler.ts`)
- Request handler → Traffic signals: merges traffic (evidence: `packages/core/src/handler.ts`)
- Module runner → Traffic signals: reports signals (evidence: `packages/core/src/modules.ts`)
- Module runner → Bot signals: can run (evidence: `README.md`)
- Module runner → Click ID retention: can run (evidence: `README.md`)
- Module runner → Geolocation: can run (evidence: `README.md`)
- Module runner → Client IP: can run (evidence: `README.md`)
- Module runner → Cookie reflection: can run (evidence: `README.md`)
- Module runner → Device and UA data: can run (evidence: `README.md`)
- Module runner → Vendor modules: can run (evidence: `README.md`)
- Vendor modules → Edge Cookies module: includes (evidence: `README.md`)
- Vendor modules → DB-IP data: includes (evidence: `README.md`)
- Vendor modules → MaxMind data: includes (evidence: `README.md`)
