gangtise-openapi-cli 0.1.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.
@@ -0,0 +1,247 @@
1
+ import { request } from "undici";
2
+ import { normalizeToken, readTokenCache, requireAccessCredentials, writeTokenCache } from "./auth.js";
3
+ import { ApiError, ValidationError } from "./errors.js";
4
+ import { ENDPOINTS, ENDPOINT_REGISTRY } from "./endpoints.js";
5
+ import { BROKER_ORGS, INDUSTRIES, MEETING_ORGS, RESEARCH_AREAS } from "./lookupData.js";
6
+ export class GangtiseClient {
7
+ config;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async getAuthorizationHeader() {
12
+ if (this.config.token) {
13
+ return normalizeToken(this.config.token);
14
+ }
15
+ const cache = await readTokenCache(this.config.tokenCachePath);
16
+ if (cache?.accessToken && cache.expiresAt - 300 > Math.floor(Date.now() / 1000)) {
17
+ return normalizeToken(cache.accessToken);
18
+ }
19
+ const credentials = requireAccessCredentials(this.config.accessKey, this.config.secretKey);
20
+ const envelope = await this.requestJson(ENDPOINTS.authLogin, {
21
+ accessKey: credentials.accessKey,
22
+ secretKey: credentials.secretKey,
23
+ }, false);
24
+ const accessToken = normalizeToken(envelope.accessToken);
25
+ const issuedAt = envelope.time ?? Math.floor(Date.now() / 1000);
26
+ const expiresAt = issuedAt + envelope.expiresIn;
27
+ await writeTokenCache(this.config.tokenCachePath, {
28
+ ...envelope,
29
+ accessToken,
30
+ expiresAt,
31
+ });
32
+ return accessToken;
33
+ }
34
+ unwrapEnvelope(parsed, statusCode) {
35
+ const hasEnvelopeFields = parsed && typeof parsed === 'object' && ('code' in parsed || 'status' in parsed || 'success' in parsed || 'data' in parsed);
36
+ if (!hasEnvelopeFields) {
37
+ return parsed;
38
+ }
39
+ const code = parsed.code === undefined ? undefined : String(parsed.code);
40
+ const ok = parsed.status === true || parsed.success === true || code === "000000" || code === "0";
41
+ if (!ok) {
42
+ throw new ApiError(parsed.msg || "API request failed", code, statusCode, parsed);
43
+ }
44
+ if ('data' in parsed) {
45
+ return parsed.data;
46
+ }
47
+ return parsed;
48
+ }
49
+ async readLocalLookup(endpoint) {
50
+ if (endpoint.key === "lookup.research-areas.list") {
51
+ return RESEARCH_AREAS;
52
+ }
53
+ if (endpoint.key === "lookup.broker-orgs.list") {
54
+ return BROKER_ORGS;
55
+ }
56
+ if (endpoint.key === "lookup.meeting-orgs.list") {
57
+ return MEETING_ORGS;
58
+ }
59
+ if (endpoint.key === "lookup.industries.list") {
60
+ return INDUSTRIES;
61
+ }
62
+ throw new ApiError(`Unsupported local lookup endpoint: ${endpoint.key}`);
63
+ }
64
+ isPaginatedListResponse(value) {
65
+ return Boolean(value
66
+ && typeof value === 'object'
67
+ && typeof value.total === 'number'
68
+ && Array.isArray(value.list));
69
+ }
70
+ async requestPaginated(endpoint, body) {
71
+ const initialBody = body && typeof body === 'object' ? { ...body } : {};
72
+ if ('from' in initialBody && (typeof initialBody.from !== 'number' || !Number.isFinite(initialBody.from) || initialBody.from < 0)) {
73
+ throw new ValidationError('Invalid from: expected a non-negative number');
74
+ }
75
+ if ('size' in initialBody && initialBody.size !== undefined && (typeof initialBody.size !== 'number' || !Number.isFinite(initialBody.size) || initialBody.size <= 0)) {
76
+ throw new ValidationError('Invalid size: expected a positive number');
77
+ }
78
+ const startFrom = typeof initialBody.from === 'number' && Number.isFinite(initialBody.from) ? initialBody.from : 0;
79
+ const requestedSize = typeof initialBody.size === 'number' && Number.isFinite(initialBody.size) ? initialBody.size : undefined;
80
+ const maxPageSize = endpoint.pagination?.maxPageSize ?? requestedSize ?? 20;
81
+ const collected = [];
82
+ let firstPage;
83
+ let total;
84
+ let nextFrom = startFrom;
85
+ while (true) {
86
+ const remaining = requestedSize === undefined
87
+ ? maxPageSize
88
+ : Math.min(maxPageSize, requestedSize - collected.length);
89
+ if (requestedSize !== undefined && remaining <= 0) {
90
+ break;
91
+ }
92
+ const page = await this.requestJson(endpoint, {
93
+ ...initialBody,
94
+ from: nextFrom,
95
+ size: remaining,
96
+ });
97
+ if (!this.isPaginatedListResponse(page)) {
98
+ if (!firstPage) {
99
+ return page;
100
+ }
101
+ return {
102
+ ...firstPage,
103
+ total,
104
+ list: requestedSize === undefined ? collected : collected.slice(0, requestedSize),
105
+ };
106
+ }
107
+ if (!firstPage) {
108
+ firstPage = page;
109
+ total = page.total;
110
+ }
111
+ if (page.list.length === 0) {
112
+ break;
113
+ }
114
+ collected.push(...page.list);
115
+ nextFrom += page.list.length;
116
+ const available = total === undefined ? undefined : Math.max(total - startFrom, 0);
117
+ if (requestedSize !== undefined && collected.length >= requestedSize) {
118
+ break;
119
+ }
120
+ if (available !== undefined && collected.length >= available) {
121
+ break;
122
+ }
123
+ if (page.list.length < remaining) {
124
+ break;
125
+ }
126
+ }
127
+ if (!firstPage) {
128
+ return initialBody;
129
+ }
130
+ return {
131
+ ...firstPage,
132
+ total,
133
+ list: requestedSize === undefined ? collected : collected.slice(0, requestedSize),
134
+ };
135
+ }
136
+ async login() {
137
+ const authorization = await this.getAuthorizationHeader();
138
+ const cache = await readTokenCache(this.config.tokenCachePath);
139
+ return {
140
+ authorization,
141
+ cache,
142
+ };
143
+ }
144
+ async requestJson(endpoint, body, useAuth = true) {
145
+ if (endpoint.path.startsWith('/guide/')) {
146
+ return this.readLocalLookup(endpoint);
147
+ }
148
+ const headers = {
149
+ 'content-type': 'application/json',
150
+ };
151
+ if (useAuth) {
152
+ headers.Authorization = await this.getAuthorizationHeader();
153
+ }
154
+ const response = await request(new URL(endpoint.path, this.config.baseUrl), {
155
+ method: endpoint.method,
156
+ headers,
157
+ body: endpoint.method === 'GET' ? undefined : JSON.stringify(body ?? {}),
158
+ headersTimeout: this.config.timeoutMs,
159
+ bodyTimeout: this.config.timeoutMs,
160
+ });
161
+ const text = await response.body.text();
162
+ let parsed;
163
+ try {
164
+ parsed = JSON.parse(text);
165
+ }
166
+ catch {
167
+ throw new ApiError('Failed to parse API response', undefined, response.statusCode, text);
168
+ }
169
+ return this.unwrapEnvelope(parsed, response.statusCode);
170
+ }
171
+ async download(endpoint, query) {
172
+ const authorization = await this.getAuthorizationHeader();
173
+ const url = new URL(endpoint.path, this.config.baseUrl);
174
+ Object.entries(query).forEach(([key, value]) => {
175
+ url.searchParams.set(key, String(value));
176
+ });
177
+ const response = await request(url, {
178
+ method: endpoint.method,
179
+ headers: {
180
+ Authorization: authorization,
181
+ },
182
+ headersTimeout: this.config.timeoutMs,
183
+ bodyTimeout: this.config.timeoutMs,
184
+ });
185
+ const contentType = Array.isArray(response.headers['content-type']) ? response.headers['content-type'][0] : response.headers['content-type'];
186
+ if (contentType?.includes('application/json')) {
187
+ const text = await response.body.text();
188
+ let parsed;
189
+ try {
190
+ parsed = JSON.parse(text);
191
+ }
192
+ catch {
193
+ if (response.statusCode >= 400) {
194
+ throw new ApiError('Download failed', undefined, response.statusCode, text);
195
+ }
196
+ return { text, contentType };
197
+ }
198
+ const hasEnvelopeFields = parsed && typeof parsed === 'object' && ('code' in parsed || 'status' in parsed || 'success' in parsed || 'data' in parsed);
199
+ if (hasEnvelopeFields) {
200
+ const data = this.unwrapEnvelope(parsed, response.statusCode);
201
+ if (data && typeof data === 'object' && 'url' in data && typeof data.url === 'string') {
202
+ return { url: String(data.url), contentType };
203
+ }
204
+ return { text: JSON.stringify(data, null, 2), contentType };
205
+ }
206
+ if (parsed && typeof parsed === 'object' && 'url' in parsed && typeof parsed.url === 'string') {
207
+ return { url: String(parsed.url), contentType };
208
+ }
209
+ return { text: JSON.stringify(parsed, null, 2), contentType };
210
+ }
211
+ if (contentType?.includes('text/plain') || contentType?.includes('text/html')) {
212
+ const text = await response.body.text();
213
+ if (response.statusCode >= 400) {
214
+ throw new ApiError('Download failed', undefined, response.statusCode, text);
215
+ }
216
+ return { text, contentType };
217
+ }
218
+ if (response.statusCode >= 400) {
219
+ const text = await response.body.text();
220
+ throw new ApiError('Download failed', undefined, response.statusCode, text);
221
+ }
222
+ const buffer = await response.body.arrayBuffer();
223
+ const contentDisposition = response.headers['content-disposition'];
224
+ const filenameMatch = Array.isArray(contentDisposition)
225
+ ? contentDisposition[0]?.match(/filename\*=UTF-8''([^;]+)|filename="?([^";]+)"?/i)
226
+ : contentDisposition?.match(/filename\*=UTF-8''([^;]+)|filename="?([^";]+)"?/i);
227
+ return {
228
+ data: new Uint8Array(buffer),
229
+ contentType,
230
+ filename: filenameMatch ? decodeURIComponent(filenameMatch[1] || filenameMatch[2]) : undefined,
231
+ };
232
+ }
233
+ async call(endpointKey, body, query) {
234
+ const endpoint = ENDPOINT_REGISTRY[endpointKey];
235
+ if (!endpoint) {
236
+ throw new ApiError(`Unknown endpoint key: ${endpointKey}`);
237
+ }
238
+ if (endpoint.kind === 'download') {
239
+ return this.download(endpoint, query ?? {});
240
+ }
241
+ if (endpoint.kind === 'json' && endpoint.pagination?.enabled) {
242
+ return this.requestPaginated(endpoint, body);
243
+ }
244
+ return this.requestJson(endpoint, body);
245
+ }
246
+ }
247
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import os from "node:os";
2
+ import path from "node:path";
3
+ export const DEFAULT_BASE_URL = "https://open.gangtise.com";
4
+ export const DEFAULT_TIMEOUT_MS = 30_000;
5
+ export const DEFAULT_TOKEN_CACHE_PATH = path.join(os.homedir(), ".config", "gangtise", "token.json");
6
+ export function loadConfig() {
7
+ const timeoutValue = process.env.GANGTISE_TIMEOUT_MS;
8
+ const timeoutMs = timeoutValue ? Number(timeoutValue) : DEFAULT_TIMEOUT_MS;
9
+ return {
10
+ baseUrl: process.env.GANGTISE_BASE_URL ?? DEFAULT_BASE_URL,
11
+ timeoutMs: Number.isFinite(timeoutMs) ? timeoutMs : DEFAULT_TIMEOUT_MS,
12
+ accessKey: process.env.GANGTISE_ACCESS_KEY,
13
+ secretKey: process.env.GANGTISE_SECRET_KEY,
14
+ token: process.env.GANGTISE_TOKEN,
15
+ tokenCachePath: process.env.GANGTISE_TOKEN_CACHE_PATH ?? DEFAULT_TOKEN_CACHE_PATH,
16
+ };
17
+ }
18
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAA;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAA;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAA;AAapG,MAAM,UAAU,UAAU;IACxB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAA;IACpD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAA;IAE1E,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,gBAAgB;QAC1D,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB;QACtE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC1C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC1C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;QACjC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,wBAAwB;KAClF,CAAA;AACH,CAAC"}
@@ -0,0 +1,228 @@
1
+ export const ENDPOINTS = {
2
+ authLogin: {
3
+ key: "auth.login",
4
+ method: "POST",
5
+ path: "/application/auth/oauth/open/loginV2",
6
+ kind: "json",
7
+ description: "Get access token",
8
+ },
9
+ lookupResearchAreas: {
10
+ key: "lookup.research-areas.list",
11
+ method: "GET",
12
+ path: "/guide/research-area-local",
13
+ kind: "json",
14
+ description: "List research areas from local docs",
15
+ },
16
+ lookupBrokerOrgs: {
17
+ key: "lookup.broker-orgs.list",
18
+ method: "GET",
19
+ path: "/guide/broker-orgs-local",
20
+ kind: "json",
21
+ description: "List broker orgs from local docs",
22
+ },
23
+ lookupMeetingOrgs: {
24
+ key: "lookup.meeting-orgs.list",
25
+ method: "GET",
26
+ path: "/guide/meeting-orgs-local",
27
+ kind: "json",
28
+ description: "List meeting orgs from local docs",
29
+ },
30
+ lookupIndustries: {
31
+ key: "lookup.industries.list",
32
+ method: "GET",
33
+ path: "/guide/industries-local",
34
+ kind: "json",
35
+ description: "List industries from local docs",
36
+ },
37
+ insightOpinionList: {
38
+ key: "insight.opinion.list",
39
+ method: "POST",
40
+ path: "/application/open-insight/chief-opinion/getList",
41
+ kind: "json",
42
+ description: "List chief opinions",
43
+ pagination: { enabled: true, maxPageSize: 50 },
44
+ },
45
+ insightSummaryList: {
46
+ key: "insight.summary.list",
47
+ method: "POST",
48
+ path: "/application/open-insight/summary/v2/getList",
49
+ kind: "json",
50
+ description: "List summaries",
51
+ pagination: { enabled: true, maxPageSize: 50 },
52
+ },
53
+ insightSummaryDownload: {
54
+ key: "insight.summary.download",
55
+ method: "GET",
56
+ path: "/application/open-insight/summary/v2/download/file",
57
+ kind: "download",
58
+ description: "Download summary file",
59
+ },
60
+ insightRoadshowList: {
61
+ key: "insight.roadshow.list",
62
+ method: "POST",
63
+ path: "/application/open-insight/schedule/roadshow/getList",
64
+ kind: "json",
65
+ description: "List roadshows",
66
+ pagination: { enabled: true, maxPageSize: 50 },
67
+ },
68
+ insightSiteVisitList: {
69
+ key: "insight.site-visit.list",
70
+ method: "POST",
71
+ path: "/application/open-insight/schedule/site-visit/getList",
72
+ kind: "json",
73
+ description: "List site visits",
74
+ pagination: { enabled: true, maxPageSize: 50 },
75
+ },
76
+ insightStrategyList: {
77
+ key: "insight.strategy.list",
78
+ method: "POST",
79
+ path: "/application/open-insight/schedule/strategy-meeting/getList",
80
+ kind: "json",
81
+ description: "List strategy meetings",
82
+ pagination: { enabled: true, maxPageSize: 50 },
83
+ },
84
+ insightForumList: {
85
+ key: "insight.forum.list",
86
+ method: "POST",
87
+ path: "/application/open-insight/schedule/forum/getList",
88
+ kind: "json",
89
+ description: "List forums",
90
+ pagination: { enabled: true, maxPageSize: 50 },
91
+ },
92
+ insightResearchList: {
93
+ key: "insight.research.list",
94
+ method: "POST",
95
+ path: "/application/open-insight/broker-report/getList",
96
+ kind: "json",
97
+ description: "List broker research reports",
98
+ pagination: { enabled: true, maxPageSize: 50 },
99
+ },
100
+ insightResearchDownload: {
101
+ key: "insight.research.download",
102
+ method: "GET",
103
+ path: "/application/open-insight/broker-report/download/file",
104
+ kind: "download",
105
+ description: "Download broker research report",
106
+ },
107
+ insightForeignReportList: {
108
+ key: "insight.foreign-report.list",
109
+ method: "POST",
110
+ path: "/application/open-insight/foreign-report/getList",
111
+ kind: "json",
112
+ description: "List foreign reports",
113
+ pagination: { enabled: true, maxPageSize: 50 },
114
+ },
115
+ insightForeignReportDownload: {
116
+ key: "insight.foreign-report.download",
117
+ method: "GET",
118
+ path: "/application/open-insight/foreign-report/download/file",
119
+ kind: "download",
120
+ description: "Download foreign report",
121
+ },
122
+ insightAnnouncementList: {
123
+ key: "insight.announcement.list",
124
+ method: "POST",
125
+ path: "/application/open-insight/announcement/getList",
126
+ kind: "json",
127
+ description: "List announcements",
128
+ pagination: { enabled: true, maxPageSize: 50 },
129
+ },
130
+ insightAnnouncementDownload: {
131
+ key: "insight.announcement.download",
132
+ method: "GET",
133
+ path: "/application/open-insight/announcement/download/file",
134
+ kind: "download",
135
+ description: "Download announcement file",
136
+ },
137
+ quoteDayKline: {
138
+ key: "quote.day-kline",
139
+ method: "POST",
140
+ path: "/application/open-quote/kline/daily",
141
+ kind: "json",
142
+ description: "Query daily kline",
143
+ },
144
+ quoteIncomeStatement: {
145
+ key: "quote.income-statement",
146
+ method: "POST",
147
+ path: "/application/open-quote/financial-report/income-statement",
148
+ kind: "json",
149
+ description: "Query income statement",
150
+ },
151
+ quoteMainBusiness: {
152
+ key: "quote.main-business",
153
+ method: "POST",
154
+ path: "/application/open-quote/main-business/getList",
155
+ kind: "json",
156
+ description: "Query main business composition",
157
+ },
158
+ quoteValuationAnalysis: {
159
+ key: "quote.valuation-analysis",
160
+ method: "POST",
161
+ path: "/application/open-quote/valuation-analysis/getList",
162
+ kind: "json",
163
+ description: "Query valuation analysis",
164
+ },
165
+ aiKnowledgeBatch: {
166
+ key: "ai.knowledge-batch",
167
+ method: "POST",
168
+ path: "/application/open-data/ai/search/knowledge/batch",
169
+ kind: "json",
170
+ description: "Batch knowledge search",
171
+ },
172
+ aiKnowledgeResource: {
173
+ key: "ai.knowledge-resource.download",
174
+ method: "GET",
175
+ path: "/application/open-data/ai/resource/download",
176
+ kind: "download",
177
+ description: "Download knowledge resource",
178
+ },
179
+ aiSecurityClue: {
180
+ key: "ai.security-clue.list",
181
+ method: "POST",
182
+ path: "/application/open-ai/security-clue/getList",
183
+ kind: "json",
184
+ description: "List security clues",
185
+ pagination: { enabled: true, maxPageSize: 500 },
186
+ },
187
+ aiOnePager: {
188
+ key: "ai.one-pager",
189
+ method: "POST",
190
+ path: "/application/open-ai/agent/one-pager",
191
+ kind: "json",
192
+ description: "Generate one pager",
193
+ },
194
+ aiInvestmentLogic: {
195
+ key: "ai.investment-logic",
196
+ method: "POST",
197
+ path: "/application/open-ai/agent/investment-logic",
198
+ kind: "json",
199
+ description: "Generate investment logic",
200
+ },
201
+ aiPeerComparison: {
202
+ key: "ai.peer-comparison",
203
+ method: "POST",
204
+ path: "/application/open-ai/agent/peer-comparison",
205
+ kind: "json",
206
+ description: "Generate peer comparison",
207
+ },
208
+ aiCloudDiskList: {
209
+ key: "ai.cloud-disk.list",
210
+ method: "POST",
211
+ path: "/application/open-ai/drive/getList",
212
+ kind: "json",
213
+ description: "List AI cloud disk files",
214
+ pagination: { enabled: true, maxPageSize: 50 },
215
+ },
216
+ aiCloudDiskDownload: {
217
+ key: "ai.cloud-disk.download",
218
+ method: "GET",
219
+ path: "/application/open-ai/drive/download/file",
220
+ kind: "download",
221
+ description: "Download AI cloud disk file",
222
+ },
223
+ };
224
+ export const ENDPOINT_REGISTRY = Object.values(ENDPOINTS).reduce((accumulator, endpoint) => {
225
+ accumulator[endpoint.key] = endpoint;
226
+ return accumulator;
227
+ }, {});
228
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../src/core/endpoints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export class CliError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = new.target.name;
5
+ }
6
+ }
7
+ export class ConfigError extends CliError {
8
+ }
9
+ export class ValidationError extends CliError {
10
+ }
11
+ export class DownloadError extends CliError {
12
+ }
13
+ const ERROR_HINTS = {
14
+ "999999": "Gangtise 系统错误,请稍后重试。",
15
+ "999997": "当前账号未开通该接口权限。",
16
+ "999995": "当前账号积分不足。",
17
+ "900002": "请求缺少 uid。",
18
+ "900001": "请求参数为空或缺少必填项。",
19
+ "8000014": "GANGTISE_ACCESS_KEY 错误。",
20
+ "8000015": "GANGTISE_SECRET_KEY 错误。",
21
+ "8000016": "开发账号状态异常。",
22
+ "8000018": "开发账号已到期。",
23
+ "903301": "今日调用次数已达上限。",
24
+ };
25
+ export class ApiError extends CliError {
26
+ code;
27
+ statusCode;
28
+ details;
29
+ hint;
30
+ constructor(message, code, statusCode, details) {
31
+ super(message);
32
+ this.code = code;
33
+ this.statusCode = statusCode;
34
+ this.details = details;
35
+ this.hint = code ? ERROR_HINTS[code] : undefined;
36
+ }
37
+ }
38
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAA;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,QAAQ;CAAG;AAC5C,MAAM,OAAO,eAAgB,SAAQ,QAAQ;CAAG;AAChD,MAAM,OAAO,aAAc,SAAQ,QAAQ;CAAG;AAE9C,MAAM,WAAW,GAA2B;IAC1C,QAAQ,EAAE,sBAAsB;IAChC,QAAQ,EAAE,eAAe;IACzB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,eAAe;IACzB,SAAS,EAAE,yBAAyB;IACpC,SAAS,EAAE,yBAAyB;IACpC,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,aAAa;CACxB,CAAA;AAED,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAKzB;IACA;IACA;IANF,IAAI,CAAS;IAEtB,YACE,OAAe,EACN,IAAa,EACb,UAAmB,EACnB,OAAiB;QAE1B,KAAK,CAAC,OAAO,CAAC,CAAA;QAJL,SAAI,GAAJ,IAAI,CAAS;QACb,eAAU,GAAV,UAAU,CAAS;QACnB,YAAO,GAAP,OAAO,CAAU;QAG1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClD,CAAC;CACF"}