@timmeck/trading-brain 2.31.22 → 2.31.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -24,45 +24,55 @@ function createMockRepo() {
|
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
describe('PriceFetcher', () => {
|
|
27
|
-
describe('
|
|
27
|
+
describe('Per-provider rate limiting', () => {
|
|
28
28
|
it('should have rate limiting properties initialized', () => {
|
|
29
29
|
const repo = createMockRepo();
|
|
30
30
|
const fetcher = new PriceFetcher(mockConfig, repo);
|
|
31
|
-
|
|
32
|
-
expect(fetcher.
|
|
33
|
-
expect(fetcher.
|
|
34
|
-
expect(fetcher.MAX_CONSECUTIVE_ERRORS).toBe(5);
|
|
31
|
+
expect(fetcher.providerErrors).toBeInstanceOf(Map);
|
|
32
|
+
expect(fetcher.providerBackoff).toBeInstanceOf(Map);
|
|
33
|
+
expect(fetcher.MAX_CONSECUTIVE_ERRORS).toBe(3);
|
|
35
34
|
});
|
|
36
|
-
it('should track consecutive errors and compute backoff', () => {
|
|
35
|
+
it('should track consecutive errors per provider and compute backoff', () => {
|
|
37
36
|
const repo = createMockRepo();
|
|
38
37
|
const fetcher = new PriceFetcher(mockConfig, repo);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
fetcher.recordError();
|
|
38
|
+
for (let i = 0; i < 3; i++) {
|
|
39
|
+
fetcher.recordProviderError('coingecko');
|
|
42
40
|
}
|
|
43
|
-
expect(fetcher.
|
|
44
|
-
expect(fetcher.
|
|
41
|
+
expect(fetcher.providerErrors.get('coingecko')).toBe(3);
|
|
42
|
+
expect(fetcher.getBackoff('coingecko')).toBeGreaterThan(0);
|
|
43
|
+
// Yahoo should be unaffected
|
|
44
|
+
expect(fetcher.getBackoff('yahoo')).toBe(0);
|
|
45
45
|
});
|
|
46
|
-
it('should reset error tracking on success', () => {
|
|
46
|
+
it('should reset error tracking on provider success', () => {
|
|
47
47
|
const repo = createMockRepo();
|
|
48
48
|
const fetcher = new PriceFetcher(mockConfig, repo);
|
|
49
|
-
// Simulate errors then success
|
|
50
49
|
for (let i = 0; i < 5; i++) {
|
|
51
|
-
fetcher.
|
|
50
|
+
fetcher.recordProviderError('yahoo');
|
|
52
51
|
}
|
|
53
|
-
expect(fetcher.
|
|
54
|
-
fetcher.
|
|
55
|
-
expect(fetcher.
|
|
56
|
-
expect(fetcher.
|
|
52
|
+
expect(fetcher.providerErrors.get('yahoo')).toBe(5);
|
|
53
|
+
fetcher.recordProviderSuccess('yahoo');
|
|
54
|
+
expect(fetcher.providerErrors.get('yahoo')).toBe(0);
|
|
55
|
+
expect(fetcher.getBackoff('yahoo')).toBe(0);
|
|
57
56
|
});
|
|
58
|
-
it('should cap backoff at
|
|
57
|
+
it('should cap backoff at MAX_BACKOFF_MS', () => {
|
|
59
58
|
const repo = createMockRepo();
|
|
60
59
|
const fetcher = new PriceFetcher(mockConfig, repo);
|
|
61
|
-
// Simulate many errors
|
|
62
60
|
for (let i = 0; i < 20; i++) {
|
|
63
|
-
fetcher.
|
|
61
|
+
fetcher.recordProviderError('coingecko');
|
|
62
|
+
}
|
|
63
|
+
expect(fetcher.getBackoff('coingecko')).toBeLessThanOrEqual(30_000);
|
|
64
|
+
});
|
|
65
|
+
it('should isolate providers from each other', () => {
|
|
66
|
+
const repo = createMockRepo();
|
|
67
|
+
const fetcher = new PriceFetcher(mockConfig, repo);
|
|
68
|
+
for (let i = 0; i < 5; i++) {
|
|
69
|
+
fetcher.recordProviderError('coingecko');
|
|
64
70
|
}
|
|
65
|
-
|
|
71
|
+
fetcher.recordProviderError('yahoo');
|
|
72
|
+
expect(fetcher.providerErrors.get('coingecko')).toBe(5);
|
|
73
|
+
expect(fetcher.providerErrors.get('yahoo')).toBe(1);
|
|
74
|
+
expect(fetcher.getBackoff('coingecko')).toBeGreaterThan(0);
|
|
75
|
+
expect(fetcher.getBackoff('yahoo')).toBe(0);
|
|
66
76
|
});
|
|
67
77
|
});
|
|
68
78
|
describe('Cache', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price-fetcher.test.js","sourceRoot":"","sources":["../../../src/paper/__tests__/price-fetcher.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAc,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,UAAU,GAAgB;IAC9B,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,OAAO;IACnB,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,CAAC,GAAG;IACjB,aAAa,EAAE,CAAC;IAChB,sBAAsB,EAAE,CAAC;IACzB,oBAAoB,EAAE,GAAG;IACzB,mBAAmB,EAAE,IAAI;IACzB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,CAAC,SAAS,CAAC;IACtB,YAAY,EAAE,CAAC,MAAM,CAAC;CACvB,CAAC;AAEF,SAAS,cAAc;IACrB,OAAO;QACL,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;QAC5C,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;KACxB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"price-fetcher.test.js","sourceRoot":"","sources":["../../../src/paper/__tests__/price-fetcher.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timmeck/trading-brain",
|
|
3
|
-
"version": "2.31.
|
|
3
|
+
"version": "2.31.24",
|
|
4
4
|
"description": "Adaptive trading intelligence system with Hebbian synapses, spreading activation, Wilson Score confidence, and adaptive calibration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|