# narotham99git/pub-sub-api architecture

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

- Interactive diagram: https://gitdiagram.com/narotham99git/pub-sub-api
- Repository: https://github.com/narotham99git/pub-sub-api

## Overview

This repository provides the Salesforce Pub/Sub API contract plus demonstration clients in Go, Java, and Python—not a single deployable service. The central workflow is authenticating a client, discovering topic/schema metadata, then publishing Avro events or subscribing with replay and processing received events. The Java samples also include managed subscriptions and an account-update application; Python includes inventory and Salesforce-listener examples. Edges reflect README claims and source-index references or shown calls; unsampled implementation details are not inferred.

Main entry points: [`java/src/main/java/utility/CommonContext.java`](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/CommonContext.java) (Java context), [`java/src/main/java/accountupdateapp/AccountListener.java`](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/accountupdateapp/AccountListener.java) (Account update app), [`go/grpcclient/grpcclient.go`](https://github.com/narotham99git/pub-sub-api/blob/main/go/grpcclient/grpcclient.go) (Go gRPC client), [`pubsub_api.proto`](https://github.com/narotham99git/pub-sub-api/blob/main/pubsub_api.proto) (Pub/Sub gRPC API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_contract["API contract"]
  node_api["Pub/Sub gRPC API<br/>[pubsub_api.proto]"]
end

subgraph group_clients["Pub/Sub clients"]
  node_go_client["Go gRPC client<br/>[grpcclient.go]"]
  node_go_auth["Go OAuth<br/>[oauth.go]"]
  node_go_common["Go settings<br/>[common.go]"]
end

subgraph group_java["Java samples"]
  node_java_config["Java configuration"]
  node_java_context["Java context<br/>[CommonContext.java]"]
  node_java_auth["Java session auth"]
  node_java_trace["Trace interceptor"]
  node_java_parser["Event parser<br/>[EventParser.java]"]
  node_java_topic["Topic discovery<br/>[GetTopic.java]"]
  node_java_schema["Schema discovery<br/>[GetSchema.java]"]
  node_java_publish["Event publishing<br/>[Publish.java]"]
  node_java_stream["Stream publishing<br/>[PublishStream.java]"]
  node_java_subscribe["Event subscription<br/>[Subscribe.java]"]
  node_java_managed["Managed subscription"]
  node_account_app["Account update app"]
  node_account_util["Account event utilities"]
end

subgraph group_python["Python examples"]
  node_python_pubsub["Python Pub/Sub client<br/>[PubSub.py]"]
  node_inventory["Inventory workflow<br/>[InventoryApp.py]"]
  node_salesforce_listener["Salesforce listener"]
  node_header_util["Change header utility"]
end

node_developer(("Client developer"))
node_salesforce{{"Salesforce platform"}}

node_developer -->|"uses contract"| node_api
node_api -->|"defines interface"| node_salesforce
node_go_client -->|"requests user info"| node_go_auth
node_go_client -->|"uses settings"| node_go_common
node_go_client -.->|"calls gRPC"| node_api
node_java_context -->|"reads options"| node_java_config
node_java_context -->|"logs in"| node_java_auth
node_java_context -->|"deserializes events"| node_java_parser
node_java_context -->|"configures interceptor"| node_java_trace
node_java_topic -->|"uses context"| node_java_context
node_java_schema -->|"uses context"| node_java_context
node_java_schema -->|"uses topic lookup"| node_java_topic
node_java_publish -->|"uses context"| node_java_context
node_java_stream -->|"reuses publisher"| node_java_publish
node_java_subscribe -->|"uses context"| node_java_context
node_java_managed -->|"uses context"| node_java_context
node_account_app -->|"uses helpers"| node_account_util
node_account_app -->|"uses context"| node_java_context
node_account_app -->|"publishes events"| node_java_publish
node_account_app -->|"subscribes"| node_java_subscribe
node_python_pubsub -.->|"authenticates and calls"| node_salesforce
node_inventory -->|"uses client"| node_python_pubsub
node_inventory -->|"decodes change fields"| node_header_util
node_salesforce_listener -->|"uses client"| node_python_pubsub
node_salesforce_listener -->|"processes headers"| node_header_util

click node_api "https://github.com/narotham99git/pub-sub-api/blob/main/pubsub_api.proto"
click node_go_client "https://github.com/narotham99git/pub-sub-api/blob/main/go/grpcclient/grpcclient.go"
click node_go_auth "https://github.com/narotham99git/pub-sub-api/blob/main/go/oauth/oauth.go"
click node_go_common "https://github.com/narotham99git/pub-sub-api/blob/main/go/common/common.go"
click node_java_config "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/ExampleConfigurations.java"
click node_java_context "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/CommonContext.java"
click node_java_auth "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/SessionTokenService.java"
click node_java_trace "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/XClientTraceIdClientInterceptor.java"
click node_java_parser "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/EventParser.java"
click node_java_topic "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/GetTopic.java"
click node_java_schema "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/GetSchema.java"
click node_java_publish "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/Publish.java"
click node_java_stream "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/PublishStream.java"
click node_java_subscribe "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/Subscribe.java"
click node_java_managed "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/ManagedSubscribe.java"
click node_account_app "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/accountupdateapp/AccountListener.java"
click node_account_util "https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/accountupdateapp/AccountUpdateAppUtil.java"
click node_python_pubsub "https://github.com/narotham99git/pub-sub-api/blob/main/python/InventoryAppExample/PubSub.py"
click node_inventory "https://github.com/narotham99git/pub-sub-api/blob/main/python/InventoryAppExample/InventoryApp.py"
click node_salesforce_listener "https://github.com/narotham99git/pub-sub-api/blob/main/python/InventoryAppExample/SalesforceListener.py"
click node_header_util "https://github.com/narotham99git/pub-sub-api/blob/main/python/util/ChangeEventHeaderUtility.py"

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_api,node_developer toneBlue
class node_go_client,node_go_auth,node_go_common toneAmber
class node_java_config,node_java_context,node_java_auth,node_java_trace,node_java_parser,node_java_topic,node_java_schema,node_java_publish,node_java_stream,node_java_subscribe,node_java_managed,node_account_app,node_account_util toneMint
class node_python_pubsub,node_inventory,node_salesforce_listener,node_header_util toneRose
class node_salesforce toneIndigo
```

## Components

### API contract

- [Pub/Sub gRPC API](https://github.com/narotham99git/pub-sub-api/blob/main/pubsub_api.proto): `pubsub_api.proto`

### Pub/Sub clients

- [Go gRPC client](https://github.com/narotham99git/pub-sub-api/blob/main/go/grpcclient/grpcclient.go): `go/grpcclient/grpcclient.go`
- [Go OAuth](https://github.com/narotham99git/pub-sub-api/blob/main/go/oauth/oauth.go): `go/oauth/oauth.go`
- [Go settings](https://github.com/narotham99git/pub-sub-api/blob/main/go/common/common.go): `go/common/common.go`

### Java samples

- [Java configuration](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/ExampleConfigurations.java): `java/src/main/java/utility/ExampleConfigurations.java`
- [Java context](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/CommonContext.java): `java/src/main/java/utility/CommonContext.java`
- [Java session auth](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/SessionTokenService.java): `java/src/main/java/utility/SessionTokenService.java`
- [Trace interceptor](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/XClientTraceIdClientInterceptor.java): `java/src/main/java/utility/XClientTraceIdClientInterceptor.java`
- [Event parser](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/utility/EventParser.java): `java/src/main/java/utility/EventParser.java`
- [Topic discovery](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/GetTopic.java): `java/src/main/java/genericpubsub/GetTopic.java`
- [Schema discovery](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/GetSchema.java): `java/src/main/java/genericpubsub/GetSchema.java`
- [Event publishing](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/Publish.java): `java/src/main/java/genericpubsub/Publish.java`
- [Stream publishing](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/PublishStream.java): `java/src/main/java/genericpubsub/PublishStream.java`
- [Event subscription](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/Subscribe.java): `java/src/main/java/genericpubsub/Subscribe.java`
- [Managed subscription](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/genericpubsub/ManagedSubscribe.java): `java/src/main/java/genericpubsub/ManagedSubscribe.java`
- [Account update app](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/accountupdateapp/AccountListener.java): `java/src/main/java/accountupdateapp/AccountListener.java`
- [Account event utilities](https://github.com/narotham99git/pub-sub-api/blob/main/java/src/main/java/accountupdateapp/AccountUpdateAppUtil.java): `java/src/main/java/accountupdateapp/AccountUpdateAppUtil.java`

### Python examples

- [Python Pub/Sub client](https://github.com/narotham99git/pub-sub-api/blob/main/python/InventoryAppExample/PubSub.py): `python/InventoryAppExample/PubSub.py`
- [Inventory workflow](https://github.com/narotham99git/pub-sub-api/blob/main/python/InventoryAppExample/InventoryApp.py): `python/InventoryAppExample/InventoryApp.py`
- [Salesforce listener](https://github.com/narotham99git/pub-sub-api/blob/main/python/InventoryAppExample/SalesforceListener.py): `python/InventoryAppExample/SalesforceListener.py`
- [Change header utility](https://github.com/narotham99git/pub-sub-api/blob/main/python/util/ChangeEventHeaderUtility.py): `python/util/ChangeEventHeaderUtility.py`

### Other components

- **Client developer**
- **Salesforce platform**

## Connections

- Client developer → Pub/Sub gRPC API: uses contract (evidence: `README.md`)
- Pub/Sub gRPC API → Salesforce platform: defines interface (evidence: `README.md`)
- Go gRPC client → Go OAuth: requests user info (evidence: `go/grpcclient/grpcclient.go`)
- Go gRPC client → Go settings: uses settings (evidence: `go/grpcclient/grpcclient.go`)
- Go gRPC client → Pub/Sub gRPC API: calls gRPC
- Java context → Java configuration: reads options (evidence: `java/src/main/java/utility/CommonContext.java`)
- Java context → Java session auth: logs in (evidence: `java/src/main/java/utility/CommonContext.java`)
- Java context → Event parser: deserializes events (evidence: `java/src/main/java/utility/CommonContext.java`)
- Java context → Trace interceptor: configures interceptor (evidence: `java/src/main/java/utility/CommonContext.java`)
- Topic discovery → Java context: uses context (evidence: `java/src/main/java/genericpubsub/GetTopic.java`)
- Schema discovery → Java context: uses context (evidence: `java/src/main/java/genericpubsub/GetSchema.java`)
- Schema discovery → Topic discovery: uses topic lookup (evidence: `java/src/main/java/genericpubsub/GetSchema.java`)
- Event publishing → Java context: uses context (evidence: `java/src/main/java/genericpubsub/Publish.java`)
- Stream publishing → Event publishing: reuses publisher (evidence: `java/src/main/java/genericpubsub/PublishStream.java`)
- Event subscription → Java context: uses context (evidence: `java/src/main/java/genericpubsub/Subscribe.java`)
- Managed subscription → Java context: uses context (evidence: `java/src/main/java/genericpubsub/ManagedSubscribe.java`)
- Account update app → Account event utilities: uses helpers (evidence: `java/src/main/java/accountupdateapp/AccountListener.java`)
- Account update app → Java context: uses context (evidence: `java/src/main/java/accountupdateapp/AccountListener.java`)
- Account update app → Event publishing: publishes events (evidence: `java/src/main/java/accountupdateapp/AccountListener.java`)
- Account update app → Event subscription: subscribes (evidence: `java/src/main/java/accountupdateapp/AccountListener.java`)
- Python Pub/Sub client → Salesforce platform: authenticates and calls
- Inventory workflow → Python Pub/Sub client: uses client (evidence: `python/InventoryAppExample/InventoryApp.py`)
- Inventory workflow → Change header utility: decodes change fields (evidence: `python/InventoryAppExample/InventoryApp.py`)
- Salesforce listener → Python Pub/Sub client: uses client (evidence: `python/InventoryAppExample/SalesforceListener.py`)
- Salesforce listener → Change header utility: processes headers (evidence: `python/InventoryAppExample/SalesforceListener.py`)
