@makegov/tango-node 0.1.4

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 (125) hide show
  1. package/.editorconfig +13 -0
  2. package/.eslintrc.cjs +20 -0
  3. package/.prettierrc +8 -0
  4. package/CHANGELOG.md +15 -0
  5. package/LICENSE +21 -0
  6. package/README.md +331 -0
  7. package/dist/client.d.ts +48 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +321 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +11 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +21 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/errors.d.ts +39 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +78 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/index.d.ts +6 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/models/Agency.d.ts +8 -0
  24. package/dist/models/Agency.d.ts.map +1 -0
  25. package/dist/models/Agency.js +2 -0
  26. package/dist/models/Agency.js.map +1 -0
  27. package/dist/models/Contract.d.ts +17 -0
  28. package/dist/models/Contract.d.ts.map +1 -0
  29. package/dist/models/Contract.js +2 -0
  30. package/dist/models/Contract.js.map +1 -0
  31. package/dist/models/Department.d.ts +5 -0
  32. package/dist/models/Department.d.ts.map +1 -0
  33. package/dist/models/Department.js +2 -0
  34. package/dist/models/Department.js.map +1 -0
  35. package/dist/models/Entity.d.ts +11 -0
  36. package/dist/models/Entity.d.ts.map +1 -0
  37. package/dist/models/Entity.js +2 -0
  38. package/dist/models/Entity.js.map +1 -0
  39. package/dist/models/Forecast.d.ts +12 -0
  40. package/dist/models/Forecast.d.ts.map +1 -0
  41. package/dist/models/Forecast.js +2 -0
  42. package/dist/models/Forecast.js.map +1 -0
  43. package/dist/models/Grant.d.ts +10 -0
  44. package/dist/models/Grant.d.ts.map +1 -0
  45. package/dist/models/Grant.js +2 -0
  46. package/dist/models/Grant.js.map +1 -0
  47. package/dist/models/Location.d.ts +17 -0
  48. package/dist/models/Location.d.ts.map +1 -0
  49. package/dist/models/Location.js +2 -0
  50. package/dist/models/Location.js.map +1 -0
  51. package/dist/models/Notice.d.ts +9 -0
  52. package/dist/models/Notice.d.ts.map +1 -0
  53. package/dist/models/Notice.js +2 -0
  54. package/dist/models/Notice.js.map +1 -0
  55. package/dist/models/Opportunity.d.ts +11 -0
  56. package/dist/models/Opportunity.d.ts.map +1 -0
  57. package/dist/models/Opportunity.js +2 -0
  58. package/dist/models/Opportunity.js.map +1 -0
  59. package/dist/models/RecipientProfile.d.ts +12 -0
  60. package/dist/models/RecipientProfile.d.ts.map +1 -0
  61. package/dist/models/RecipientProfile.js +2 -0
  62. package/dist/models/RecipientProfile.js.map +1 -0
  63. package/dist/models/index.d.ts +11 -0
  64. package/dist/models/index.d.ts.map +1 -0
  65. package/dist/models/index.js +2 -0
  66. package/dist/models/index.js.map +1 -0
  67. package/dist/shapes/explicitSchemas.d.ts +24 -0
  68. package/dist/shapes/explicitSchemas.d.ts.map +1 -0
  69. package/dist/shapes/explicitSchemas.js +1818 -0
  70. package/dist/shapes/explicitSchemas.js.map +1 -0
  71. package/dist/shapes/factory.d.ts +29 -0
  72. package/dist/shapes/factory.d.ts.map +1 -0
  73. package/dist/shapes/factory.js +93 -0
  74. package/dist/shapes/factory.js.map +1 -0
  75. package/dist/shapes/generator.d.ts +53 -0
  76. package/dist/shapes/generator.d.ts.map +1 -0
  77. package/dist/shapes/generator.js +117 -0
  78. package/dist/shapes/generator.js.map +1 -0
  79. package/dist/shapes/index.d.ts +8 -0
  80. package/dist/shapes/index.d.ts.map +1 -0
  81. package/dist/shapes/index.js +8 -0
  82. package/dist/shapes/index.js.map +1 -0
  83. package/dist/shapes/parser.d.ts +36 -0
  84. package/dist/shapes/parser.d.ts.map +1 -0
  85. package/dist/shapes/parser.js +169 -0
  86. package/dist/shapes/parser.js.map +1 -0
  87. package/dist/shapes/schema.d.ts +30 -0
  88. package/dist/shapes/schema.d.ts.map +1 -0
  89. package/dist/shapes/schema.js +63 -0
  90. package/dist/shapes/schema.js.map +1 -0
  91. package/dist/shapes/schemaTypes.d.ts +42 -0
  92. package/dist/shapes/schemaTypes.d.ts.map +1 -0
  93. package/dist/shapes/schemaTypes.js +2 -0
  94. package/dist/shapes/schemaTypes.js.map +1 -0
  95. package/dist/shapes/types.d.ts +46 -0
  96. package/dist/shapes/types.d.ts.map +1 -0
  97. package/dist/shapes/types.js +25 -0
  98. package/dist/shapes/types.js.map +1 -0
  99. package/dist/types.d.ts +28 -0
  100. package/dist/types.d.ts.map +1 -0
  101. package/dist/types.js +2 -0
  102. package/dist/types.js.map +1 -0
  103. package/dist/utils/dates.d.ts +14 -0
  104. package/dist/utils/dates.d.ts.map +1 -0
  105. package/dist/utils/dates.js +25 -0
  106. package/dist/utils/dates.js.map +1 -0
  107. package/dist/utils/http.d.ts +23 -0
  108. package/dist/utils/http.d.ts.map +1 -0
  109. package/dist/utils/http.js +158 -0
  110. package/dist/utils/http.js.map +1 -0
  111. package/dist/utils/number.d.ts +14 -0
  112. package/dist/utils/number.d.ts.map +1 -0
  113. package/dist/utils/number.js +14 -0
  114. package/dist/utils/number.js.map +1 -0
  115. package/dist/utils/unflatten.d.ts +11 -0
  116. package/dist/utils/unflatten.d.ts.map +1 -0
  117. package/dist/utils/unflatten.js +49 -0
  118. package/dist/utils/unflatten.js.map +1 -0
  119. package/docs/API_REFERENCE.md +201 -0
  120. package/docs/DYNAMIC_MODELS.md +127 -0
  121. package/docs/SHAPES.md +94 -0
  122. package/eslint.config.js +37 -0
  123. package/package.json +73 -0
  124. package/tsconfig.json +21 -0
  125. package/vitest.config.ts +18 -0
