@augustdigital/sdk 4.15.5-alpha.0 → 4.17.0-alpha.0

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.
Files changed (117) hide show
  1. package/lib/abis/AddressResolver.d.ts +28 -40
  2. package/lib/abis/ChainlinkV3.d.ts +83 -109
  3. package/lib/abis/ERC20.d.ts +137 -191
  4. package/lib/abis/ERC20_Bytes32.d.ts +125 -178
  5. package/lib/abis/ERC4626.d.ts +341 -480
  6. package/lib/abis/ERC721.d.ts +213 -299
  7. package/lib/abis/FeeOracle.d.ts +112 -149
  8. package/lib/abis/LendingPool.d.ts +1293 -1702
  9. package/lib/abis/LendingPoolV2.d.ts +37 -42
  10. package/lib/abis/LendingPoolV3.d.ts +25 -29
  11. package/lib/abis/Loan.d.ts +768 -1007
  12. package/lib/abis/Multicall3.d.ts +30 -43
  13. package/lib/abis/PoolAdapter.d.ts +35 -46
  14. package/lib/abis/RewardDistributor.d.ts +33 -38
  15. package/lib/abis/SmartAccount.d.ts +16 -23
  16. package/lib/abis/TextResolver.d.ts +16 -23
  17. package/lib/abis/TokenizedVaultV2.d.ts +1292 -1684
  18. package/lib/abis/TokenizedVaultV2DepositWithPermit.d.ts +55 -62
  19. package/lib/abis/TokenizedVaultV2Receipt.d.ts +1463 -1934
  20. package/lib/abis/TokenizedVaultV2WhitelistedAssets.d.ts +250 -333
  21. package/lib/abis/UniversalResolverResolve.d.ts +69 -97
  22. package/lib/abis/UniversalSignatureValidator.d.ts +17 -23
  23. package/lib/abis/WrapperAdapter.d.ts +67 -89
  24. package/lib/adapters/evm/getters.d.ts +2 -8
  25. package/lib/adapters/evm/index.d.ts +15 -19
  26. package/lib/adapters/evm/utils.d.ts +2 -12
  27. package/lib/adapters/solana/constants.d.ts +17 -23
  28. package/lib/adapters/solana/getters.d.ts +1 -4
  29. package/lib/adapters/solana/idl/vault-idl.d.ts +279 -340
  30. package/lib/adapters/solana/index.d.ts +116 -212
  31. package/lib/adapters/solana/types.d.ts +50 -50
  32. package/lib/adapters/solana/utils.d.ts +78 -139
  33. package/lib/adapters/solana/vault.actions.d.ts +12 -37
  34. package/lib/adapters/sui/constants.d.ts +9 -9
  35. package/lib/adapters/sui/constants.js +8 -1
  36. package/lib/adapters/sui/constants.js.map +1 -1
  37. package/lib/adapters/sui/getters.d.ts +1 -3
  38. package/lib/adapters/sui/index.d.ts +21 -29
  39. package/lib/adapters/sui/transformer.d.ts +2 -6
  40. package/lib/adapters/sui/types.d.ts +56 -56
  41. package/lib/adapters/sui/utils.d.ts +1 -4
  42. package/lib/core/analytics/constants.d.ts +12 -0
  43. package/lib/core/analytics/constants.js +49 -0
  44. package/lib/core/analytics/constants.js.map +1 -0
  45. package/lib/core/analytics/index.d.ts +6 -0
  46. package/lib/core/analytics/index.js +31 -0
  47. package/lib/core/analytics/index.js.map +1 -0
  48. package/lib/core/analytics/instrumentation.d.ts +2 -0
  49. package/lib/core/analytics/instrumentation.js +150 -0
  50. package/lib/core/analytics/instrumentation.js.map +1 -0
  51. package/lib/core/analytics/metrics.d.ts +12 -0
  52. package/lib/core/analytics/metrics.js +133 -0
  53. package/lib/core/analytics/metrics.js.map +1 -0
  54. package/lib/core/analytics/sentry.d.ts +9 -0
  55. package/lib/core/analytics/sentry.js +166 -0
  56. package/lib/core/analytics/sentry.js.map +1 -0
  57. package/lib/core/analytics/types.d.ts +21 -0
  58. package/lib/core/analytics/types.js +3 -0
  59. package/lib/core/analytics/types.js.map +1 -0
  60. package/lib/core/analytics/user-identity.d.ts +8 -0
  61. package/lib/core/analytics/user-identity.js +82 -0
  62. package/lib/core/analytics/user-identity.js.map +1 -0
  63. package/lib/core/analytics/version.d.ts +1 -0
  64. package/lib/core/analytics/version.js +5 -0
  65. package/lib/core/analytics/version.js.map +1 -0
  66. package/lib/core/base.class.d.ts +25 -30
  67. package/lib/core/base.class.js +5 -1
  68. package/lib/core/base.class.js.map +1 -1
  69. package/lib/core/constants/adapters.d.ts +83 -111
  70. package/lib/core/constants/core.d.ts +69 -76
  71. package/lib/core/constants/vaults.d.ts +5 -63
  72. package/lib/core/constants/vaults.js +3 -3
  73. package/lib/core/constants/vaults.js.map +1 -1
  74. package/lib/core/constants/web3.d.ts +18 -19
  75. package/lib/core/fetcher.d.ts +17 -71
  76. package/lib/core/fetcher.js +20 -2
  77. package/lib/core/fetcher.js.map +1 -1
  78. package/lib/core/helpers/adapters.d.ts +2 -7
  79. package/lib/core/helpers/core.d.ts +8 -33
  80. package/lib/core/helpers/signer.d.ts +2 -6
  81. package/lib/core/helpers/vaults.d.ts +15 -38
  82. package/lib/core/helpers/web3.d.ts +19 -87
  83. package/lib/core/index.d.ts +1 -0
  84. package/lib/core/index.js +1 -0
  85. package/lib/core/index.js.map +1 -1
  86. package/lib/core/logger/index.d.ts +11 -11
  87. package/lib/core/logger/slack.d.ts +8 -9
  88. package/lib/index.d.ts +1 -61
  89. package/lib/main.d.ts +141 -158
  90. package/lib/main.js +3 -0
  91. package/lib/main.js.map +1 -1
  92. package/lib/modules/vaults/adapter.helpers.d.ts +38 -72
  93. package/lib/modules/vaults/fetcher.d.ts +69 -85
  94. package/lib/modules/vaults/getters.d.ts +100 -205
  95. package/lib/modules/vaults/index.d.ts +1 -6
  96. package/lib/modules/vaults/main.d.ts +131 -224
  97. package/lib/modules/vaults/main.js +8 -1
  98. package/lib/modules/vaults/main.js.map +1 -1
  99. package/lib/modules/vaults/read.actions.d.ts +2 -8
  100. package/lib/modules/vaults/utils.d.ts +19 -55
  101. package/lib/modules/vaults/write.actions.d.ts +14 -26
  102. package/lib/services/coingecko/fetcher.d.ts +1 -4
  103. package/lib/services/debank/fetcher.d.ts +1 -4
  104. package/lib/services/debank/utils.d.ts +27 -38
  105. package/lib/services/octavfi/fetcher.d.ts +1 -3
  106. package/lib/services/octavfi/types.d.ts +24 -24
  107. package/lib/services/octavfi/utils.d.ts +2 -6
  108. package/lib/services/subgraph/fetcher.d.ts +2 -12
  109. package/lib/services/subgraph/vaults.d.ts +9 -42
  110. package/lib/types/points.d.ts +26 -35
  111. package/lib/types/pools.d.ts +112 -149
  112. package/lib/types/staking.d.ts +25 -25
  113. package/lib/types/subgraph.d.ts +33 -33
  114. package/lib/types/vaults.d.ts +219 -232
  115. package/lib/types/web3.d.ts +9 -9
  116. package/lib/types/webserver.d.ts +448 -466
  117. package/package.json +16 -13
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.instrumentClass = exports.withMethodTracking = exports.resetCacheStats = exports.getCacheStats = exports.trackNetworkSwitch = exports.trackApiCall = exports.trackCacheOperation = exports.resetAnalytics = exports.getSentry = exports.isAnalyticsEnabled = exports.clearUser = exports.updateUser = exports.initializeSentry = exports.resetSession = exports.getUserId = exports.createUserIdentity = exports.generateFingerprint = exports.getSessionId = exports.hashApiKey = exports.getMethodCategory = exports.METHOD_CATEGORIES = exports.SENTRY_CONFIG = void 0;
4
+ var constants_1 = require("./constants");
5
+ Object.defineProperty(exports, "SENTRY_CONFIG", { enumerable: true, get: function () { return constants_1.SENTRY_CONFIG; } });
6
+ Object.defineProperty(exports, "METHOD_CATEGORIES", { enumerable: true, get: function () { return constants_1.METHOD_CATEGORIES; } });
7
+ Object.defineProperty(exports, "getMethodCategory", { enumerable: true, get: function () { return constants_1.getMethodCategory; } });
8
+ var user_identity_1 = require("./user-identity");
9
+ Object.defineProperty(exports, "hashApiKey", { enumerable: true, get: function () { return user_identity_1.hashApiKey; } });
10
+ Object.defineProperty(exports, "getSessionId", { enumerable: true, get: function () { return user_identity_1.getSessionId; } });
11
+ Object.defineProperty(exports, "generateFingerprint", { enumerable: true, get: function () { return user_identity_1.generateFingerprint; } });
12
+ Object.defineProperty(exports, "createUserIdentity", { enumerable: true, get: function () { return user_identity_1.createUserIdentity; } });
13
+ Object.defineProperty(exports, "getUserId", { enumerable: true, get: function () { return user_identity_1.getUserId; } });
14
+ Object.defineProperty(exports, "resetSession", { enumerable: true, get: function () { return user_identity_1.resetSession; } });
15
+ var sentry_1 = require("./sentry");
16
+ Object.defineProperty(exports, "initializeSentry", { enumerable: true, get: function () { return sentry_1.initializeSentry; } });
17
+ Object.defineProperty(exports, "updateUser", { enumerable: true, get: function () { return sentry_1.updateUser; } });
18
+ Object.defineProperty(exports, "clearUser", { enumerable: true, get: function () { return sentry_1.clearUser; } });
19
+ Object.defineProperty(exports, "isAnalyticsEnabled", { enumerable: true, get: function () { return sentry_1.isAnalyticsEnabled; } });
20
+ Object.defineProperty(exports, "getSentry", { enumerable: true, get: function () { return sentry_1.getSentry; } });
21
+ Object.defineProperty(exports, "resetAnalytics", { enumerable: true, get: function () { return sentry_1.resetAnalytics; } });
22
+ var metrics_1 = require("./metrics");
23
+ Object.defineProperty(exports, "trackCacheOperation", { enumerable: true, get: function () { return metrics_1.trackCacheOperation; } });
24
+ Object.defineProperty(exports, "trackApiCall", { enumerable: true, get: function () { return metrics_1.trackApiCall; } });
25
+ Object.defineProperty(exports, "trackNetworkSwitch", { enumerable: true, get: function () { return metrics_1.trackNetworkSwitch; } });
26
+ Object.defineProperty(exports, "getCacheStats", { enumerable: true, get: function () { return metrics_1.getCacheStats; } });
27
+ Object.defineProperty(exports, "resetCacheStats", { enumerable: true, get: function () { return metrics_1.resetCacheStats; } });
28
+ var instrumentation_1 = require("./instrumentation");
29
+ Object.defineProperty(exports, "withMethodTracking", { enumerable: true, get: function () { return instrumentation_1.withMethodTracking; } });
30
+ Object.defineProperty(exports, "instrumentClass", { enumerable: true, get: function () { return instrumentation_1.instrumentClass; } });
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src.ts/core/analytics/index.ts"],"names":[],"mappings":";;;AAmCA,yCAIqB;AAHnB,0GAAA,aAAa,OAAA;AACb,8GAAA,iBAAiB,OAAA;AACjB,8GAAA,iBAAiB,OAAA;AAInB,iDAOyB;AANvB,2GAAA,UAAU,OAAA;AACV,6GAAA,YAAY,OAAA;AACZ,oHAAA,mBAAmB,OAAA;AACnB,mHAAA,kBAAkB,OAAA;AAClB,0GAAA,SAAS,OAAA;AACT,6GAAA,YAAY,OAAA;AAId,mCAOkB;AANhB,0GAAA,gBAAgB,OAAA;AAChB,oGAAA,UAAU,OAAA;AACV,mGAAA,SAAS,OAAA;AACT,4GAAA,kBAAkB,OAAA;AAClB,mGAAA,SAAS,OAAA;AACT,wGAAA,cAAc,OAAA;AAIhB,qCAMmB;AALjB,8GAAA,mBAAmB,OAAA;AACnB,uGAAA,YAAY,OAAA;AACZ,6GAAA,kBAAkB,OAAA;AAClB,wGAAA,aAAa,OAAA;AACb,0GAAA,eAAe,OAAA;AAIjB,qDAAwE;AAA/D,qHAAA,kBAAkB,OAAA;AAAE,kHAAA,eAAe,OAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function withMethodTracking<T extends (...args: unknown[]) => Promise<unknown>>(methodName: string, method: T, getChainId?: () => number | undefined): T;
2
+ export declare function instrumentClass<T extends object>(instance: T, getChainId: () => number | undefined): T;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.withMethodTracking = withMethodTracking;
37
+ exports.instrumentClass = instrumentClass;
38
+ const Sentry = __importStar(require("@sentry/node"));
39
+ const constants_1 = require("./constants");
40
+ const sentry_1 = require("./sentry");
41
+ function withMethodTracking(methodName, method, getChainId) {
42
+ return async function trackedMethod(...args) {
43
+ if (!(0, sentry_1.isAnalyticsEnabled)()) {
44
+ return method(...args);
45
+ }
46
+ const startTime = performance.now();
47
+ const chainId = getChainId?.();
48
+ const category = (0, constants_1.getMethodCategory)(methodName);
49
+ try {
50
+ return await Sentry.startSpan({
51
+ op: 'sdk.method',
52
+ name: methodName,
53
+ attributes: {
54
+ category,
55
+ chainId: chainId?.toString() || 'unknown',
56
+ },
57
+ }, async (span) => {
58
+ try {
59
+ const result = await method(...args);
60
+ const duration = performance.now() - startTime;
61
+ span?.setAttribute('duration', Math.round(duration));
62
+ span?.setAttribute('success', true);
63
+ trackMethodCall(methodName, {
64
+ method: methodName,
65
+ chainId,
66
+ duration,
67
+ success: true,
68
+ category,
69
+ });
70
+ span?.setStatus({ code: 1 });
71
+ return result;
72
+ }
73
+ catch (error) {
74
+ const duration = performance.now() - startTime;
75
+ const errorType = error instanceof Error ? error.name : 'UnknownError';
76
+ span?.setAttribute('duration', Math.round(duration));
77
+ span?.setAttribute('success', false);
78
+ span?.setAttribute('error', error instanceof Error ? error.message : String(error));
79
+ trackMethodCall(methodName, {
80
+ method: methodName,
81
+ chainId,
82
+ duration,
83
+ success: false,
84
+ category,
85
+ errorType,
86
+ });
87
+ span?.setStatus({ code: 2, message: errorType });
88
+ throw error;
89
+ }
90
+ });
91
+ }
92
+ catch (error) {
93
+ if (error instanceof Error && error.message?.includes('Sentry')) {
94
+ return method(...args);
95
+ }
96
+ throw error;
97
+ }
98
+ };
99
+ }
100
+ function trackMethodCall(methodName, metrics) {
101
+ try {
102
+ Sentry.addBreadcrumb({
103
+ category: 'sdk.method',
104
+ message: methodName,
105
+ level: metrics.success ? 'info' : 'error',
106
+ data: {
107
+ chainId: metrics.chainId,
108
+ duration: Math.round(metrics.duration),
109
+ category: metrics.category,
110
+ errorType: metrics.errorType,
111
+ },
112
+ });
113
+ Sentry.setMeasurement('sdk.method.duration', metrics.duration, 'millisecond');
114
+ Sentry.setTag('sdk.last_method', methodName);
115
+ Sentry.setTag('sdk.last_category', metrics.category);
116
+ if (metrics.chainId) {
117
+ Sentry.setTag('sdk.last_chainId', metrics.chainId.toString());
118
+ }
119
+ }
120
+ catch {
121
+ }
122
+ }
123
+ function isAsyncMethod(fn) {
124
+ if (fn.constructor.name === 'AsyncFunction') {
125
+ return true;
126
+ }
127
+ const fnString = fn.toString();
128
+ return fnString.includes('__awaiter') || fnString.startsWith('async');
129
+ }
130
+ function instrumentClass(instance, getChainId) {
131
+ try {
132
+ const proto = Object.getPrototypeOf(instance);
133
+ const methodNames = Object.getOwnPropertyNames(proto).filter((name) => {
134
+ if (name === 'constructor' || name.startsWith('_'))
135
+ return false;
136
+ const descriptor = Object.getOwnPropertyDescriptor(proto, name);
137
+ return typeof descriptor?.value === 'function';
138
+ });
139
+ for (const methodName of methodNames) {
140
+ const original = instance[methodName];
141
+ if (typeof original === 'function' && isAsyncMethod(original)) {
142
+ instance[methodName] = withMethodTracking(methodName, original.bind(instance), getChainId);
143
+ }
144
+ }
145
+ }
146
+ catch {
147
+ }
148
+ return instance;
149
+ }
150
+ //# sourceMappingURL=instrumentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../../src.ts/core/analytics/instrumentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { ICacheOperation, ICacheType } from './types';
2
+ declare let cacheStats: {
3
+ hits: number;
4
+ misses: number;
5
+ sets: number;
6
+ };
7
+ export declare function trackCacheOperation(operation: ICacheOperation, cacheType: ICacheType): void;
8
+ export declare function trackApiCall(endpoint: string, method: string, startTime: number, status: number, server: string): void;
9
+ export declare function trackNetworkSwitch(chainId: number): void;
10
+ export declare function getCacheStats(): typeof cacheStats;
11
+ export declare function resetCacheStats(): void;
12
+ export {};
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.trackCacheOperation = trackCacheOperation;
37
+ exports.trackApiCall = trackApiCall;
38
+ exports.trackNetworkSwitch = trackNetworkSwitch;
39
+ exports.getCacheStats = getCacheStats;
40
+ exports.resetCacheStats = resetCacheStats;
41
+ const Sentry = __importStar(require("@sentry/node"));
42
+ const sentry_1 = require("./sentry");
43
+ let cacheStats = {
44
+ hits: 0,
45
+ misses: 0,
46
+ sets: 0,
47
+ };
48
+ function trackCacheOperation(operation, cacheType) {
49
+ if (!(0, sentry_1.isAnalyticsEnabled)())
50
+ return;
51
+ try {
52
+ switch (operation) {
53
+ case 'hit':
54
+ cacheStats.hits++;
55
+ break;
56
+ case 'miss':
57
+ cacheStats.misses++;
58
+ break;
59
+ case 'set':
60
+ cacheStats.sets++;
61
+ break;
62
+ }
63
+ const totalLookups = cacheStats.hits + cacheStats.misses;
64
+ const hitRate = totalLookups > 0 ? cacheStats.hits / totalLookups : 0;
65
+ Sentry.addBreadcrumb({
66
+ category: 'cache',
67
+ message: `${cacheType}:${operation}`,
68
+ level: 'debug',
69
+ data: {
70
+ cacheType,
71
+ operation,
72
+ hitRate: hitRate.toFixed(3),
73
+ totalOperations: cacheStats.hits + cacheStats.misses + cacheStats.sets,
74
+ },
75
+ });
76
+ }
77
+ catch {
78
+ }
79
+ }
80
+ function trackApiCall(endpoint, method, startTime, status, server) {
81
+ if (!(0, sentry_1.isAnalyticsEnabled)())
82
+ return;
83
+ try {
84
+ const duration = performance.now() - startTime;
85
+ const normalizedEndpoint = normalizeEndpoint(endpoint);
86
+ Sentry.addBreadcrumb({
87
+ category: 'api',
88
+ message: `${method} ${normalizedEndpoint}`,
89
+ level: status >= 400 || status === 0 ? 'error' : 'info',
90
+ data: {
91
+ endpoint: normalizedEndpoint,
92
+ method,
93
+ duration: Math.round(duration),
94
+ status,
95
+ server,
96
+ },
97
+ });
98
+ Sentry.setMeasurement('api.duration', duration, 'millisecond');
99
+ Sentry.setTag('api.last_endpoint', normalizedEndpoint);
100
+ Sentry.setTag('api.server', server);
101
+ }
102
+ catch {
103
+ }
104
+ }
105
+ function trackNetworkSwitch(chainId) {
106
+ if (!(0, sentry_1.isAnalyticsEnabled)())
107
+ return;
108
+ try {
109
+ Sentry.addBreadcrumb({
110
+ category: 'network',
111
+ message: `Switched to chain ${chainId}`,
112
+ level: 'info',
113
+ data: { chainId },
114
+ });
115
+ Sentry.setTag('active.chainId', chainId.toString());
116
+ }
117
+ catch {
118
+ }
119
+ }
120
+ function normalizeEndpoint(endpoint) {
121
+ return (endpoint
122
+ .replace(/0x[a-fA-F0-9]{40}/g, ':address')
123
+ .replace(/\/\d{5,}/g, '/:chainId')
124
+ .replace(/[a-f0-9-]{36}/gi, ':uuid')
125
+ .replace(/\/\d+(?=\/|$)/g, '/:id'));
126
+ }
127
+ function getCacheStats() {
128
+ return { ...cacheStats };
129
+ }
130
+ function resetCacheStats() {
131
+ cacheStats = { hits: 0, misses: 0, sets: 0 };
132
+ }
133
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src.ts/core/analytics/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import * as Sentry from '@sentry/node';
2
+ import { IEnv } from '../../types';
3
+ import { IAnalyticsConfig } from './types';
4
+ export declare function initializeSentry(config: IAnalyticsConfig, environment: IEnv, walletAddress?: string, apiKey?: string): void;
5
+ export declare function updateUser(walletAddress?: string, environment?: IEnv): void;
6
+ export declare function clearUser(): void;
7
+ export declare function isAnalyticsEnabled(): boolean;
8
+ export declare function getSentry(): typeof Sentry | null;
9
+ export declare function resetAnalytics(): void;
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.initializeSentry = initializeSentry;
37
+ exports.updateUser = updateUser;
38
+ exports.clearUser = clearUser;
39
+ exports.isAnalyticsEnabled = isAnalyticsEnabled;
40
+ exports.getSentry = getSentry;
41
+ exports.resetAnalytics = resetAnalytics;
42
+ const Sentry = __importStar(require("@sentry/node"));
43
+ const constants_1 = require("./constants");
44
+ const user_identity_1 = require("./user-identity");
45
+ let isInitialized = false;
46
+ let isEnabled = true;
47
+ let currentIdentity = null;
48
+ let cachedApiKey;
49
+ function getSDKVersion() {
50
+ try {
51
+ return require('./version').SDK_VERSION || 'development';
52
+ }
53
+ catch {
54
+ return 'development';
55
+ }
56
+ }
57
+ function safeSetTag(key, value) {
58
+ try {
59
+ Sentry.setTag(key, value);
60
+ }
61
+ catch {
62
+ }
63
+ }
64
+ function safeSetUser(user) {
65
+ try {
66
+ Sentry.setUser(user);
67
+ }
68
+ catch {
69
+ }
70
+ }
71
+ function initializeSentry(config, environment, walletAddress, apiKey) {
72
+ if (config.enabled === false) {
73
+ isEnabled = false;
74
+ console.log('August SDK: Analytics disabled');
75
+ return;
76
+ }
77
+ cachedApiKey = apiKey;
78
+ if (isInitialized) {
79
+ if (walletAddress !== currentIdentity?.walletAddress ||
80
+ environment !== currentIdentity?.environment) {
81
+ updateUser(walletAddress, environment);
82
+ }
83
+ return;
84
+ }
85
+ try {
86
+ Sentry.init({
87
+ dsn: constants_1.SENTRY_DSN,
88
+ tracesSampleRate: constants_1.SENTRY_CONFIG.tracesSampleRate,
89
+ environment: environment.toLowerCase(),
90
+ release: `august-sdk@${getSDKVersion()}`,
91
+ sendDefaultPii: true,
92
+ beforeSend(event) {
93
+ if (event.tags?.sdk !== 'august-digital') {
94
+ return null;
95
+ }
96
+ return event;
97
+ },
98
+ beforeSendTransaction(transaction) {
99
+ return transaction;
100
+ },
101
+ });
102
+ updateUser(walletAddress, environment);
103
+ safeSetTag('sdk', 'august-digital');
104
+ safeSetTag('sdk.version', getSDKVersion());
105
+ isInitialized = true;
106
+ console.log('August SDK: Analytics initialized. Disable with { analytics: { enabled: false } }');
107
+ }
108
+ catch {
109
+ isEnabled = false;
110
+ }
111
+ }
112
+ function updateUser(walletAddress, environment = 'PROD') {
113
+ if (!isEnabled)
114
+ return;
115
+ try {
116
+ currentIdentity = (0, user_identity_1.createUserIdentity)(cachedApiKey, walletAddress, environment);
117
+ safeSetUser({
118
+ id: (0, user_identity_1.getUserId)(currentIdentity),
119
+ username: walletAddress || undefined,
120
+ data: {
121
+ sessionId: currentIdentity.sessionId,
122
+ fingerprint: currentIdentity.fingerprint,
123
+ hasWallet: !!walletAddress,
124
+ hasApiKey: !!currentIdentity.apiKeyHash,
125
+ environment: currentIdentity.environment,
126
+ },
127
+ });
128
+ }
129
+ catch {
130
+ }
131
+ }
132
+ function clearUser() {
133
+ if (!isEnabled)
134
+ return;
135
+ try {
136
+ const environment = currentIdentity?.environment || 'PROD';
137
+ currentIdentity = (0, user_identity_1.createUserIdentity)(cachedApiKey, undefined, environment);
138
+ safeSetUser({
139
+ id: (0, user_identity_1.getUserId)(currentIdentity),
140
+ data: {
141
+ sessionId: currentIdentity.sessionId,
142
+ fingerprint: currentIdentity.fingerprint,
143
+ hasWallet: false,
144
+ hasApiKey: !!currentIdentity.apiKeyHash,
145
+ environment: currentIdentity.environment,
146
+ },
147
+ });
148
+ }
149
+ catch {
150
+ }
151
+ }
152
+ function isAnalyticsEnabled() {
153
+ return isEnabled && isInitialized;
154
+ }
155
+ function getSentry() {
156
+ if (!isAnalyticsEnabled())
157
+ return null;
158
+ return Sentry;
159
+ }
160
+ function resetAnalytics() {
161
+ isInitialized = false;
162
+ isEnabled = true;
163
+ currentIdentity = null;
164
+ cachedApiKey = undefined;
165
+ }
166
+ //# sourceMappingURL=sentry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../../src.ts/core/analytics/sentry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { IEnv } from '../../types';
2
+ export interface IAnalyticsConfig {
3
+ enabled?: boolean;
4
+ }
5
+ export interface IUserIdentity {
6
+ apiKeyHash?: string;
7
+ walletAddress?: string;
8
+ sessionId: string;
9
+ fingerprint?: string;
10
+ environment: IEnv;
11
+ }
12
+ export interface IMethodCallMetrics {
13
+ method: string;
14
+ chainId?: number;
15
+ duration: number;
16
+ success: boolean;
17
+ category: string;
18
+ errorType?: string;
19
+ }
20
+ export type ICacheOperation = 'hit' | 'miss' | 'set';
21
+ export type ICacheType = 'main' | 'price' | 'price_error';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src.ts/core/analytics/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { IEnv } from '../../types';
2
+ import { IUserIdentity } from './types';
3
+ export declare function hashApiKey(apiKey: string): string;
4
+ export declare function getSessionId(): string;
5
+ export declare function generateFingerprint(): string | undefined;
6
+ export declare function createUserIdentity(apiKey?: string, walletAddress?: string, environment?: IEnv): IUserIdentity;
7
+ export declare function getUserId(identity: IUserIdentity): string;
8
+ export declare function resetSession(): void;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hashApiKey = hashApiKey;
4
+ exports.getSessionId = getSessionId;
5
+ exports.generateFingerprint = generateFingerprint;
6
+ exports.createUserIdentity = createUserIdentity;
7
+ exports.getUserId = getUserId;
8
+ exports.resetSession = resetSession;
9
+ const crypto_1 = require("crypto");
10
+ const uuid_1 = require("uuid");
11
+ let sessionId = null;
12
+ let cachedApiKeyHash = null;
13
+ function hashApiKey(apiKey) {
14
+ if (!apiKey)
15
+ return '';
16
+ if (cachedApiKeyHash)
17
+ return cachedApiKeyHash;
18
+ const hash = (0, crypto_1.createHash)('sha256').update(apiKey).digest('hex');
19
+ cachedApiKeyHash = hash.substring(0, 16);
20
+ return cachedApiKeyHash;
21
+ }
22
+ function getSessionId() {
23
+ if (!sessionId) {
24
+ sessionId = (0, uuid_1.v4)();
25
+ }
26
+ return sessionId;
27
+ }
28
+ function generateFingerprint() {
29
+ try {
30
+ if (typeof window !== 'undefined' && typeof navigator !== 'undefined') {
31
+ const components = [
32
+ navigator.userAgent,
33
+ navigator.language,
34
+ new Date().getTimezoneOffset().toString(),
35
+ typeof screen !== 'undefined' ? screen.width?.toString() : '',
36
+ typeof screen !== 'undefined' ? screen.height?.toString() : '',
37
+ typeof screen !== 'undefined' ? screen.colorDepth?.toString() : '',
38
+ ].filter(Boolean);
39
+ const hash = (0, crypto_1.createHash)('sha256')
40
+ .update(components.join('|'))
41
+ .digest('hex');
42
+ return hash.substring(0, 32);
43
+ }
44
+ if (typeof process !== 'undefined' && process.platform) {
45
+ const components = [process.platform, process.arch, process.version];
46
+ const hash = (0, crypto_1.createHash)('sha256')
47
+ .update(components.join('|'))
48
+ .digest('hex');
49
+ return hash.substring(0, 32);
50
+ }
51
+ }
52
+ catch {
53
+ return undefined;
54
+ }
55
+ return undefined;
56
+ }
57
+ function createUserIdentity(apiKey, walletAddress, environment = 'PROD') {
58
+ return {
59
+ apiKeyHash: apiKey ? hashApiKey(apiKey) : undefined,
60
+ walletAddress: walletAddress?.toLowerCase(),
61
+ sessionId: getSessionId(),
62
+ fingerprint: generateFingerprint(),
63
+ environment,
64
+ };
65
+ }
66
+ function getUserId(identity) {
67
+ if (identity.apiKeyHash) {
68
+ return `apikey:${identity.apiKeyHash}`;
69
+ }
70
+ if (identity.walletAddress) {
71
+ return `wallet:${identity.walletAddress}`;
72
+ }
73
+ if (identity.fingerprint) {
74
+ return `fp:${identity.fingerprint}`;
75
+ }
76
+ return `session:${identity.sessionId}`;
77
+ }
78
+ function resetSession() {
79
+ sessionId = null;
80
+ cachedApiKeyHash = null;
81
+ }
82
+ //# sourceMappingURL=user-identity.js.map