-
Notifications
You must be signed in to change notification settings - Fork 325
[OPDATA-4082] Add Coinpaprika State adapter #4058
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🦋 Changeset detectedLatest commit: 83913f6 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
9e8c109
to
76c20cb
Compare
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
any reason why this is not a new endpoint on existing coinpaprika EA ? |
1156b6b
to
14c598a
Compare
Updated to use existing EA with new endpoint |
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
saw this pr randomly, there's an sse transport in the framework, what's the particular reason this adapter needs a custom one? |
@alejoberardino I investigated SseTransport but found it's designed around the usual EventSource/GET model (and optional separate sub/unsub/keepalive calls). The current design of Coinpaprika State API instead opens a single SSE connection via POST with a JSON body containing all pairs and expects reconnects when the pair set changes. Given that shape, SubscriptionTransport is a cleaner fit for batching pairs and managing one shared connection + reconnection logic. |
7a62e70
to
2842eb9
Compare
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/test/integration/adapter.test.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/test/integration/adapter.test.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
e4b859a
to
f2aa694
Compare
004f903
to
5e12ffb
Compare
- Remove complex stream parsing for HTTP error responses - Use simple HTTP status-based error messages like other EAs - Clean up 20+ lines of manual buffer concatenation - Improve maintainability and reduce error-prone code
packages/sources/coinpaprika-state/src/transport/sse-connection-manager.ts
Show resolved
Hide resolved
- Fix API_ENDPOINT default to avoid /stream/stream - Remove unused RECONNECT_DELAY_MS
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/sse-connection-manager.ts
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/sse-connection-manager.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/coinpaprika-state.ts
Outdated
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/sse-connection-manager.ts
Show resolved
Hide resolved
packages/sources/coinpaprika-state/src/transport/sse-connection-manager.ts
Outdated
Show resolved
Hide resolved
- Fix API error type separation (stream vs connection errors) - Optimize subscription lookup with O(1) Map.get() instead of O(n) Array.find() - Improve async error handling with proper Promise rejection handling - Remove unnecessary complexity and duplicate code
Just noting an assumption on this SSE transport: We assume each valid streamed message will contain 1 event and 1 data field. Changes to the data provider API message schema (multi-responses or otherwise) are not expected to work out of the box and would require further code changes. |
Description
Adds a new Coinpaprika State external adapter that streams state_price via Server-Sent Events (SSE).
See package README for full details
Changes
@chainlink/coinpaprika-state-adapter
coinpaprika-state
(alias:state
)Sample Input and Output
Sample Input
Using the alias
state
Without endpoint (uses default)
Sample Output
Example cURL Requests
Using the primary endpoint
coinpaprika-state
Using the alias
state
Without endpoint (uses default)
Steps to Test
yarn workspace @chainlink/coinpaprika-state-adapter build
yarn test packages/sources/coinpaprika-state/test/integration/adapter.test.ts
yarn test packages/sources/coinpaprika-state/test/unit/sse.test.ts
Quality Assurance
infra-k8s
configuration file.adapter-secrets
configuration file or update the soak testing blacklist.test-payload.json
file with relevant requests.feature/x
,chore/x
,release/x
,hotfix/x
,fix/x
) or is created from Jira.