55
66import com .fasterxml .jackson .databind .JsonNode ;
77
8- import dev .andstuff .kraken .api .model . KrakenCredentials ;
9- import dev .andstuff .kraken .api .model . endpoint .account .LedgerEntriesEndpoint ;
10- import dev .andstuff .kraken .api .model . endpoint .account .LedgerInfoEndpoint ;
11- import dev .andstuff .kraken .api .model . endpoint .account .params .LedgerEntriesParams ;
12- import dev .andstuff .kraken .api .model . endpoint .account .params . LedgerInfoParams ;
13- import dev .andstuff .kraken .api .model . endpoint .account .response .LedgerEntry ;
14- import dev .andstuff .kraken .api .model . endpoint .account . response . LedgerInfo ;
15- import dev .andstuff .kraken .api .model . endpoint .market .AssetInfoEndpoint ;
16- import dev .andstuff .kraken .api .model . endpoint .market .AssetPairEndpoint ;
17- import dev .andstuff .kraken .api .model . endpoint .market .ServerTimeEndpoint ;
18- import dev .andstuff .kraken .api .model . endpoint .market .SystemStatusEndpoint ;
19- import dev .andstuff .kraken .api .model . endpoint .market .TickerEndpoint ;
20- import dev .andstuff .kraken .api .model . endpoint .market .params . AssetPairParams ;
21- import dev .andstuff .kraken .api .model . endpoint .market .response .AssetInfo ;
22- import dev .andstuff .kraken .api .model . endpoint .market .response .AssetPair ;
23- import dev .andstuff .kraken .api .model . endpoint .market .response .ServerTime ;
24- import dev .andstuff .kraken .api .model . endpoint .market .response .SystemStatus ;
25- import dev .andstuff .kraken .api .model . endpoint .market . response . Ticker ;
26- import dev .andstuff .kraken .api .model . endpoint .priv .JsonPrivateEndpoint ;
27- import dev .andstuff .kraken .api .model . endpoint .pub .JsonPublicEndpoint ;
8+ import dev .andstuff .kraken .api .endpoint . account . LedgerEntriesEndpoint ;
9+ import dev .andstuff .kraken .api .endpoint .account .LedgerInfoEndpoint ;
10+ import dev .andstuff .kraken .api .endpoint .account .params . LedgerEntriesParams ;
11+ import dev .andstuff .kraken .api .endpoint .account .params .LedgerInfoParams ;
12+ import dev .andstuff .kraken .api .endpoint .account .response . LedgerEntry ;
13+ import dev .andstuff .kraken .api .endpoint .account .response .LedgerInfo ;
14+ import dev .andstuff .kraken .api .endpoint .market . AssetInfoEndpoint ;
15+ import dev .andstuff .kraken .api .endpoint .market .AssetPairEndpoint ;
16+ import dev .andstuff .kraken .api .endpoint .market .ServerTimeEndpoint ;
17+ import dev .andstuff .kraken .api .endpoint .market .SystemStatusEndpoint ;
18+ import dev .andstuff .kraken .api .endpoint .market .TickerEndpoint ;
19+ import dev .andstuff .kraken .api .endpoint .market .params . AssetPairParams ;
20+ import dev .andstuff .kraken .api .endpoint .market .response . AssetInfo ;
21+ import dev .andstuff .kraken .api .endpoint .market .response .AssetPair ;
22+ import dev .andstuff .kraken .api .endpoint .market .response .ServerTime ;
23+ import dev .andstuff .kraken .api .endpoint .market .response .SystemStatus ;
24+ import dev .andstuff .kraken .api .endpoint .market .response .Ticker ;
25+ import dev .andstuff .kraken .api .endpoint .priv . JsonPrivateEndpoint ;
26+ import dev .andstuff .kraken .api .endpoint .priv .PrivateEndpoint ;
27+ import dev .andstuff .kraken .api .endpoint .pub .JsonPublicEndpoint ;
2828import dev .andstuff .kraken .api .rest .DefaultKrakenRestRequester ;
29+ import dev .andstuff .kraken .api .rest .EpochBasedNonceGenerator ;
30+ import dev .andstuff .kraken .api .rest .KrakenCredentials ;
31+ import dev .andstuff .kraken .api .rest .KrakenNonceGenerator ;
2932import dev .andstuff .kraken .api .rest .KrakenRestRequester ;
33+ import lombok .Builder ;
3034import lombok .Getter ;
3135import lombok .RequiredArgsConstructor ;
3236
37+ @ Builder (toBuilder = true )
3338public class KrakenAPI {
3439
40+ private final KrakenCredentials credentials ;
41+ private final KrakenNonceGenerator nonceGenerator ;
3542 private final KrakenRestRequester restRequester ;
3643
3744 public KrakenAPI () {
38- this (new DefaultKrakenRestRequester ());
45+ this (null , new DefaultKrakenRestRequester ());
46+ }
47+
48+ public KrakenAPI (String key , String secret ) {
49+ this (new KrakenCredentials (key , secret ));
3950 }
4051
4152 public KrakenAPI (KrakenCredentials credentials ) {
42- this (new DefaultKrakenRestRequester (credentials ));
53+ this (credentials , new DefaultKrakenRestRequester ());
4354 }
4455
45- public KrakenAPI (String key , String secret ) {
46- this (new DefaultKrakenRestRequester (key , secret ));
56+ public KrakenAPI (KrakenCredentials credentials , KrakenNonceGenerator nonceGenerator ) {
57+ this (credentials , nonceGenerator , new DefaultKrakenRestRequester ());
58+ }
59+
60+ public KrakenAPI (KrakenCredentials credentials , KrakenRestRequester restRequester ) {
61+ this (credentials , new EpochBasedNonceGenerator (), restRequester );
4762 }
4863
49- public KrakenAPI (KrakenRestRequester restRequester ) {
64+ public KrakenAPI (KrakenCredentials credentials , KrakenNonceGenerator nonceGenerator , KrakenRestRequester restRequester ) {
65+ this .credentials = credentials ;
66+ this .nonceGenerator = nonceGenerator ;
5067 this .restRequester = restRequester ;
5168 }
5269
@@ -83,11 +100,15 @@ public Map<String, Ticker> ticker(List<String> pairs) {
83100 /* Implemented private endpoints */
84101
85102 public LedgerInfo ledgerInfo (LedgerInfoParams params ) {
86- return restRequester . execute (new LedgerInfoEndpoint (params ));
103+ return executePrivate (new LedgerInfoEndpoint (params ));
87104 }
88105
89106 public Map <String , LedgerEntry > ledgerEntries (LedgerEntriesParams params ) {
90- return restRequester .execute (new LedgerEntriesEndpoint (params ));
107+ return executePrivate (new LedgerEntriesEndpoint (params ));
108+ }
109+
110+ private <T > T executePrivate (PrivateEndpoint <T > endpoint ) {
111+ return restRequester .execute (endpoint , credentials , nonceGenerator );
91112 }
92113
93114 /* Query unimplemented endpoints */
@@ -109,27 +130,26 @@ public JsonNode queryPublic(String path, Map<String, String> queryParams) {
109130 }
110131
111132 public JsonNode query (Private endpoint ) {
112- return restRequester . execute (new JsonPrivateEndpoint (endpoint .getPath ()));
133+ return executePrivate (new JsonPrivateEndpoint (endpoint .getPath ()));
113134 }
114135
115136 public JsonNode query (Private endpoint , Map <String , String > params ) {
116- return restRequester . execute (new JsonPrivateEndpoint (endpoint .getPath (), params ));
137+ return executePrivate (new JsonPrivateEndpoint (endpoint .getPath (), params ));
117138 }
118139
119140 public JsonNode queryPrivate (String path ) {
120- return restRequester . execute (new JsonPrivateEndpoint (path ));
141+ return executePrivate (new JsonPrivateEndpoint (path ));
121142 }
122143
123144 public JsonNode queryPrivate (String path , Map <String , String > params ) {
124- return restRequester . execute (new JsonPrivateEndpoint (path , params ));
145+ return executePrivate (new JsonPrivateEndpoint (path , params ));
125146 }
126147
127148 /* All endpoints */
128149
129150 @ Getter
130151 @ RequiredArgsConstructor
131152 public enum Public {
132-
133153 ASSETS ("Assets" ),
134154 ASSET_PAIRS ("AssetPairs" ),
135155 DEPTH ("Depth" ),
@@ -146,7 +166,6 @@ public enum Public {
146166 @ Getter
147167 @ RequiredArgsConstructor
148168 public enum Private {
149-
150169 ACCOUNT_TRANSFER ("AccountTransfer" ),
151170 ADD_EXPORT ("AddExport" ),
152171 ADD_ORDER ("AddOrder" ),
0 commit comments