@venturialstd/circle 0.0.1

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 (110) hide show
  1. package/README.md +171 -0
  2. package/dist/circle.module.d.ts +3 -0
  3. package/dist/circle.module.d.ts.map +1 -0
  4. package/dist/circle.module.js +61 -0
  5. package/dist/circle.module.js.map +1 -0
  6. package/dist/constants/circle.constant.d.ts +71 -0
  7. package/dist/constants/circle.constant.d.ts.map +1 -0
  8. package/dist/constants/circle.constant.js +84 -0
  9. package/dist/constants/circle.constant.js.map +1 -0
  10. package/dist/constants/circle.settings.constant.d.ts +7 -0
  11. package/dist/constants/circle.settings.constant.d.ts.map +1 -0
  12. package/dist/constants/circle.settings.constant.js +10 -0
  13. package/dist/constants/circle.settings.constant.js.map +1 -0
  14. package/dist/constants/index.d.ts +3 -0
  15. package/dist/constants/index.d.ts.map +1 -0
  16. package/dist/constants/index.js +19 -0
  17. package/dist/constants/index.js.map +1 -0
  18. package/dist/entities/circle-api-operation.entity.d.ts +19 -0
  19. package/dist/entities/circle-api-operation.entity.d.ts.map +1 -0
  20. package/dist/entities/circle-api-operation.entity.js +112 -0
  21. package/dist/entities/circle-api-operation.entity.js.map +1 -0
  22. package/dist/entities/circle-challenge.entity.d.ts +17 -0
  23. package/dist/entities/circle-challenge.entity.d.ts.map +1 -0
  24. package/dist/entities/circle-challenge.entity.js +98 -0
  25. package/dist/entities/circle-challenge.entity.js.map +1 -0
  26. package/dist/entities/circle-nft-balance.entity.d.ts +16 -0
  27. package/dist/entities/circle-nft-balance.entity.d.ts.map +1 -0
  28. package/dist/entities/circle-nft-balance.entity.js +97 -0
  29. package/dist/entities/circle-nft-balance.entity.js.map +1 -0
  30. package/dist/entities/circle-token-balance.entity.d.ts +17 -0
  31. package/dist/entities/circle-token-balance.entity.d.ts.map +1 -0
  32. package/dist/entities/circle-token-balance.entity.js +102 -0
  33. package/dist/entities/circle-token-balance.entity.js.map +1 -0
  34. package/dist/entities/circle-token.entity.d.ts +17 -0
  35. package/dist/entities/circle-token.entity.d.ts.map +1 -0
  36. package/dist/entities/circle-token.entity.js +102 -0
  37. package/dist/entities/circle-token.entity.js.map +1 -0
  38. package/dist/entities/circle-transaction.entity.d.ts +53 -0
  39. package/dist/entities/circle-transaction.entity.d.ts.map +1 -0
  40. package/dist/entities/circle-transaction.entity.js +215 -0
  41. package/dist/entities/circle-transaction.entity.js.map +1 -0
  42. package/dist/entities/circle-wallet-set.entity.d.ts +11 -0
  43. package/dist/entities/circle-wallet-set.entity.d.ts.map +1 -0
  44. package/dist/entities/circle-wallet-set.entity.js +71 -0
  45. package/dist/entities/circle-wallet-set.entity.js.map +1 -0
  46. package/dist/entities/circle-wallet.entity.d.ts +21 -0
  47. package/dist/entities/circle-wallet.entity.d.ts.map +1 -0
  48. package/dist/entities/circle-wallet.entity.js +118 -0
  49. package/dist/entities/circle-wallet.entity.js.map +1 -0
  50. package/dist/entities/index.d.ts +9 -0
  51. package/dist/entities/index.d.ts.map +1 -0
  52. package/dist/entities/index.js +25 -0
  53. package/dist/entities/index.js.map +1 -0
  54. package/dist/index.d.ts +23 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +39 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/services/circle-api-operation.service.d.ts +8 -0
  59. package/dist/services/circle-api-operation.service.d.ts.map +1 -0
  60. package/dist/services/circle-api-operation.service.js +34 -0
  61. package/dist/services/circle-api-operation.service.js.map +1 -0
  62. package/dist/services/circle-api.service.d.ts +24 -0
  63. package/dist/services/circle-api.service.d.ts.map +1 -0
  64. package/dist/services/circle-api.service.js +172 -0
  65. package/dist/services/circle-api.service.js.map +1 -0
  66. package/dist/services/circle-challenge.service.d.ts +14 -0
  67. package/dist/services/circle-challenge.service.d.ts.map +1 -0
  68. package/dist/services/circle-challenge.service.js +81 -0
  69. package/dist/services/circle-challenge.service.js.map +1 -0
  70. package/dist/services/circle-nft-balance.service.d.ts +14 -0
  71. package/dist/services/circle-nft-balance.service.d.ts.map +1 -0
  72. package/dist/services/circle-nft-balance.service.js +92 -0
  73. package/dist/services/circle-nft-balance.service.js.map +1 -0
  74. package/dist/services/circle-token-balance.service.d.ts +16 -0
  75. package/dist/services/circle-token-balance.service.d.ts.map +1 -0
  76. package/dist/services/circle-token-balance.service.js +146 -0
  77. package/dist/services/circle-token-balance.service.js.map +1 -0
  78. package/dist/services/circle-token.service.d.ts +11 -0
  79. package/dist/services/circle-token.service.d.ts.map +1 -0
  80. package/dist/services/circle-token.service.js +62 -0
  81. package/dist/services/circle-token.service.js.map +1 -0
  82. package/dist/services/circle-transaction.service.d.ts +16 -0
  83. package/dist/services/circle-transaction.service.d.ts.map +1 -0
  84. package/dist/services/circle-transaction.service.js +148 -0
  85. package/dist/services/circle-transaction.service.js.map +1 -0
  86. package/dist/services/circle-wallet-set.service.d.ts +15 -0
  87. package/dist/services/circle-wallet-set.service.d.ts.map +1 -0
  88. package/dist/services/circle-wallet-set.service.js +95 -0
  89. package/dist/services/circle-wallet-set.service.js.map +1 -0
  90. package/dist/services/circle-wallet.service.d.ts +19 -0
  91. package/dist/services/circle-wallet.service.d.ts.map +1 -0
  92. package/dist/services/circle-wallet.service.js +275 -0
  93. package/dist/services/circle-wallet.service.js.map +1 -0
  94. package/dist/services/index.d.ts +10 -0
  95. package/dist/services/index.d.ts.map +1 -0
  96. package/dist/services/index.js +26 -0
  97. package/dist/services/index.js.map +1 -0
  98. package/dist/settings/circle.settings.d.ts +3 -0
  99. package/dist/settings/circle.settings.d.ts.map +1 -0
  100. package/dist/settings/circle.settings.js +55 -0
  101. package/dist/settings/circle.settings.js.map +1 -0
  102. package/dist/types/circle-api.types.d.ts +127 -0
  103. package/dist/types/circle-api.types.d.ts.map +1 -0
  104. package/dist/types/circle-api.types.js +3 -0
  105. package/dist/types/circle-api.types.js.map +1 -0
  106. package/dist/types/index.d.ts +2 -0
  107. package/dist/types/index.d.ts.map +1 -0
  108. package/dist/types/index.js +18 -0
  109. package/dist/types/index.js.map +1 -0
  110. package/package.json +94 -0