package/dist/client.js ADDED
@@ -0,0 +1,321 @@
1
+ import { DEFAULT_BASE_URL, ShapeConfig } from "./config.js";
2
+ import { TangoNotFoundError, TangoValidationError } from "./errors.js";
3
+ import { ModelFactory } from "./shapes/factory.js";
4
+ import { ShapeParser } from "./shapes/parser.js";
5
+ import { HttpClient } from "./utils/http.js";
6
+ import { unflattenResponse } from "./utils/unflatten.js";
7
+ function isRecord(value) {
8
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
9
+ }
10
+ function buildPaginatedResponse(raw) {
11
+ const results = Array.isArray(raw?.results) ? raw.results : [];
12
+ const rawCount = raw?.count;
13
+ const count = typeof rawCount === "number" ? rawCount : Number.isFinite(Number(rawCount)) ? Number(rawCount) : results.length;
14
+ const nextVal = raw?.next;
15
+ const previousVal = raw?.previous;
16
+ const pageMetadataVal = raw?.page_metadata;
17
+ const next = typeof nextVal === "string" ? nextVal : null;
18
+ const previous = typeof previousVal === "string" ? previousVal : null;
19
+ const pageMetadata = isRecord(pageMetadataVal) ? pageMetadataVal : null;
20
+ return {
21
+ count,
22
+ next,
23
+ previous,
24
+ pageMetadata,
25
+ results,
26
+ };
27
+ }
28
+ /**
29
+ * Normalize contract filters:
30
+ * - Map high-level parameter names to API query parameters.
31
+ * - Convert sort + order -> ordering.
32
+ * - Remove pagination / shape-related keys (handled separately).
33
+ */
34
+ function buildContractFilterParams(filterObj) {
35
+ const filterParams = { ...(filterObj ?? {}) };
36
+ const apiParams = {};
37
+ // Remove shape-related + pagination params; handled separately
38
+ delete filterParams.shape;
39
+ delete filterParams.flat;
40
+ delete filterParams.flat_lists;
41
+ delete filterParams.flatLists;
42
+ delete filterParams.page;
43
+ delete filterParams.limit;
44
+ const apiParamMapping = {
45
+ naics_code: "naics",
46
+ keyword: "search",
47
+ psc_code: "psc",
48
+ recipient_name: "recipient",
49
+ recipient_uei: "uei",
50
+ set_aside_type: "set_aside",
51
+ };
52
+ const sortField = filterParams.sort;
53
+ const sortOrder = filterParams.order;
54
+ delete filterParams.sort;
55
+ delete filterParams.order;
56
+ if (sortField) {
57
+ const prefix = sortOrder === "desc" ? "-" : "";
58
+ apiParams.ordering = `${prefix}${sortField}`;
59
+ }
60
+ for (const [key, value] of Object.entries(filterParams)) {
61
+ if (value === undefined || value === null)
62
+ continue;
63
+ const apiKey = apiParamMapping[key] ?? key;
64
+ apiParams[apiKey] = value;
65
+ }
66
+ return apiParams;
67
+ }
68
+ export class TangoClient {
69
+ constructor(options = {}) {
70
+ const { apiKey, baseUrl = DEFAULT_BASE_URL, timeoutMs = 30000, fetchImpl } = options;
71
+ let envKey = null;
72
+ try {
73
+ // In some environments process may not exist (e.g. browser), so guard it.
74
+ if (typeof process !== "undefined" && process.env && process.env.TANGO_API_KEY) {
75
+ envKey = process.env.TANGO_API_KEY ?? null;
76
+ }
77
+ }
78
+ catch {
79
+ // ignore
80
+ }
81
+ const keyToUse = apiKey ?? envKey ?? null;
82
+ this.http = new HttpClient({
83
+ baseUrl,
84
+ apiKey: keyToUse,
85
+ timeoutMs,
86
+ fetchImpl,
87
+ });
88
+ this.shapeParser = new ShapeParser();
89
+ this.modelFactory = new ModelFactory();
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Agencies
93
+ // ---------------------------------------------------------------------------
94
+ async listAgencies(options = {}) {
95
+ const { page = 1, limit = 25 } = options;
96
+ const params = {
97
+ page,
98
+ limit: Math.min(limit, 100),
99
+ };
100
+ const data = await this.http.get("/api/agencies/", params);
101
+ return buildPaginatedResponse(data);
102
+ }
103
+ async getAgency(code) {
104
+ if (!code) {
105
+ throw new TangoValidationError("Agency code is required");
106
+ }
107
+ const data = await this.http.get(`/api/agencies/${encodeURIComponent(code)}/`);
108
+ if (!data) {
109
+ throw new TangoNotFoundError(`Agency '${code}' not found`, 404, data);
110
+ }
111
+ // In the Python client, this is normalized into an Agency model; here we return the raw payload.
112
+ return data;
113
+ }
114
+ async listBusinessTypes(options = {}) {
115
+ const { page = 1, limit = 25 } = options;
116
+ const params = {
117
+ page,
118
+ limit: Math.min(limit, 100),
119
+ };
120
+ const data = await this.http.get("/api/business_types/", params);
121
+ return buildPaginatedResponse(data);
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Contracts
125
+ // ---------------------------------------------------------------------------
126
+ async listContracts(options = {}) {
127
+ const { page = 1, limit = 25, shape, flat = false, flatLists = false, filters = {}, ...restFilters } = options;
128
+ const params = {
129
+ page,
130
+ limit: Math.min(limit, 100),
131
+ };
132
+ const shapeToUse = shape ?? ShapeConfig.CONTRACTS_MINIMAL;
133
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
134
+ if (shapeToUse) {
135
+ params.shape = shapeToUse;
136
+ if (flat) {
137
+ params.flat = "true";
138
+ }
139
+ if (flatLists) {
140
+ params.flat_lists = "true";
141
+ }
142
+ }
143
+ const mergedFilters = { ...(filters ?? {}), ...restFilters };
144
+ const apiFilterParams = buildContractFilterParams(mergedFilters);
145
+ Object.assign(params, apiFilterParams);
146
+ const data = await this.http.get("/api/contracts/", params);
147
+ const rawResults = Array.isArray(data?.results) ? data.results : [];
148
+ const results = this.materializeList("Contract", shapeSpec, rawResults, flat);
149
+ const paginated = buildPaginatedResponse({ ...data, results });
150
+ return paginated;
151
+ }
152
+ // ---------------------------------------------------------------------------
153
+ // Entities
154
+ // ---------------------------------------------------------------------------
155
+ async listEntities(options = {}) {
156
+ const { page = 1, limit = 25, shape, flat = false, flatLists = false, search, ...filters } = options;
157
+ const params = {
158
+ page,
159
+ limit: Math.min(limit, 100),
160
+ };
161
+ const shapeToUse = shape ?? ShapeConfig.ENTITIES_MINIMAL;
162
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
163
+ if (shapeToUse) {
164
+ params.shape = shapeToUse;
165
+ if (flat) {
166
+ params.flat = "true";
167
+ }
168
+ if (flatLists) {
169
+ params.flat_lists = "true";
170
+ }
171
+ }
172
+ if (search) {
173
+ params.search = search;
174
+ }
175
+ Object.assign(params, filters);
176
+ const data = await this.http.get("/api/entities/", params);
177
+ const rawResults = Array.isArray(data?.results) ? data.results : [];
178
+ const results = this.materializeList("Entity", shapeSpec, rawResults, flat);
179
+ const paginated = buildPaginatedResponse({ ...data, results });
180
+ return paginated;
181
+ }
182
+ async getEntity(key, options = {}) {
183
+ if (!key) {
184
+ throw new TangoValidationError("Entity key (UEI or CAGE) is required");
185
+ }
186
+ const { shape, flat = false, flatLists = false } = options;
187
+ const params = {};
188
+ const shapeToUse = shape ?? ShapeConfig.ENTITIES_COMPREHENSIVE;
189
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
190
+ if (shapeToUse) {
191
+ params.shape = shapeToUse;
192
+ if (flat) {
193
+ params.flat = "true";
194
+ }
195
+ if (flatLists) {
196
+ params.flat_lists = "true";
197
+ }
198
+ }
199
+ const data = await this.http.get(`/api/entities/${encodeURIComponent(key)}/`, params);
200
+ const result = this.materializeOne("Entity", shapeSpec, data, flat);
201
+ return result;
202
+ }
203
+ // ---------------------------------------------------------------------------
204
+ // Forecasts
205
+ // ---------------------------------------------------------------------------
206
+ async listForecasts(options = {}) {
207
+ const { page = 1, limit = 25, shape, flat = false, flatLists = false, ...filters } = options;
208
+ const params = {
209
+ page,
210
+ limit: Math.min(limit, 100),
211
+ };
212
+ const shapeToUse = shape ?? ShapeConfig.FORECASTS_MINIMAL;
213
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
214
+ if (shapeToUse) {
215
+ params.shape = shapeToUse;
216
+ if (flat)
217
+ params.flat = "true";
218
+ if (flatLists)
219
+ params.flat_lists = "true";
220
+ }
221
+ Object.assign(params, filters);
222
+ const data = await this.http.get("/api/forecasts/", params);
223
+ const rawResults = Array.isArray(data?.results) ? data.results : [];
224
+ const results = this.materializeList("Forecast", shapeSpec, rawResults, flat);
225
+ const paginated = buildPaginatedResponse({ ...data, results });
226
+ return paginated;
227
+ }
228
+ // ---------------------------------------------------------------------------
229
+ // Opportunities
230
+ // ---------------------------------------------------------------------------
231
+ async listOpportunities(options = {}) {
232
+ const { page = 1, limit = 25, shape, flat = false, flatLists = false, ...filters } = options;
233
+ const params = {
234
+ page,
235
+ limit: Math.min(limit, 100),
236
+ };
237
+ const shapeToUse = shape ?? ShapeConfig.OPPORTUNITIES_MINIMAL;
238
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
239
+ if (shapeToUse) {
240
+ params.shape = shapeToUse;
241
+ if (flat)
242
+ params.flat = "true";
243
+ if (flatLists)
244
+ params.flat_lists = "true";
245
+ }
246
+ Object.assign(params, filters);
247
+ const data = await this.http.get("/api/opportunities/", params);
248
+ const rawResults = Array.isArray(data?.results) ? data.results : [];
249
+ const results = this.materializeList("Opportunity", shapeSpec, rawResults, flat);
250
+ const paginated = buildPaginatedResponse({ ...data, results });
251
+ return paginated;
252
+ }
253
+ // ---------------------------------------------------------------------------
254
+ // Notices
255
+ // ---------------------------------------------------------------------------
256
+ async listNotices(options = {}) {
257
+ const { page = 1, limit = 25, shape, flat = false, flatLists = false, ...filters } = options;
258
+ const params = {
259
+ page,
260
+ limit: Math.min(limit, 100),
261
+ };
262
+ const shapeToUse = shape ?? ShapeConfig.NOTICES_MINIMAL;
263
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
264
+ if (shapeToUse) {
265
+ params.shape = shapeToUse;
266
+ if (flat)
267
+ params.flat = "true";
268
+ if (flatLists)
269
+ params.flat_lists = "true";
270
+ }
271
+ Object.assign(params, filters);
272
+ const data = await this.http.get("/api/notices/", params);
273
+ const rawResults = Array.isArray(data?.results) ? data.results : [];
274
+ const results = this.materializeList("Notice", shapeSpec, rawResults, flat);
275
+ const paginated = buildPaginatedResponse({ ...data, results });
276
+ return paginated;
277
+ }
278
+ // ---------------------------------------------------------------------------
279
+ // Grants
280
+ // ---------------------------------------------------------------------------
281
+ async listGrants(options = {}) {
282
+ const { page = 1, limit = 25, shape, flat = false, flatLists = false, ...filters } = options;
283
+ const params = {
284
+ page,
285
+ limit: Math.min(limit, 100),
286
+ };
287
+ const shapeToUse = shape ?? ShapeConfig.GRANTS_MINIMAL;
288
+ const shapeSpec = this.parseShape(shapeToUse, flat, flatLists);
289
+ if (shapeToUse) {
290
+ params.shape = shapeToUse;
291
+ if (flat)
292
+ params.flat = "true";
293
+ if (flatLists)
294
+ params.flat_lists = "true";
295
+ }
296
+ Object.assign(params, filters);
297
+ const data = await this.http.get("/api/grants/", params);
298
+ const rawResults = Array.isArray(data?.results) ? data.results : [];
299
+ const results = this.materializeList("Grant", shapeSpec, rawResults, flat);
300
+ const paginated = buildPaginatedResponse({ ...data, results });
301
+ return paginated;
302
+ }
303
+ parseShape(shape, flat, flatLists) {
304
+ if (!shape)
305
+ return null;
306
+ return this.shapeParser.parseWithFlags(shape, flat, flatLists);
307
+ }
308
+ materializeList(baseModel, shapeSpec, rawItems, flat) {
309
+ const prepared = flat ? rawItems.map((item) => unflattenResponse(item)) : rawItems;
310
+ if (!shapeSpec)
311
+ return prepared;
312
+ return this.modelFactory.createList(baseModel, shapeSpec, prepared);
313
+ }
314
+ materializeOne(baseModel, shapeSpec, rawItem, flat) {
315
+ const prepared = flat ? unflattenResponse(rawItem) : rawItem;
316
+ if (!shapeSpec)
317
+ return prepared;
318
+ return this.modelFactory.createOne(baseModel, shapeSpec, prepared);
319
+ }
320
+ }
321
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const DEFAULT_BASE_URL = "https://tango.makegov.com";
2
+ export declare const ShapeConfig: {
3
+ readonly CONTRACTS_MINIMAL: "key,piid,award_date,recipient(display_name),description,total_contract_value";
4
+ readonly ENTITIES_MINIMAL: "uei,legal_business_name,cage_code,business_types";
5
+ readonly ENTITIES_COMPREHENSIVE: string;
6
+ readonly FORECASTS_MINIMAL: "id,title,anticipated_award_date,fiscal_year,naics_code,status";
7
+ readonly OPPORTUNITIES_MINIMAL: "opportunity_id,title,solicitation_number,response_deadline,active";
8
+ readonly NOTICES_MINIMAL: "notice_id,title,solicitation_number,posted_date";
9
+ readonly GRANTS_MINIMAL: "grant_id,opportunity_number,title,status(*),agency_code";
10
+ };
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D,eAAO,MAAM,WAAW;;;;;;;;CAyBd,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,21 @@
1
+ export const DEFAULT_BASE_URL = "https://tango.makegov.com";
2
+ export const ShapeConfig = {
3
+ // Default for listContracts()
4
+ CONTRACTS_MINIMAL: "key,piid,award_date,recipient(display_name),description,total_contract_value",
5
+ // Default for listEntities()
6
+ ENTITIES_MINIMAL: "uei,legal_business_name,cage_code,business_types",
7
+ // Default for getEntity()
8
+ ENTITIES_COMPREHENSIVE: "uei,legal_business_name,dba_name,cage_code,business_types,primary_naics," +
9
+ "naics_codes,psc_codes,email_address,entity_url,description,capabilities," +
10
+ "keywords,physical_address,mailing_address,federal_obligations," +
11
+ "congressional_district",
12
+ // Default for listForecasts()
13
+ FORECASTS_MINIMAL: "id,title,anticipated_award_date,fiscal_year,naics_code,status",
14
+ // Default for listOpportunities()
15
+ OPPORTUNITIES_MINIMAL: "opportunity_id,title,solicitation_number,response_deadline,active",
16
+ // Default for listNotices()
17
+ NOTICES_MINIMAL: "notice_id,title,solicitation_number,posted_date",
18
+ // Default for listGrants()
19
+ GRANTS_MINIMAL: "grant_id,opportunity_number,title,status(*),agency_code",
20
+ };
21
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,8BAA8B;IAC9B,iBAAiB,EAAE,8EAA8E;IAEjG,6BAA6B;IAC7B,gBAAgB,EAAE,kDAAkD;IAEpE,0BAA0B;IAC1B,sBAAsB,EACpB,0EAA0E;QAC1E,0EAA0E;QAC1E,gEAAgE;QAChE,wBAAwB;IAE1B,8BAA8B;IAC9B,iBAAiB,EAAE,+DAA+D;IAElF,kCAAkC;IAClC,qBAAqB,EAAE,mEAAmE;IAE1F,4BAA4B;IAC5B,eAAe,EAAE,iDAAiD;IAElE,2BAA2B;IAC3B,cAAc,EAAE,yDAAyD;CACjE,CAAC"}
@@ -0,0 +1,39 @@
1
+ export declare class TangoAPIError extends Error {
2
+ readonly statusCode?: number;
3
+ readonly responseData?: unknown;
4
+ constructor(message: string, statusCode?: number, responseData?: unknown);
5
+ }
6
+ export declare class TangoAuthError extends TangoAPIError {
7
+ constructor(message?: string, statusCode?: number, responseData?: unknown);
8
+ }
9
+ export declare class TangoNotFoundError extends TangoAPIError {
10
+ constructor(message?: string, statusCode?: number, responseData?: unknown);
11
+ }
12
+ export declare class TangoValidationError extends TangoAPIError {
13
+ constructor(message?: string, statusCode?: number, responseData?: unknown);
14
+ }
15
+ export declare class TangoRateLimitError extends TangoAPIError {
16
+ constructor(message?: string, statusCode?: number, responseData?: unknown);
17
+ }
18
+ export declare class TangoTimeoutError extends TangoAPIError {
19
+ constructor(message?: string, statusCode?: number, responseData?: unknown);
20
+ }
21
+ export declare class ShapeError extends Error {
22
+ constructor(message: string);
23
+ }
24
+ export declare class ShapeValidationError extends ShapeError {
25
+ constructor(message: string);
26
+ }
27
+ export declare class ShapeParseError extends ShapeError {
28
+ constructor(message: string);
29
+ }
30
+ export declare class TypeGenerationError extends ShapeError {
31
+ constructor(message: string);
32
+ }
33
+ export declare class ModelInstantiationError extends ShapeError {
34
+ readonly fieldName?: string | null;
35
+ readonly expectedType?: string | null;
36
+ readonly actualValue?: unknown;
37
+ constructor(message: string, fieldName?: string | null, expectedType?: string | null, actualValue?: unknown);
38
+ }
39
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAUzE;AAED,qBAAa,cAAe,SAAQ,aAAa;gBACnC,OAAO,SAAyB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAI1F;AAED,qBAAa,kBAAmB,SAAQ,aAAa;gBACvC,OAAO,SAAuB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAIxF;AAED,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,OAAO,SAA+B,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAIhG;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,OAAO,SAAwB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAIzF;AAED,qBAAa,iBAAkB,SAAQ,aAAa;gBACtC,OAAO,SAAsB,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO;CAIvF;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACvB,OAAO,EAAE,MAAM;CAQ5B;AAED,qBAAa,oBAAqB,SAAQ,UAAU;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,UAAU;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,uBAAwB,SAAQ,UAAU;IACrD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,CAAC,EAAE,OAAO;CAO5G"}
package/dist/errors.js ADDED
@@ -0,0 +1,78 @@
1
+ export class TangoAPIError extends Error {
2
+ constructor(message, statusCode, responseData) {
3
+ super(message);
4
+ this.name = "TangoAPIError";
5
+ this.statusCode = statusCode;
6
+ this.responseData = responseData;
7
+ if (Error.captureStackTrace) {
8
+ Error.captureStackTrace(this, this.constructor);
9
+ }
10
+ }
11
+ }
12
+ export class TangoAuthError extends TangoAPIError {
13
+ constructor(message = "Authentication error", statusCode, responseData) {
14
+ super(message, statusCode, responseData);
15
+ this.name = "TangoAuthError";
16
+ }
17
+ }
18
+ export class TangoNotFoundError extends TangoAPIError {
19
+ constructor(message = "Resource not found", statusCode, responseData) {
20
+ super(message, statusCode, responseData);
21
+ this.name = "TangoNotFoundError";
22
+ }
23
+ }
24
+ export class TangoValidationError extends TangoAPIError {
25
+ constructor(message = "Invalid request parameters", statusCode, responseData) {
26
+ super(message, statusCode, responseData);
27
+ this.name = "TangoValidationError";
28
+ }
29
+ }
30
+ export class TangoRateLimitError extends TangoAPIError {
31
+ constructor(message = "Rate limit exceeded", statusCode, responseData) {
32
+ super(message, statusCode, responseData);
33
+ this.name = "TangoRateLimitError";
34
+ }
35
+ }
36
+ export class TangoTimeoutError extends TangoAPIError {
37
+ constructor(message = "Request timed out", statusCode, responseData) {
38
+ super(message, statusCode, responseData);
39
+ this.name = "TangoTimeoutError";
40
+ }
41
+ }
42
+ export class ShapeError extends Error {
43
+ constructor(message) {
44
+ super(message);
45
+ this.name = "ShapeError";
46
+ if (Error.captureStackTrace) {
47
+ Error.captureStackTrace(this, this.constructor);
48
+ }
49
+ }
50
+ }
51
+ export class ShapeValidationError extends ShapeError {
52
+ constructor(message) {
53
+ super(message);
54
+ this.name = "ShapeValidationError";
55
+ }
56
+ }
57
+ export class ShapeParseError extends ShapeError {
58
+ constructor(message) {
59
+ super(message);
60
+ this.name = "ShapeParseError";
61
+ }
62
+ }
63
+ export class TypeGenerationError extends ShapeError {
64
+ constructor(message) {
65
+ super(message);
66
+ this.name = "TypeGenerationError";
67
+ }
68
+ }
69
+ export class ModelInstantiationError extends ShapeError {
70
+ constructor(message, fieldName, expectedType, actualValue) {
71
+ super(message);
72
+ this.name = "ModelInstantiationError";
73
+ this.fieldName = fieldName;
74
+ this.expectedType = expectedType;
75
+ this.actualValue = actualValue;
76
+ }
77
+ }
78
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { TangoClient } from "./client.js";
2
+ export * from "./config.js";
3
+ export * from "./errors.js";
4
+ export * from "./types.js";
5
+ export * from "./models/index.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { TangoClient } from "./client.js";
2
+ export * from "./config.js";
3
+ export * from "./errors.js";
4
+ export * from "./types.js";
5
+ export * from "./models/index.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Department } from "./Department.js";
2
+ export interface Agency {
3
+ code: string;
4
+ name: string;
5
+ abbreviation?: string | null;
6
+ department?: Department | null;
7
+ }
8
+ //# sourceMappingURL=Agency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Agency.d.ts","sourceRoot":"","sources":["../../src/models/Agency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Agency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Agency.js","sourceRoot":"","sources":["../../src/models/Agency.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { RecipientProfile } from "./RecipientProfile.js";
2
+ import { Agency } from "./Agency.js";
3
+ import { Location } from "./Location.js";
4
+ export interface Contract {
5
+ id: string;
6
+ award_id: string;
7
+ recipient_name: string;
8
+ description: string;
9
+ award_amount?: string | null;
10
+ award_date?: string | null;
11
+ fiscal_year?: number | null;
12
+ recipient?: RecipientProfile | null;
13
+ awarding_agency?: Agency | null;
14
+ funding_agency?: Agency | null;
15
+ place_of_performance?: Location | null;
16
+ }
17
+ //# sourceMappingURL=Contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contract.d.ts","sourceRoot":"","sources":["../../src/models/Contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oBAAoB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Contract.js","sourceRoot":"","sources":["../../src/models/Contract.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface Department {
2
+ name: string;
3
+ code: string;
4
+ }
5
+ //# sourceMappingURL=Department.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Department.d.ts","sourceRoot":"","sources":["../../src/models/Department.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Department.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Department.js","sourceRoot":"","sources":["../../src/models/Department.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Location } from "./Location.js";
2
+ export interface Entity {
3
+ key: string;
4
+ display_name: string;
5
+ uei?: string | null;
6
+ cage_code?: string | null;
7
+ legal_business_name?: string | null;
8
+ business_types?: string[] | null;
9
+ physical_address?: Location | null;
10
+ }
11
+ //# sourceMappingURL=Entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../../src/models/Entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;CACpC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../../src/models/Entity.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export interface Forecast {
2
+ id: number;
3
+ title: string;
4
+ description?: string | null;
5
+ anticipated_award_date?: string | null;
6
+ fiscal_year?: number | null;
7
+ naics_code?: string | null;
8
+ status?: string | null;
9
+ is_active?: boolean | null;
10
+ agency?: string | null;
11
+ }
12
+ //# sourceMappingURL=Forecast.d.ts.map