Escape hatch for exchanges whose subscribe frames don't fit any named
pattern. The module dispatches on config[:custom_type]:
| custom_type | Exchange | Shape |
|---|---|---|
"array_format" | Upbit | [[%{type, codes}, ...]] — array of maps |
"sendTopicAction" | Deepcoin | Nested sendTopicAction envelope |
| (default) | — fallback | %{"subscribe" => true, "channels" => […]} |
subscribe/2 for Upbit returns a [map()] (one envelope per channel);
all others return a single map(). Callers must pass config[:custom_type]
explicitly — no priority-tier exchange wires this pattern in T94 (custom
DEX exchanges like Hyperliquid/Derive/Lighter are deferred).