@@ -0,0 +1,24 @@
1
+ import { CircleDeveloperControlledWalletsClient } from '@circle-fin/developer-controlled-wallets';
2
+ import { HttpService } from '@nestjs/axios';
3
+ import { SettingsService } from '@venturialstd/core';
4
+ import { Repository } from 'typeorm';
5
+ import { CircleApiOperationType } from '../constants/circle.constant';
6
+ import { CircleApiOperation } from '../entities/circle-api-operation.entity';
7
+ export declare class CircleApiService {
8
+ private readonly httpService;
9
+ private readonly settingsService;
10
+ private readonly apiOperationRepo;
11
+ private readonly logger;
12
+ private readonly defaultBaseUrl;
13
+ constructor(httpService: HttpService, settingsService: SettingsService, apiOperationRepo: Repository<CircleApiOperation>);
14
+ logApiOperation(operationType: CircleApiOperationType, endpoint: string, method: string, requestPayload?: Record<string, unknown>, responsePayload?: Record<string, unknown>, statusCode?: number, errorMessage?: string, responseTime?: number, correlationId?: string): Promise<CircleApiOperation>;
15
+ private getSettings;
16
+ getEntitySecretCiphertext(): Promise<string | undefined>;
17
+ makeApiCall<T>(operationType: CircleApiOperationType, endpoint: string, method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE', body?: Record<string, unknown>, correlationId?: string, additionalHeaders?: Record<string, string>): Promise<T>;
18
+ getApiKey(): Promise<string>;
19
+ getBaseUrl(): Promise<string>;
20
+ getDeveloperClient(): Promise<CircleDeveloperControlledWalletsClient>;
21
+ getPublicKey(): Promise<string>;
22
+ generateEntitySecretCiphertext(): Promise<string>;
23
+ }
24
+ //# sourceMappingURL=circle-api.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-api.service.d.ts","sourceRoot":"","sources":["../../src/services/circle-api.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sCAAsC,EAGvC,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAA4B,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAE7E,qBACa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAEhC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAPnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;gBAGxC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAEhC,gBAAgB,EAAE,UAAU,CAAC,kBAAkB,CAAC;IAM7D,eAAe,CACnB,aAAa,EAAE,sBAAsB,EACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC;YA2BhB,WAAW;IAqBnB,yBAAyB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQxD,WAAW,CAAC,CAAC,EACjB,aAAa,EAAE,sBAAsB,EACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAgB,EAC3D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,aAAa,CAAC,EAAE,MAAM,EACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,OAAO,CAAC,CAAC,CAAC;IAuEP,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ5B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ7B,kBAAkB,IAAI,OAAO,CAAC,sCAAsC,CAAC;IAmBrE,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAiC/B,8BAA8B,IAAI,OAAO,CAAC,MAAM,CAAC;CAqCxD"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var CircleApiService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CircleApiService = void 0;
17
+ const developer_controlled_wallets_1 = require("@circle-fin/developer-controlled-wallets");
18
+ const axios_1 = require("@nestjs/axios");
19
+ const common_1 = require("@nestjs/common");
20
+ const typeorm_1 = require("@nestjs/typeorm");
21
+ const core_1 = require("@venturialstd/core");
22
+ const rxjs_1 = require("rxjs");
23
+ const typeorm_2 = require("typeorm");
24
+ const circle_constant_1 = require("../constants/circle.constant");
25
+ const circle_settings_constant_1 = require("../constants/circle.settings.constant");
26
+ const circle_api_operation_entity_1 = require("../entities/circle-api-operation.entity");
27
+ let CircleApiService = CircleApiService_1 = class CircleApiService {
28
+ httpService;
29
+ settingsService;
30
+ apiOperationRepo;
31
+ logger = new common_1.Logger(CircleApiService_1.name);
32
+ defaultBaseUrl = 'https://api.circle.com';
33
+ constructor(httpService, settingsService, apiOperationRepo) {
34
+ this.httpService = httpService;
35
+ this.settingsService = settingsService;
36
+ this.apiOperationRepo = apiOperationRepo;
37
+ }
38
+ async logApiOperation(operationType, endpoint, method, requestPayload, responsePayload, statusCode, errorMessage, responseTime, correlationId) {
39
+ const status = statusCode && statusCode >= 200 && statusCode < 300
40
+ ? circle_constant_1.CircleApiOperationStatus.SUCCESS
41
+ : errorMessage
42
+ ? circle_constant_1.CircleApiOperationStatus.ERROR
43
+ : circle_constant_1.CircleApiOperationStatus.PENDING;
44
+ const operation = this.apiOperationRepo.create({
45
+ operationType,
46
+ status,
47
+ endpoint,
48
+ method,
49
+ requestPayload: requestPayload ? JSON.parse(JSON.stringify(requestPayload)) : null,
50
+ responsePayload: responsePayload ? JSON.parse(JSON.stringify(responsePayload)) : null,
51
+ statusCode,
52
+ errorMessage,
53
+ responseTime,
54
+ correlationId,
55
+ });
56
+ return await this.apiOperationRepo.save(operation);
57
+ }
58
+ async getSettings() {
59
+ const apiKey = await this.settingsService.get(circle_settings_constant_1.CIRCLE_SETTING_KEYS.GENERAL_API_KEY);
60
+ const entitySecret = await this.settingsService.get(circle_settings_constant_1.CIRCLE_SETTING_KEYS.GENERAL_ENTITY_SECRET);
61
+ const entitySecretCiphertext = await this.settingsService.get(circle_settings_constant_1.CIRCLE_SETTING_KEYS.GENERAL_ENTITY_SECRET_CIPHERTEXT);
62
+ const baseUrl = (await this.settingsService.get(circle_settings_constant_1.CIRCLE_SETTING_KEYS.GENERAL_BASE_URL)) || this.defaultBaseUrl;
63
+ if (!apiKey) {
64
+ throw new Error('Circle API key not configured. Please set CIRCLE_SETTING_KEYS.GENERAL_API_KEY in settings.');
65
+ }
66
+ return { apiKey, entitySecret, entitySecretCiphertext, baseUrl };
67
+ }
68
+ async getEntitySecretCiphertext() {
69
+ const { entitySecretCiphertext } = await this.getSettings();
70
+ return entitySecretCiphertext;
71
+ }
72
+ async makeApiCall(operationType, endpoint, method = 'GET', body, correlationId, additionalHeaders) {
73
+ const { apiKey, entitySecret, baseUrl } = await this.getSettings();
74
+ const startTime = Date.now();
75
+ const url = `${baseUrl}${endpoint}`;
76
+ const headers = {
77
+ 'Content-Type': 'application/json',
78
+ Authorization: `Bearer ${apiKey}`,
79
+ ...additionalHeaders,
80
+ };
81
+ if (entitySecret) {
82
+ headers['X-Entity-Secret'] = entitySecret;
83
+ }
84
+ try {
85
+ const response = await (0, rxjs_1.firstValueFrom)(this.httpService.request({
86
+ method,
87
+ url,
88
+ headers,
89
+ data: body,
90
+ }));
91
+ const responseTime = Date.now() - startTime;
92
+ const responseData = response.data;
93
+ const statusCode = response.status;
94
+ await this.logApiOperation(operationType, endpoint, method, body, responseData, statusCode, undefined, responseTime, correlationId);
95
+ return responseData;
96
+ }
97
+ catch (error) {
98
+ const responseTime = Date.now() - startTime;
99
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
100
+ const statusCode = error.response?.status;
101
+ const responseData = error
102
+ .response?.data;
103
+ await this.logApiOperation(operationType, endpoint, method, body, responseData || undefined, statusCode, errorMessage, responseTime, correlationId);
104
+ this.logger.error(`Circle API call failed: ${errorMessage}`, error);
105
+ throw error;
106
+ }
107
+ }
108
+ async getApiKey() {
109
+ const { apiKey } = await this.getSettings();
110
+ return apiKey;
111
+ }
112
+ async getBaseUrl() {
113
+ const { baseUrl } = await this.getSettings();
114
+ return baseUrl;
115
+ }
116
+ async getDeveloperClient() {
117
+ const { apiKey, entitySecret, baseUrl } = await this.getSettings();
118
+ if (!entitySecret) {
119
+ throw new Error('Entity secret not configured. Please set CIRCLE_SETTING_KEYS.GENERAL_ENTITY_SECRET in settings.');
120
+ }
121
+ return (0, developer_controlled_wallets_1.initiateDeveloperControlledWalletsClient)({
122
+ apiKey,
123
+ entitySecret,
124
+ baseUrl,
125
+ });
126
+ }
127
+ async getPublicKey() {
128
+ try {
129
+ const client = await this.getDeveloperClient();
130
+ const response = await client.getPublicKey();
131
+ if (response.data?.publicKey) {
132
+ await this.logApiOperation(circle_constant_1.CircleApiOperationType.GET_PUBLIC_KEY, '/v1/w3s/developer/publicKey', 'GET', undefined, { publicKey: '***REDACTED***' }, 200, undefined, undefined, undefined);
133
+ return response.data.publicKey;
134
+ }
135
+ throw new Error('Failed to get public key from Circle API');
136
+ }
137
+ catch (error) {
138
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
139
+ this.logger.error(`Failed to get public key: ${errorMessage}`, error);
140
+ throw error;
141
+ }
142
+ }
143
+ async generateEntitySecretCiphertext() {
144
+ const { apiKey, entitySecret, baseUrl } = await this.getSettings();
145
+ if (!entitySecret) {
146
+ throw new Error('Entity secret not configured. Please set CIRCLE_SETTING_KEYS.GENERAL_ENTITY_SECRET in settings.');
147
+ }
148
+ try {
149
+ const ciphertext = await (0, developer_controlled_wallets_1.generateEntitySecretCiphertext)({
150
+ apiKey,
151
+ entitySecret,
152
+ baseUrl,
153
+ });
154
+ await this.logApiOperation(circle_constant_1.CircleApiOperationType.GENERATE_ENTITY_SECRET_CIPHERTEXT, '/v1/w3s/developer/publicKey', 'GET', undefined, { ciphertext: '***REDACTED***' }, 200, undefined, undefined, undefined);
155
+ return ciphertext;
156
+ }
157
+ catch (error) {
158
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
159
+ this.logger.error(`Failed to generate entity secret ciphertext: ${errorMessage}`, error);
160
+ throw error;
161
+ }
162
+ }
163
+ };
164
+ exports.CircleApiService = CircleApiService;
165
+ exports.CircleApiService = CircleApiService = CircleApiService_1 = __decorate([
166
+ (0, common_1.Injectable)(),
167
+ __param(2, (0, typeorm_1.InjectRepository)(circle_api_operation_entity_1.CircleApiOperation)),
168
+ __metadata("design:paramtypes", [axios_1.HttpService,
169
+ core_1.SettingsService,
170
+ typeorm_2.Repository])
171
+ ], CircleApiService);
172
+ //# sourceMappingURL=circle-api.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-api.service.js","sourceRoot":"","sources":["../../src/services/circle-api.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { TypeOrmCrudService } from '@dataui/crud-typeorm';
2
+ import { Repository } from 'typeorm';
3
+ import { CircleChallenge } from '../entities/circle-challenge.entity';
4
+ import { CircleChallengeData } from '../types/circle-api.types';
5
+ import { CircleApiService } from './circle-api.service';
6
+ export declare class CircleChallengeService extends TypeOrmCrudService<CircleChallenge> {
7
+ repo: Repository<CircleChallenge>;
8
+ private readonly circleApiService;
9
+ private readonly logger;
10
+ constructor(repo: Repository<CircleChallenge>, circleApiService: CircleApiService);
11
+ listChallenges(userToken: string): Promise<CircleChallenge[]>;
12
+ saveChallengeFromCircle(challengeData: CircleChallengeData): Promise<CircleChallenge>;
13
+ }
14
+ //# sourceMappingURL=circle-challenge.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-challenge.service.d.ts","sourceRoot":"","sources":["../../src/services/circle-challenge.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAOrC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAqB,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBACa,sBAAuB,SAAQ,kBAAkB,CAAC,eAAe,CAAC;IAKpE,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;gBAIzD,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,EACvB,gBAAgB,EAAE,gBAAgB;IAQ/C,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA2B7D,uBAAuB,CAAC,aAAa,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;CA8B5F"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var CircleChallengeService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CircleChallengeService = void 0;
17
+ const crud_typeorm_1 = require("@dataui/crud-typeorm");
18
+ const common_1 = require("@nestjs/common");
19
+ const typeorm_1 = require("@nestjs/typeorm");
20
+ const typeorm_2 = require("typeorm");
21
+ const circle_constant_1 = require("../constants/circle.constant");
22
+ const circle_challenge_entity_1 = require("../entities/circle-challenge.entity");
23
+ const circle_api_service_1 = require("./circle-api.service");
24
+ let CircleChallengeService = CircleChallengeService_1 = class CircleChallengeService extends crud_typeorm_1.TypeOrmCrudService {
25
+ repo;
26
+ circleApiService;
27
+ logger = new common_1.Logger(CircleChallengeService_1.name);
28
+ constructor(repo, circleApiService) {
29
+ super(repo);
30
+ this.repo = repo;
31
+ this.circleApiService = circleApiService;
32
+ }
33
+ async listChallenges(userToken) {
34
+ const response = await this.circleApiService.makeApiCall(circle_constant_1.CircleApiOperationType.LIST_CHALLENGES, '/v1/w3s/user/challenges', 'GET', undefined, undefined, { 'X-User-Token': userToken });
35
+ const challenges = [];
36
+ if (response.data?.challenges) {
37
+ for (const challengeData of response.data.challenges) {
38
+ const challenge = await this.saveChallengeFromCircle(challengeData);
39
+ challenges.push(challenge);
40
+ }
41
+ }
42
+ return challenges;
43
+ }
44
+ async saveChallengeFromCircle(challengeData) {
45
+ const existing = await this.repo.findOne({
46
+ where: { circleId: challengeData.id },
47
+ });
48
+ const challengeDataToSave = {
49
+ circleId: challengeData.id,
50
+ userId: challengeData.userId,
51
+ type: challengeData.type,
52
+ status: (challengeData.status || circle_constant_1.CircleChallengeStatus.PENDING),
53
+ correlationIds: Array.isArray(challengeData.correlationIds)
54
+ ? challengeData.correlationIds
55
+ : challengeData.correlationIds
56
+ ? [challengeData.correlationIds]
57
+ : undefined,
58
+ errorCode: challengeData.errorCode,
59
+ errorMessage: challengeData.errorMessage,
60
+ metadata: challengeData,
61
+ circleCreateDate: challengeData.createDate ? new Date(challengeData.createDate) : undefined,
62
+ circleUpdateDate: challengeData.updateDate ? new Date(challengeData.updateDate) : undefined,
63
+ };
64
+ if (existing) {
65
+ Object.assign(existing, challengeDataToSave);
66
+ return await this.repo.save(existing);
67
+ }
68
+ else {
69
+ const challenge = this.repo.create(challengeDataToSave);
70
+ return await this.repo.save(challenge);
71
+ }
72
+ }
73
+ };
74
+ exports.CircleChallengeService = CircleChallengeService;
75
+ exports.CircleChallengeService = CircleChallengeService = CircleChallengeService_1 = __decorate([
76
+ (0, common_1.Injectable)(),
77
+ __param(0, (0, typeorm_1.InjectRepository)(circle_challenge_entity_1.CircleChallenge)),
78
+ __metadata("design:paramtypes", [typeorm_2.Repository,
79
+ circle_api_service_1.CircleApiService])
80
+ ], CircleChallengeService);
81
+ //# sourceMappingURL=circle-challenge.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-challenge.service.js","sourceRoot":"","sources":["../../src/services/circle-challenge.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { TypeOrmCrudService } from '@dataui/crud-typeorm';
2
+ import { Repository } from 'typeorm';
3
+ import { CircleNFTBalance } from '../entities/circle-nft-balance.entity';
4
+ import { CircleNFTBalanceData } from '../types/circle-api.types';
5
+ import { CircleApiService } from './circle-api.service';
6
+ export declare class CircleNFTBalanceService extends TypeOrmCrudService<CircleNFTBalance> {
7
+ repo: Repository<CircleNFTBalance>;
8
+ private readonly circleApiService;
9
+ private readonly logger;
10
+ constructor(repo: Repository<CircleNFTBalance>, circleApiService: CircleApiService);
11
+ getWalletNFTBalance(walletId: string, includeAll?: boolean, name?: string, standard?: string, tokenAddresses?: string[], pageAfter?: string, pageBefore?: string, pageSize?: number): Promise<CircleNFTBalance[]>;
12
+ saveNFTFromCircle(walletId: string, nftData: CircleNFTBalanceData): Promise<CircleNFTBalance>;
13
+ }
14
+ //# sourceMappingURL=circle-nft-balance.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-nft-balance.service.d.ts","sourceRoot":"","sources":["../../src/services/circle-nft-balance.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAqB,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBACa,uBAAwB,SAAQ,kBAAkB,CAAC,gBAAgB,CAAC;IAKtE,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;gBAI1D,IAAI,EAAE,UAAU,CAAC,gBAAgB,CAAC,EACxB,gBAAgB,EAAE,gBAAgB;IAQ/C,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,OAAO,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAiCxB,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;CA2B7B"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var CircleNFTBalanceService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CircleNFTBalanceService = void 0;
17
+ const crud_typeorm_1 = require("@dataui/crud-typeorm");
18
+ const common_1 = require("@nestjs/common");
19
+ const typeorm_1 = require("@nestjs/typeorm");
20
+ const typeorm_2 = require("typeorm");
21
+ const circle_constant_1 = require("../constants/circle.constant");
22
+ const circle_nft_balance_entity_1 = require("../entities/circle-nft-balance.entity");
23
+ const circle_api_service_1 = require("./circle-api.service");
24
+ let CircleNFTBalanceService = CircleNFTBalanceService_1 = class CircleNFTBalanceService extends crud_typeorm_1.TypeOrmCrudService {
25
+ repo;
26
+ circleApiService;
27
+ logger = new common_1.Logger(CircleNFTBalanceService_1.name);
28
+ constructor(repo, circleApiService) {
29
+ super(repo);
30
+ this.repo = repo;
31
+ this.circleApiService = circleApiService;
32
+ }
33
+ async getWalletNFTBalance(walletId, includeAll, name, standard, tokenAddresses, pageAfter, pageBefore, pageSize) {
34
+ const params = new URLSearchParams();
35
+ if (includeAll)
36
+ params.append('includeAll', 'true');
37
+ if (name)
38
+ params.append('name', name);
39
+ if (standard)
40
+ params.append('standard', standard);
41
+ if (tokenAddresses)
42
+ params.append('tokenAddresses', tokenAddresses.join(','));
43
+ if (pageAfter)
44
+ params.append('pageAfter', pageAfter);
45
+ if (pageBefore)
46
+ params.append('pageBefore', pageBefore);
47
+ if (pageSize)
48
+ params.append('pageSize', pageSize.toString());
49
+ const response = await this.circleApiService.makeApiCall(circle_constant_1.CircleApiOperationType.GET_NFT_BALANCE, `/v1/w3s/developer/wallets/${walletId}/nfts?${params.toString()}`, 'GET');
50
+ const nfts = [];
51
+ if (response.data?.nfts) {
52
+ for (const nftData of response.data.nfts) {
53
+ const nft = await this.saveNFTFromCircle(walletId, nftData);
54
+ nfts.push(nft);
55
+ }
56
+ }
57
+ return nfts;
58
+ }
59
+ async saveNFTFromCircle(walletId, nftData) {
60
+ const existing = await this.repo.findOne({
61
+ where: { walletId, nftTokenId: nftData.nftTokenId },
62
+ });
63
+ const nftDataToSave = {
64
+ walletId,
65
+ circleWalletId: walletId,
66
+ nftTokenId: nftData.nftTokenId,
67
+ tokenAddress: nftData.tokenAddress,
68
+ blockchain: nftData.blockchain,
69
+ amount: nftData.amount,
70
+ tokenName: nftData.name,
71
+ tokenStandard: nftData.standard,
72
+ metadata: typeof nftData.metadata === 'string' ? JSON.parse(nftData.metadata) : nftData.metadata,
73
+ circleUpdateDate: nftData.updateDate ? new Date(nftData.updateDate) : undefined,
74
+ };
75
+ if (existing) {
76
+ await this.repo.update(existing.id, nftDataToSave);
77
+ return (await this.repo.findOne({ where: { id: existing.id } }));
78
+ }
79
+ else {
80
+ const nft = this.repo.create(nftDataToSave);
81
+ return await this.repo.save(nft);
82
+ }
83
+ }
84
+ };
85
+ exports.CircleNFTBalanceService = CircleNFTBalanceService;
86
+ exports.CircleNFTBalanceService = CircleNFTBalanceService = CircleNFTBalanceService_1 = __decorate([
87
+ (0, common_1.Injectable)(),
88
+ __param(0, (0, typeorm_1.InjectRepository)(circle_nft_balance_entity_1.CircleNFTBalance)),
89
+ __metadata("design:paramtypes", [typeorm_2.Repository,
90
+ circle_api_service_1.CircleApiService])
91
+ ], CircleNFTBalanceService);
92
+ //# sourceMappingURL=circle-nft-balance.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-nft-balance.service.js","sourceRoot":"","sources":["../../src/services/circle-nft-balance.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { TypeOrmCrudService } from '@dataui/crud-typeorm';
2
+ import { Repository } from 'typeorm';
3
+ import { CircleTokenBalance } from '../entities/circle-token-balance.entity';
4
+ import { CircleTokenBalanceData } from '../types/circle-api.types';
5
+ import { CircleApiService } from './circle-api.service';
6
+ import { CircleTokenService } from './circle-token.service';
7
+ export declare class CircleTokenBalanceService extends TypeOrmCrudService<CircleTokenBalance> {
8
+ repo: Repository<CircleTokenBalance>;
9
+ private readonly circleApiService;
10
+ private readonly circleTokenService;
11
+ private readonly logger;
12
+ constructor(repo: Repository<CircleTokenBalance>, circleApiService: CircleApiService, circleTokenService: CircleTokenService);
13
+ getWalletTokenBalance(walletId: string, includeAll?: boolean, name?: string, standard?: string, tokenAddresses?: string[], pageAfter?: string, pageBefore?: string, pageSize?: number): Promise<CircleTokenBalance[]>;
14
+ saveBalanceFromCircle(walletId: string, balanceData: CircleTokenBalanceData): Promise<CircleTokenBalance>;
15
+ }
16
+ //# sourceMappingURL=circle-token-balance.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-token-balance.service.d.ts","sourceRoot":"","sources":["../../src/services/circle-token-balance.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAEL,sBAAsB,EAEvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,qBACa,yBAA0B,SAAQ,kBAAkB,CAAC,kBAAkB,CAAC;IAK1E,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IANrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8C;gBAI5D,IAAI,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,kBAAkB,EAAE,kBAAkB;IAQnD,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,OAAO,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EAAE,EACzB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAiC1B,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,sBAAsB,GAClC,OAAO,CAAC,kBAAkB,CAAC;CAmG/B"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var CircleTokenBalanceService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CircleTokenBalanceService = void 0;
17
+ const crud_typeorm_1 = require("@dataui/crud-typeorm");
18
+ const common_1 = require("@nestjs/common");
19
+ const typeorm_1 = require("@nestjs/typeorm");
20
+ const typeorm_2 = require("typeorm");
21
+ const circle_constant_1 = require("../constants/circle.constant");
22
+ const circle_token_balance_entity_1 = require("../entities/circle-token-balance.entity");
23
+ const circle_api_service_1 = require("./circle-api.service");
24
+ const circle_token_service_1 = require("./circle-token.service");
25
+ let CircleTokenBalanceService = CircleTokenBalanceService_1 = class CircleTokenBalanceService extends crud_typeorm_1.TypeOrmCrudService {
26
+ repo;
27
+ circleApiService;
28
+ circleTokenService;
29
+ logger = new common_1.Logger(CircleTokenBalanceService_1.name);
30
+ constructor(repo, circleApiService, circleTokenService) {
31
+ super(repo);
32
+ this.repo = repo;
33
+ this.circleApiService = circleApiService;
34
+ this.circleTokenService = circleTokenService;
35
+ }
36
+ async getWalletTokenBalance(walletId, includeAll, name, standard, tokenAddresses, pageAfter, pageBefore, pageSize) {
37
+ const params = new URLSearchParams();
38
+ if (includeAll)
39
+ params.append('includeAll', 'true');
40
+ if (name)
41
+ params.append('name', name);
42
+ if (standard)
43
+ params.append('standard', standard);
44
+ if (tokenAddresses)
45
+ params.append('tokenAddresses', tokenAddresses.join(','));
46
+ if (pageAfter)
47
+ params.append('pageAfter', pageAfter);
48
+ if (pageBefore)
49
+ params.append('pageBefore', pageBefore);
50
+ if (pageSize)
51
+ params.append('pageSize', pageSize.toString());
52
+ const response = await this.circleApiService.makeApiCall(circle_constant_1.CircleApiOperationType.GET_BALANCE, `/v1/w3s/wallets/${walletId}/balances?${params.toString()}`, 'GET');
53
+ const balances = [];
54
+ if (response.data?.tokenBalances) {
55
+ for (const balanceData of response.data.tokenBalances) {
56
+ const balance = await this.saveBalanceFromCircle(walletId, balanceData);
57
+ balances.push(balance);
58
+ }
59
+ }
60
+ return balances;
61
+ }
62
+ async saveBalanceFromCircle(walletId, balanceData) {
63
+ let tokenData = balanceData.token;
64
+ if (!tokenData) {
65
+ if (balanceData.metadata && typeof balanceData.metadata === 'object') {
66
+ const metadata = balanceData.metadata;
67
+ if (metadata.token && typeof metadata.token === 'object') {
68
+ tokenData = metadata.token;
69
+ }
70
+ }
71
+ if (!tokenData &&
72
+ balanceData.id &&
73
+ balanceData.name &&
74
+ balanceData.symbol &&
75
+ balanceData.blockchain) {
76
+ tokenData = {
77
+ id: balanceData.id,
78
+ name: balanceData.name,
79
+ symbol: balanceData.symbol,
80
+ blockchain: balanceData.blockchain,
81
+ tokenAddress: balanceData.tokenAddress,
82
+ decimals: balanceData.decimals,
83
+ isNative: balanceData.isNative,
84
+ standard: balanceData.standard,
85
+ createDate: balanceData.createDate,
86
+ updateDate: balanceData.updateDate,
87
+ };
88
+ }
89
+ }
90
+ if (tokenData) {
91
+ try {
92
+ await this.circleTokenService.saveTokenFromCircle(tokenData);
93
+ this.logger.debug(`Saved token entity for token ID: ${tokenData.id}`);
94
+ }
95
+ catch (error) {
96
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
97
+ this.logger.error(`Failed to save token entity: ${errorMessage}`, error);
98
+ }
99
+ }
100
+ const tokenId = balanceData.tokenId || tokenData?.id;
101
+ const tokenAddress = balanceData.tokenAddress || tokenData?.tokenAddress;
102
+ const blockchain = balanceData.blockchain || tokenData?.blockchain;
103
+ const tokenName = balanceData.name || tokenData?.name;
104
+ const tokenSymbol = balanceData.symbol || tokenData?.symbol;
105
+ const tokenStandard = balanceData.standard || tokenData?.standard;
106
+ const existing = await this.repo.findOne({
107
+ where: tokenId
108
+ ? { walletId, tokenId }
109
+ : { walletId, tokenAddress: tokenAddress || undefined },
110
+ });
111
+ const metadataWithoutToken = { ...balanceData };
112
+ if (metadataWithoutToken.token) {
113
+ delete metadataWithoutToken.token;
114
+ }
115
+ const balanceDataToSave = {
116
+ walletId,
117
+ circleWalletId: walletId,
118
+ tokenId,
119
+ tokenAddress,
120
+ blockchain,
121
+ amount: balanceData.amount,
122
+ tokenName,
123
+ tokenSymbol,
124
+ tokenStandard,
125
+ metadata: metadataWithoutToken,
126
+ circleUpdateDate: balanceData.updateDate ? new Date(balanceData.updateDate) : undefined,
127
+ };
128
+ if (existing) {
129
+ Object.assign(existing, balanceDataToSave);
130
+ return await this.repo.save(existing);
131
+ }
132
+ else {
133
+ const balance = this.repo.create(balanceDataToSave);
134
+ return await this.repo.save(balance);
135
+ }
136
+ }
137
+ };
138
+ exports.CircleTokenBalanceService = CircleTokenBalanceService;
139
+ exports.CircleTokenBalanceService = CircleTokenBalanceService = CircleTokenBalanceService_1 = __decorate([
140
+ (0, common_1.Injectable)(),
141
+ __param(0, (0, typeorm_1.InjectRepository)(circle_token_balance_entity_1.CircleTokenBalance)),
142
+ __metadata("design:paramtypes", [typeorm_2.Repository,
143
+ circle_api_service_1.CircleApiService,
144
+ circle_token_service_1.CircleTokenService])
145
+ ], CircleTokenBalanceService);
146
+ //# sourceMappingURL=circle-token-balance.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circle-token-balance.service.js","sourceRoot":"","sources":["../../src/services/circle-token-balance.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { TypeOrmCrudService } from '@dataui/crud-typeorm';
2
+ import { Repository } from 'typeorm';
3
+ import { CircleToken } from '../entities/circle-token.entity';
4
+ import { CircleTokenData } from '../types/circle-api.types';
5
+ export declare class CircleTokenService extends TypeOrmCrudService<CircleToken> {
6
+ readonly repo: Repository<CircleToken>;
7
+ private readonly logger;
8
+ constructor(repo: Repository<CircleToken>);
9
+ saveTokenFromCircle(tokenData: CircleTokenData): Promise<CircleToken>;
10
+ }
11
+ //# sourceMappingURL=circle-token.service.d.ts.map