@tiangong-ai/cli 0.0.51 → 0.0.55

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 (216) hide show
  1. package/AGENTS.md +22 -2
  2. package/README.md +171 -7
  3. package/dist/cli.js +10 -1
  4. package/dist/cli.js.map +1 -1
  5. package/dist/data/builtins.d.ts +1 -0
  6. package/dist/data/builtins.js +40 -0
  7. package/dist/data/builtins.js.map +1 -0
  8. package/dist/data/catalog.d.ts +25 -0
  9. package/dist/data/catalog.js +305 -0
  10. package/dist/data/catalog.js.map +1 -0
  11. package/dist/data/commands.d.ts +9 -0
  12. package/dist/data/commands.js +307 -0
  13. package/dist/data/commands.js.map +1 -0
  14. package/dist/data/connectors/airnow-hourly-observations.d.ts +2 -0
  15. package/dist/data/connectors/airnow-hourly-observations.js +522 -0
  16. package/dist/data/connectors/airnow-hourly-observations.js.map +1 -0
  17. package/dist/data/connectors/airnow-hourly-observations.schemas.d.ts +299 -0
  18. package/dist/data/connectors/airnow-hourly-observations.schemas.js +188 -0
  19. package/dist/data/connectors/airnow-hourly-observations.schemas.js.map +1 -0
  20. package/dist/data/connectors/bluesky-public-posts.d.ts +2 -0
  21. package/dist/data/connectors/bluesky-public-posts.js +705 -0
  22. package/dist/data/connectors/bluesky-public-posts.js.map +1 -0
  23. package/dist/data/connectors/bluesky-public-posts.schemas.d.ts +733 -0
  24. package/dist/data/connectors/bluesky-public-posts.schemas.js +422 -0
  25. package/dist/data/connectors/bluesky-public-posts.schemas.js.map +1 -0
  26. package/dist/data/connectors/epa-eis-records.d.ts +2 -0
  27. package/dist/data/connectors/epa-eis-records.js +566 -0
  28. package/dist/data/connectors/epa-eis-records.js.map +1 -0
  29. package/dist/data/connectors/epa-eis-records.schemas.d.ts +199 -0
  30. package/dist/data/connectors/epa-eis-records.schemas.js +146 -0
  31. package/dist/data/connectors/epa-eis-records.schemas.js.map +1 -0
  32. package/dist/data/connectors/federal-register-documents.d.ts +2 -0
  33. package/dist/data/connectors/federal-register-documents.js +517 -0
  34. package/dist/data/connectors/federal-register-documents.js.map +1 -0
  35. package/dist/data/connectors/federal-register-documents.schemas.d.ts +357 -0
  36. package/dist/data/connectors/federal-register-documents.schemas.js +243 -0
  37. package/dist/data/connectors/federal-register-documents.schemas.js.map +1 -0
  38. package/dist/data/connectors/gdelt-doc-search.d.ts +2 -0
  39. package/dist/data/connectors/gdelt-doc-search.js +658 -0
  40. package/dist/data/connectors/gdelt-doc-search.js.map +1 -0
  41. package/dist/data/connectors/gdelt-doc-search.schemas.d.ts +446 -0
  42. package/dist/data/connectors/gdelt-doc-search.schemas.js +330 -0
  43. package/dist/data/connectors/gdelt-doc-search.schemas.js.map +1 -0
  44. package/dist/data/connectors/gdelt-file-feeds.d.ts +4 -0
  45. package/dist/data/connectors/gdelt-file-feeds.js +591 -0
  46. package/dist/data/connectors/gdelt-file-feeds.js.map +1 -0
  47. package/dist/data/connectors/gdelt-file-feeds.schemas.d.ts +40 -0
  48. package/dist/data/connectors/gdelt-file-feeds.schemas.js +256 -0
  49. package/dist/data/connectors/gdelt-file-feeds.schemas.js.map +1 -0
  50. package/dist/data/connectors/nasa-firms-fire.d.ts +2 -0
  51. package/dist/data/connectors/nasa-firms-fire.js +578 -0
  52. package/dist/data/connectors/nasa-firms-fire.js.map +1 -0
  53. package/dist/data/connectors/nasa-firms-fire.schemas.d.ts +369 -0
  54. package/dist/data/connectors/nasa-firms-fire.schemas.js +238 -0
  55. package/dist/data/connectors/nasa-firms-fire.schemas.js.map +1 -0
  56. package/dist/data/connectors/open-meteo-air-quality.d.ts +2 -0
  57. package/dist/data/connectors/open-meteo-air-quality.js +401 -0
  58. package/dist/data/connectors/open-meteo-air-quality.js.map +1 -0
  59. package/dist/data/connectors/open-meteo-air-quality.schemas.d.ts +335 -0
  60. package/dist/data/connectors/open-meteo-air-quality.schemas.js +225 -0
  61. package/dist/data/connectors/open-meteo-air-quality.schemas.js.map +1 -0
  62. package/dist/data/connectors/open-meteo-flood.d.ts +2 -0
  63. package/dist/data/connectors/open-meteo-flood.js +446 -0
  64. package/dist/data/connectors/open-meteo-flood.js.map +1 -0
  65. package/dist/data/connectors/open-meteo-flood.schemas.d.ts +388 -0
  66. package/dist/data/connectors/open-meteo-flood.schemas.js +227 -0
  67. package/dist/data/connectors/open-meteo-flood.schemas.js.map +1 -0
  68. package/dist/data/connectors/open-meteo-historical-weather.d.ts +2 -0
  69. package/dist/data/connectors/open-meteo-historical-weather.js +468 -0
  70. package/dist/data/connectors/open-meteo-historical-weather.js.map +1 -0
  71. package/dist/data/connectors/open-meteo-historical-weather.schemas.d.ts +420 -0
  72. package/dist/data/connectors/open-meteo-historical-weather.schemas.js +282 -0
  73. package/dist/data/connectors/open-meteo-historical-weather.schemas.js.map +1 -0
  74. package/dist/data/connectors/openaq-air-quality.d.ts +2 -0
  75. package/dist/data/connectors/openaq-air-quality.js +734 -0
  76. package/dist/data/connectors/openaq-air-quality.js.map +1 -0
  77. package/dist/data/connectors/openaq-air-quality.schemas.d.ts +1067 -0
  78. package/dist/data/connectors/openaq-air-quality.schemas.js +512 -0
  79. package/dist/data/connectors/openaq-air-quality.schemas.js.map +1 -0
  80. package/dist/data/connectors/regulations-gov-attachments.d.ts +2 -0
  81. package/dist/data/connectors/regulations-gov-attachments.js +486 -0
  82. package/dist/data/connectors/regulations-gov-attachments.js.map +1 -0
  83. package/dist/data/connectors/regulations-gov-attachments.schemas.d.ts +270 -0
  84. package/dist/data/connectors/regulations-gov-attachments.schemas.js +181 -0
  85. package/dist/data/connectors/regulations-gov-attachments.schemas.js.map +1 -0
  86. package/dist/data/connectors/regulations-gov-comments.d.ts +2 -0
  87. package/dist/data/connectors/regulations-gov-comments.js +718 -0
  88. package/dist/data/connectors/regulations-gov-comments.js.map +1 -0
  89. package/dist/data/connectors/regulations-gov-comments.schemas.d.ts +717 -0
  90. package/dist/data/connectors/regulations-gov-comments.schemas.js +389 -0
  91. package/dist/data/connectors/regulations-gov-comments.schemas.js.map +1 -0
  92. package/dist/data/connectors/usbr-project-records.d.ts +2 -0
  93. package/dist/data/connectors/usbr-project-records.js +467 -0
  94. package/dist/data/connectors/usbr-project-records.js.map +1 -0
  95. package/dist/data/connectors/usbr-project-records.schemas.d.ts +194 -0
  96. package/dist/data/connectors/usbr-project-records.schemas.js +137 -0
  97. package/dist/data/connectors/usbr-project-records.schemas.js.map +1 -0
  98. package/dist/data/connectors/usbr-rise.d.ts +2 -0
  99. package/dist/data/connectors/usbr-rise.js +625 -0
  100. package/dist/data/connectors/usbr-rise.js.map +1 -0
  101. package/dist/data/connectors/usbr-rise.schemas.d.ts +623 -0
  102. package/dist/data/connectors/usbr-rise.schemas.js +407 -0
  103. package/dist/data/connectors/usbr-rise.schemas.js.map +1 -0
  104. package/dist/data/connectors/usgs-water-instantaneous-values.d.ts +2 -0
  105. package/dist/data/connectors/usgs-water-instantaneous-values.js +521 -0
  106. package/dist/data/connectors/usgs-water-instantaneous-values.js.map +1 -0
  107. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.d.ts +496 -0
  108. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js +309 -0
  109. package/dist/data/connectors/usgs-water-instantaneous-values.schemas.js.map +1 -0
  110. package/dist/data/connectors/youtube-public-content.d.ts +2 -0
  111. package/dist/data/connectors/youtube-public-content.js +974 -0
  112. package/dist/data/connectors/youtube-public-content.js.map +1 -0
  113. package/dist/data/connectors/youtube-public-content.schemas.d.ts +773 -0
  114. package/dist/data/connectors/youtube-public-content.schemas.js +567 -0
  115. package/dist/data/connectors/youtube-public-content.schemas.js.map +1 -0
  116. package/dist/data/contracts.d.ts +374 -0
  117. package/dist/data/contracts.js +10 -0
  118. package/dist/data/contracts.js.map +1 -0
  119. package/dist/data/runtime/artifacts.d.ts +6 -0
  120. package/dist/data/runtime/artifacts.js +103 -0
  121. package/dist/data/runtime/artifacts.js.map +1 -0
  122. package/dist/data/runtime/bounded-http.d.ts +10 -0
  123. package/dist/data/runtime/bounded-http.js +403 -0
  124. package/dist/data/runtime/bounded-http.js.map +1 -0
  125. package/dist/data/runtime/canonical-json.d.ts +3 -0
  126. package/dist/data/runtime/canonical-json.js +59 -0
  127. package/dist/data/runtime/canonical-json.js.map +1 -0
  128. package/dist/data/runtime/credentials.d.ts +14 -0
  129. package/dist/data/runtime/credentials.js +67 -0
  130. package/dist/data/runtime/credentials.js.map +1 -0
  131. package/dist/data/runtime/csv.d.ts +4 -0
  132. package/dist/data/runtime/csv.js +51 -0
  133. package/dist/data/runtime/csv.js.map +1 -0
  134. package/dist/data/runtime/errors.d.ts +22 -0
  135. package/dist/data/runtime/errors.js +101 -0
  136. package/dist/data/runtime/errors.js.map +1 -0
  137. package/dist/data/runtime/execute.d.ts +11 -0
  138. package/dist/data/runtime/execute.js +358 -0
  139. package/dist/data/runtime/execute.js.map +1 -0
  140. package/dist/data/runtime/receipts.d.ts +13 -0
  141. package/dist/data/runtime/receipts.js +38 -0
  142. package/dist/data/runtime/receipts.js.map +1 -0
  143. package/dist/data/schemas/catalog.v1.json +73 -0
  144. package/dist/data/schemas/core-receipt.v1.json +117 -0
  145. package/dist/data/schemas/describe.v1.json +24 -0
  146. package/dist/data/schemas/discovery.v1.json +130 -0
  147. package/dist/data/schemas/doctor.v1.json +40 -0
  148. package/dist/data/schemas/error.v1.json +48 -0
  149. package/dist/data/schemas/manifest.v1.json +174 -0
  150. package/dist/data/schemas/run-request.v1.json +37 -0
  151. package/dist/data/schemas/run-result.v1.json +77 -0
  152. package/dist/data/schemas.d.ts +27 -0
  153. package/dist/data/schemas.js +69 -0
  154. package/dist/data/schemas.js.map +1 -0
  155. package/dist/env.js.map +1 -1
  156. package/dist/errors.js.map +1 -1
  157. package/dist/http.js.map +1 -1
  158. package/dist/kb/config.js.map +1 -1
  159. package/dist/kb/pipeline-health.js.map +1 -1
  160. package/dist/research/orchestration.js +54 -7
  161. package/dist/research/orchestration.js.map +1 -1
  162. package/dist/research/workspace/acquisition.js.map +1 -1
  163. package/dist/research/workspace/audit-bundle.js +7 -2
  164. package/dist/research/workspace/audit-bundle.js.map +1 -1
  165. package/dist/research/workspace/broker.js.map +1 -1
  166. package/dist/research/workspace/constants.js.map +1 -1
  167. package/dist/research/workspace/credentials.d.ts +3 -0
  168. package/dist/research/workspace/credentials.js +20 -3
  169. package/dist/research/workspace/credentials.js.map +1 -1
  170. package/dist/research/workspace/data-evidence-adapter.d.ts +60 -0
  171. package/dist/research/workspace/data-evidence-adapter.js +314 -0
  172. package/dist/research/workspace/data-evidence-adapter.js.map +1 -0
  173. package/dist/research/workspace/discovery-status.js +10 -7
  174. package/dist/research/workspace/discovery-status.js.map +1 -1
  175. package/dist/research/workspace/discovery.js +12 -11
  176. package/dist/research/workspace/discovery.js.map +1 -1
  177. package/dist/research/workspace/evidence-ledger.d.ts +8 -1
  178. package/dist/research/workspace/evidence-ledger.js +46 -2
  179. package/dist/research/workspace/evidence-ledger.js.map +1 -1
  180. package/dist/research/workspace/evidence.d.ts +31 -0
  181. package/dist/research/workspace/evidence.js +77 -0
  182. package/dist/research/workspace/evidence.js.map +1 -1
  183. package/dist/research/workspace/executor.js.map +1 -1
  184. package/dist/research/workspace/external-skills.d.ts +49 -49
  185. package/dist/research/workspace/external-skills.js.map +1 -1
  186. package/dist/research/workspace/platform-capabilities.js.map +1 -1
  187. package/dist/research/workspace/preflight.d.ts +4 -4
  188. package/dist/research/workspace/preflight.js +33 -8
  189. package/dist/research/workspace/preflight.js.map +1 -1
  190. package/dist/research/workspace/projects.js.map +1 -1
  191. package/dist/research/workspace/publication.js.map +1 -1
  192. package/dist/research/workspace/research-policy-wizard.js.map +1 -1
  193. package/dist/research/workspace/research-policy.js.map +1 -1
  194. package/dist/research/workspace/runtime.d.ts +7 -0
  195. package/dist/research/workspace/runtime.js +77 -20
  196. package/dist/research/workspace/runtime.js.map +1 -1
  197. package/dist/research/workspace/sanitization.js.map +1 -1
  198. package/dist/research/workspace/schemas.js +1 -1
  199. package/dist/research/workspace/schemas.js.map +1 -1
  200. package/dist/research/workspace/scientific-design.js.map +1 -1
  201. package/dist/research/workspace/scientific-review.js.map +1 -1
  202. package/dist/research/workspace/setup-catalog.d.ts +9 -9
  203. package/dist/research/workspace/setup-catalog.js +2 -2
  204. package/dist/research/workspace/setup-catalog.js.map +1 -1
  205. package/dist/research/workspace/setup-declarative.js.map +1 -1
  206. package/dist/research/workspace/setup-instructions.d.ts +42 -0
  207. package/dist/research/workspace/setup-instructions.js +413 -0
  208. package/dist/research/workspace/setup-instructions.js.map +1 -0
  209. package/dist/research/workspace/setup-invocation.js.map +1 -1
  210. package/dist/research/workspace/setup-wizard.js +7 -0
  211. package/dist/research/workspace/setup-wizard.js.map +1 -1
  212. package/dist/research/workspace/setup.d.ts +18 -15
  213. package/dist/research/workspace/setup.js +68 -3
  214. package/dist/research/workspace/setup.js.map +1 -1
  215. package/dist/research/workspace/workspace.js.map +1 -1
  216. package/package.json +3 -3
@@ -0,0 +1,403 @@
1
+ import { isIP } from "node:net";
2
+ import { setTimeout as delay } from "node:timers/promises";
3
+ import { canonicalJson, sha256Bytes, sha256CanonicalJson } from "./canonical-json.js";
4
+ import { injectLogicalCredential, resolveDataCredentials } from "./credentials.js";
5
+ import { containsConfiguredSecret, DataRuntimeError } from "./errors.js";
6
+ const REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);
7
+ const SAFE_RESPONSE_HEADERS = new Set(["etag", "last-modified", "request-id", "x-request-id"]);
8
+ const SENSITIVE_QUERY_KEY = /^(access[_-]?token|api[_-]?key|apikey|auth|authorization|code|cookie|credential|key|password|secret|session|sig|signature|token)$/i;
9
+ const SENSITIVE_BODY_KEY = /(^|[_-])(authorization|auth|cookie|credential|password|private[_-]?key|secret|session|token|access[_-]?key|api[_-]?key)([_-]|$)/i;
10
+ export function createBoundedHttpClient(options) {
11
+ const endpoints = new Map(options.endpoints.map((endpoint) => [endpoint.endpointId, endpoint]));
12
+ const declarations = new Map(options.credentials.map((credential) => [credential.credentialId, credential]));
13
+ const resolved = resolveDataCredentials(options.credentials, options.environment);
14
+ const secrets = [...resolved.values.values()];
15
+ const fetchImpl = options.fetchImpl ?? globalThis.fetch;
16
+ return {
17
+ configuredSecrets: () => [...secrets],
18
+ request: async (request) => {
19
+ const endpoint = endpoints.get(request.endpointId);
20
+ if (!endpoint) {
21
+ throw new DataRuntimeError("endpoint-policy-blocked", "The selected data endpoint is not declared by the capability manifest.", { details: { endpointId: request.endpointId } });
22
+ }
23
+ if (!endpoint.allowedMethods.includes(request.method)) {
24
+ throw new DataRuntimeError("endpoint-policy-blocked", "The HTTP method is not allowed by the selected data endpoint.", { details: { endpointId: endpoint.endpointId, method: request.method } });
25
+ }
26
+ const safeTarget = buildTarget(endpoint, request);
27
+ const timeoutMs = boundedOverride(request.timeoutMs, options.limits.timeoutMs, "timeoutMs");
28
+ const maxResponseBytes = boundedOverride(request.maxResponseBytes, options.limits.maxResponseBytes, "maxResponseBytes");
29
+ const headers = new Headers({ Accept: endpoint.allowedContentTypes.join(", ") });
30
+ let credential;
31
+ let credentialedPath = request.path;
32
+ if (request.credentialId) {
33
+ credential = declarations.get(request.credentialId);
34
+ if (!credential) {
35
+ throw new DataRuntimeError("credential-invalid", "The requested logical credential is not declared by the capability manifest.", { details: { credentialId: request.credentialId } });
36
+ }
37
+ credentialedPath = injectLogicalCredential({
38
+ declaration: credential,
39
+ value: resolved.values.get(credential.credentialId),
40
+ endpointId: endpoint.endpointId,
41
+ headers,
42
+ path: request.path,
43
+ });
44
+ }
45
+ const target = credentialedPath === request.path
46
+ ? safeTarget
47
+ : buildTarget(endpoint, { ...request, path: credentialedPath });
48
+ if (/%7b|%7d/i.test(target.pathname)) {
49
+ throw new DataRuntimeError("endpoint-policy-blocked", "Data HTTP paths must not contain unresolved credential placeholders.");
50
+ }
51
+ const body = encodeRequestBody(request, options.limits.maxRequestBytes);
52
+ if (body !== undefined)
53
+ headers.set("Content-Type", "application/json");
54
+ const requestDigest = sha256CanonicalJson({
55
+ capabilityId: options.capabilityId,
56
+ endpointId: endpoint.endpointId,
57
+ method: request.method,
58
+ path: safeTarget.pathname,
59
+ query: sortedQuery(safeTarget),
60
+ bodyDigest: body === undefined ? null : sha256Bytes(Buffer.from(body, "utf8")),
61
+ });
62
+ const { response, attempts } = await performBoundedFetch({
63
+ endpoint,
64
+ initialTarget: target,
65
+ method: request.method,
66
+ body,
67
+ headers,
68
+ timeoutMs,
69
+ limits: options.limits,
70
+ fetchImpl,
71
+ });
72
+ const announcedLength = parseContentLength(response.headers.get("content-length"));
73
+ if (announcedLength !== null && announcedLength > maxResponseBytes) {
74
+ await response.body?.cancel();
75
+ throw new DataRuntimeError("response-too-large", "The provider response exceeds the declared byte limit.", { details: { maxResponseBytes } });
76
+ }
77
+ const bytes = await readBoundedResponse(response, maxResponseBytes);
78
+ if (containsConfiguredSecret(bytes, secrets)) {
79
+ throw new DataRuntimeError("provider-response-invalid", "The provider response reflected a configured credential and was blocked.");
80
+ }
81
+ if (!response.ok) {
82
+ throwHttpStatus(response, credential, options.limits.maxRetryDelayMs, bytes);
83
+ }
84
+ const contentType = normalizedContentType(response.headers.get("content-type"));
85
+ if (!contentTypeAllowed(contentType, endpoint.allowedContentTypes)) {
86
+ throw new DataRuntimeError("provider-response-invalid", "The provider returned a content type outside the connector contract.", {
87
+ details: {
88
+ contentType,
89
+ allowedContentTypes: endpoint.allowedContentTypes,
90
+ },
91
+ });
92
+ }
93
+ const responseDigest = sha256Bytes(bytes);
94
+ const observation = {
95
+ observationId: sha256CanonicalJson({
96
+ requestDigest,
97
+ responseDigest,
98
+ status: response.status,
99
+ attempts,
100
+ }),
101
+ sourceId: endpoint.endpointId,
102
+ endpointId: endpoint.endpointId,
103
+ requestDigest,
104
+ responseDigest,
105
+ responseBytes: bytes.byteLength,
106
+ status: response.status,
107
+ contentType,
108
+ attempts,
109
+ };
110
+ return createHttpResponse(bytes, safeResponseHeaders(response.headers), observation);
111
+ },
112
+ };
113
+ }
114
+ function buildTarget(endpoint, request) {
115
+ if (!request.path.startsWith("/") ||
116
+ request.path.startsWith("//") ||
117
+ request.path.includes("\\") ||
118
+ request.path.includes("?") ||
119
+ request.path.includes("#")) {
120
+ throw new DataRuntimeError("endpoint-policy-blocked", "Data HTTP paths must be absolute path-only values.");
121
+ }
122
+ const target = new URL(request.path, endpoint.baseUrl);
123
+ assertTargetAllowed(target, endpoint);
124
+ for (const key of Object.keys(request.query ?? {}).sort(codePointOrder)) {
125
+ if (SENSITIVE_QUERY_KEY.test(key)) {
126
+ throw new DataRuntimeError("endpoint-policy-blocked", "Credential-like query parameters are not accepted by the data runtime.");
127
+ }
128
+ const value = request.query?.[key];
129
+ for (const item of Array.isArray(value) ? value : [value]) {
130
+ if (item !== undefined)
131
+ target.searchParams.append(key, String(item));
132
+ }
133
+ }
134
+ target.searchParams.sort();
135
+ return target;
136
+ }
137
+ function assertTargetAllowed(target, endpoint) {
138
+ const base = new URL(endpoint.baseUrl);
139
+ if (target.protocol !== "https:" ||
140
+ target.origin !== base.origin ||
141
+ target.username ||
142
+ target.password ||
143
+ target.hash ||
144
+ isIP(target.hostname) !== 0 ||
145
+ !endpoint.pathPrefixes.some((prefix) => target.pathname.startsWith(prefix))) {
146
+ throw new DataRuntimeError("endpoint-policy-blocked", "The data request is outside the connector endpoint scope.", { details: { endpointId: endpoint.endpointId } });
147
+ }
148
+ }
149
+ function encodeRequestBody(request, maxRequestBytes) {
150
+ if (request.method === "GET") {
151
+ if (request.body !== undefined) {
152
+ throw new DataRuntimeError("invalid-request", "GET data operations do not accept an HTTP request body.");
153
+ }
154
+ return undefined;
155
+ }
156
+ if (request.body === undefined)
157
+ return undefined;
158
+ if (containsSensitiveField(request.body)) {
159
+ throw new DataRuntimeError("endpoint-policy-blocked", "Credential-like fields are not accepted in data HTTP request bodies.");
160
+ }
161
+ const encoded = canonicalJson(request.body);
162
+ if (Buffer.byteLength(encoded, "utf8") > maxRequestBytes) {
163
+ throw new DataRuntimeError("invalid-request", "The data HTTP request body exceeds the connector byte limit.", { details: { maxRequestBytes } });
164
+ }
165
+ return encoded;
166
+ }
167
+ async function performBoundedFetch(input) {
168
+ let target = input.initialTarget;
169
+ let redirects = 0;
170
+ let retries = 0;
171
+ let attempts = 0;
172
+ while (true) {
173
+ assertTargetAllowed(target, input.endpoint);
174
+ attempts += 1;
175
+ let response;
176
+ try {
177
+ response = await input.fetchImpl(target.toString(), {
178
+ method: input.method,
179
+ headers: input.headers,
180
+ ...(input.body === undefined ? {} : { body: input.body }),
181
+ redirect: "manual",
182
+ signal: AbortSignal.timeout(input.timeoutMs),
183
+ });
184
+ }
185
+ catch (error) {
186
+ if (isTimeoutError(error)) {
187
+ throw new DataRuntimeError("timeout", "The provider request exceeded its timeout.", {
188
+ retryable: true,
189
+ details: { timeoutMs: input.timeoutMs },
190
+ });
191
+ }
192
+ throw new DataRuntimeError("network-failed", "The provider network request failed.", {
193
+ retryable: true,
194
+ });
195
+ }
196
+ if (REDIRECT_STATUSES.has(response.status)) {
197
+ if (input.method !== "GET") {
198
+ await response.body?.cancel();
199
+ throw new DataRuntimeError("endpoint-policy-blocked", "Redirects are not authorized for POST data requests.");
200
+ }
201
+ const location = response.headers.get("location");
202
+ await response.body?.cancel();
203
+ if (!location || redirects >= input.limits.maxRedirects) {
204
+ throw new DataRuntimeError("endpoint-policy-blocked", "The provider redirect exceeded the connector policy.");
205
+ }
206
+ const redirected = new URL(location, target);
207
+ if (redirected.origin !== target.origin) {
208
+ throw new DataRuntimeError("endpoint-policy-blocked", "Cross-origin data redirects are blocked.");
209
+ }
210
+ assertTargetAllowed(redirected, input.endpoint);
211
+ target = redirected;
212
+ redirects += 1;
213
+ continue;
214
+ }
215
+ if (response.status === 429 && retries < input.limits.maxRetries) {
216
+ const retryAfterMs = parseRetryAfterMs(response.headers.get("retry-after"));
217
+ const effectiveDelay = retryAfterMs ?? 0;
218
+ if (effectiveDelay <= input.limits.maxRetryDelayMs) {
219
+ await response.body?.cancel();
220
+ retries += 1;
221
+ if (effectiveDelay > 0)
222
+ await delay(effectiveDelay);
223
+ continue;
224
+ }
225
+ }
226
+ return { response, attempts };
227
+ }
228
+ }
229
+ async function readBoundedResponse(response, maxBytes) {
230
+ if (!response.body)
231
+ return Buffer.alloc(0);
232
+ const reader = response.body.getReader();
233
+ const chunks = [];
234
+ let total = 0;
235
+ try {
236
+ while (true) {
237
+ const item = await reader.read();
238
+ if (item.done)
239
+ break;
240
+ const chunk = Buffer.from(item.value);
241
+ total += chunk.byteLength;
242
+ if (total > maxBytes) {
243
+ await reader.cancel();
244
+ throw new DataRuntimeError("response-too-large", "The provider response exceeds the declared byte limit.", { details: { maxResponseBytes: maxBytes } });
245
+ }
246
+ chunks.push(chunk);
247
+ }
248
+ }
249
+ finally {
250
+ reader.releaseLock();
251
+ }
252
+ return Buffer.concat(chunks);
253
+ }
254
+ function throwHttpStatus(response, credential, maxRetryDelayMs, bytes) {
255
+ const providerReason = safeProviderErrorReason(bytes);
256
+ if (response.status === 401 || response.status === 403) {
257
+ throw new DataRuntimeError(credential ? "credential-invalid" : "provider-auth-blocked", credential
258
+ ? "The provider rejected the configured logical credential."
259
+ : "The provider requires authorization that is not available to this operation.", {
260
+ userActionRequired: true,
261
+ details: {
262
+ status: response.status,
263
+ ...(credential ? { credentialId: credential.credentialId } : {}),
264
+ ...(providerReason ? { providerReason } : {}),
265
+ },
266
+ });
267
+ }
268
+ if (response.status === 429) {
269
+ const retryAfterMs = parseRetryAfterMs(response.headers.get("retry-after"));
270
+ throw new DataRuntimeError("rate-limited", "The provider rate limit blocked the operation.", {
271
+ retryable: true,
272
+ userActionRequired: (retryAfterMs ?? 0) > maxRetryDelayMs,
273
+ details: {
274
+ status: response.status,
275
+ ...(retryAfterMs === null ? {} : { retryAfterMs }),
276
+ ...(providerReason ? { providerReason } : {}),
277
+ },
278
+ });
279
+ }
280
+ throw new DataRuntimeError("provider-response-invalid", "The provider returned an unsuccessful HTTP response.", {
281
+ retryable: response.status >= 500,
282
+ details: {
283
+ status: response.status,
284
+ ...(providerReason ? { providerReason } : {}),
285
+ },
286
+ });
287
+ }
288
+ function safeProviderErrorReason(bytes) {
289
+ let parsed;
290
+ try {
291
+ parsed = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
292
+ }
293
+ catch {
294
+ return undefined;
295
+ }
296
+ const root = plainRecord(parsed);
297
+ const error = plainRecord(root?.error);
298
+ if (!error)
299
+ return undefined;
300
+ const candidates = [];
301
+ if (Array.isArray(error.errors)) {
302
+ for (const item of error.errors)
303
+ candidates.push(plainRecord(item)?.reason);
304
+ }
305
+ candidates.push(error.reason, error.status);
306
+ return candidates.find((candidate) => typeof candidate === "string" && /^[A-Za-z][A-Za-z0-9._-]{0,63}$/.test(candidate));
307
+ }
308
+ function plainRecord(value) {
309
+ return value !== null && typeof value === "object" && !Array.isArray(value)
310
+ ? value
311
+ : undefined;
312
+ }
313
+ function createHttpResponse(bytes, safeHeaders, observation) {
314
+ return {
315
+ bytes,
316
+ safeHeaders,
317
+ observation,
318
+ json: () => {
319
+ try {
320
+ return JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
321
+ }
322
+ catch {
323
+ throw new DataRuntimeError("provider-response-invalid", "The provider response is not valid UTF-8 JSON.");
324
+ }
325
+ },
326
+ text: () => {
327
+ try {
328
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
329
+ }
330
+ catch {
331
+ throw new DataRuntimeError("normalization-failed", "The provider response is not valid UTF-8 text.");
332
+ }
333
+ },
334
+ };
335
+ }
336
+ function safeResponseHeaders(headers) {
337
+ const result = {};
338
+ const contentType = safeContentTypeMetadata(headers.get("content-type"));
339
+ if (contentType)
340
+ result["content-type"] = contentType;
341
+ for (const name of [...SAFE_RESPONSE_HEADERS].sort(codePointOrder)) {
342
+ const value = headers.get(name);
343
+ if (value)
344
+ result[name] = value.slice(0, 256);
345
+ }
346
+ return result;
347
+ }
348
+ function safeContentTypeMetadata(value) {
349
+ if (!value)
350
+ return null;
351
+ const mediaType = normalizedContentType(value);
352
+ const charset = /(?:^|;)\s*charset\s*=\s*["']?([A-Za-z0-9._-]{1,64})/i.exec(value)?.[1];
353
+ return charset ? `${mediaType}; charset=${charset.toLowerCase()}` : mediaType;
354
+ }
355
+ function normalizedContentType(value) {
356
+ return value?.split(";", 1)[0]?.trim().toLowerCase() || "application/octet-stream";
357
+ }
358
+ function contentTypeAllowed(contentType, allowed) {
359
+ return allowed.some((candidate) => candidate.toLowerCase() === contentType);
360
+ }
361
+ function parseContentLength(value) {
362
+ if (!value || !/^\d+$/.test(value))
363
+ return null;
364
+ const parsed = Number(value);
365
+ return Number.isSafeInteger(parsed) ? parsed : null;
366
+ }
367
+ function parseRetryAfterMs(value) {
368
+ if (!value)
369
+ return null;
370
+ if (/^\d+$/.test(value))
371
+ return Number(value) * 1_000;
372
+ const timestamp = Date.parse(value);
373
+ return Number.isFinite(timestamp) ? Math.max(0, timestamp - Date.now()) : null;
374
+ }
375
+ function boundedOverride(requested, maximum, name) {
376
+ if (requested === undefined)
377
+ return maximum;
378
+ if (!Number.isInteger(requested) || requested < 1 || requested > maximum) {
379
+ throw new DataRuntimeError("invalid-request", `The requested ${name} must be a positive integer no greater than the connector limit.`, { details: { limit: maximum } });
380
+ }
381
+ return requested;
382
+ }
383
+ function sortedQuery(url) {
384
+ const result = {};
385
+ for (const key of [...new Set(url.searchParams.keys())].sort(codePointOrder)) {
386
+ result[key] = url.searchParams.getAll(key);
387
+ }
388
+ return result;
389
+ }
390
+ function containsSensitiveField(value) {
391
+ if (Array.isArray(value))
392
+ return value.some(containsSensitiveField);
393
+ if (value === null || typeof value !== "object")
394
+ return false;
395
+ return Object.entries(value).some(([key, item]) => SENSITIVE_BODY_KEY.test(key) || containsSensitiveField(item));
396
+ }
397
+ function isTimeoutError(error) {
398
+ return (error instanceof DOMException && (error.name === "TimeoutError" || error.name === "AbortError"));
399
+ }
400
+ function codePointOrder(left, right) {
401
+ return left < right ? -1 : left > right ? 1 : 0;
402
+ }
403
+ //# sourceMappingURL=bounded-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded-http.js","sourceRoot":"","sources":["../../../src/data/runtime/bounded-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function canonicalJson(value: unknown): string;
2
+ export declare function sha256CanonicalJson(value: unknown): string;
3
+ export declare function sha256Bytes(value: Uint8Array): string;
@@ -0,0 +1,59 @@
1
+ import { createHash } from "node:crypto";
2
+ export function canonicalJson(value) {
3
+ return JSON.stringify(normalize(value, new WeakSet()));
4
+ }
5
+ export function sha256CanonicalJson(value) {
6
+ return sha256Bytes(Buffer.from(canonicalJson(value), "utf8"));
7
+ }
8
+ export function sha256Bytes(value) {
9
+ return createHash("sha256").update(value).digest("hex");
10
+ }
11
+ function normalize(value, ancestors) {
12
+ if (value === null || typeof value === "string" || typeof value === "boolean")
13
+ return value;
14
+ if (typeof value === "number") {
15
+ if (!Number.isFinite(value))
16
+ throw new TypeError("Canonical JSON numbers must be finite.");
17
+ return Object.is(value, -0) ? 0 : value;
18
+ }
19
+ if (typeof value === "undefined") {
20
+ throw new TypeError("Canonical JSON does not support undefined values.");
21
+ }
22
+ if (typeof value === "bigint") {
23
+ throw new TypeError("Canonical JSON does not support bigint values.");
24
+ }
25
+ if (typeof value === "function" || typeof value === "symbol") {
26
+ throw new TypeError(`Canonical JSON does not support ${typeof value} values.`);
27
+ }
28
+ if (typeof value !== "object")
29
+ throw new TypeError("Unsupported canonical JSON value.");
30
+ if (ancestors.has(value))
31
+ throw new TypeError("Canonical JSON does not support cyclic values.");
32
+ ancestors.add(value);
33
+ try {
34
+ if (Array.isArray(value)) {
35
+ return value.map((item, index) => {
36
+ if (!(index in value))
37
+ throw new TypeError("Canonical JSON does not support sparse arrays.");
38
+ return normalize(item, ancestors);
39
+ });
40
+ }
41
+ const prototype = Object.getPrototypeOf(value);
42
+ if (prototype !== Object.prototype && prototype !== null) {
43
+ throw new TypeError("Canonical JSON supports only plain objects.");
44
+ }
45
+ const source = value;
46
+ const result = {};
47
+ for (const key of Object.keys(source).sort(codePointOrder)) {
48
+ result[key] = normalize(source[key], ancestors);
49
+ }
50
+ return result;
51
+ }
52
+ finally {
53
+ ancestors.delete(value);
54
+ }
55
+ }
56
+ function codePointOrder(left, right) {
57
+ return left < right ? -1 : left > right ? 1 : 0;
58
+ }
59
+ //# sourceMappingURL=canonical-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical-json.js","sourceRoot":"","sources":["../../../src/data/runtime/canonical-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { DataCredentialDeclaration, DataDoctorCheck } from "../contracts.js";
2
+ export interface ResolvedDataCredentials {
3
+ values: Map<string, string>;
4
+ checks: DataDoctorCheck[];
5
+ }
6
+ export declare function resolveDataCredentials(declarations: readonly DataCredentialDeclaration[], environment: NodeJS.ProcessEnv): ResolvedDataCredentials;
7
+ export declare function requiredCredentialsPresent(declarations: readonly DataCredentialDeclaration[], values: ReadonlyMap<string, string>): boolean;
8
+ export declare function injectLogicalCredential(input: {
9
+ declaration: DataCredentialDeclaration;
10
+ value: string | undefined;
11
+ endpointId: string;
12
+ headers: Headers;
13
+ path: string;
14
+ }): string;
@@ -0,0 +1,67 @@
1
+ import { DataRuntimeError } from "./errors.js";
2
+ export function resolveDataCredentials(declarations, environment) {
3
+ const values = new Map();
4
+ const checks = [];
5
+ for (const declaration of declarations) {
6
+ const value = environment[declaration.environmentVariable] ?? "";
7
+ const configured = value.trim().length > 0;
8
+ if (configured)
9
+ values.set(declaration.credentialId, value);
10
+ checks.push({
11
+ checkId: `credential:${declaration.credentialId}`,
12
+ status: configured ? "pass" : declaration.required ? "fail" : "warn",
13
+ message: configured
14
+ ? `Logical credential ${declaration.credentialId} is configured.`
15
+ : declaration.required
16
+ ? `Required logical credential ${declaration.credentialId} is not configured.`
17
+ : `Optional logical credential ${declaration.credentialId} is not configured.`,
18
+ details: {
19
+ credentialId: declaration.credentialId,
20
+ environmentVariable: declaration.environmentVariable,
21
+ configured,
22
+ required: declaration.required,
23
+ },
24
+ });
25
+ }
26
+ return { values, checks };
27
+ }
28
+ export function requiredCredentialsPresent(declarations, values) {
29
+ return declarations.every((declaration) => !declaration.required || values.has(declaration.credentialId));
30
+ }
31
+ export function injectLogicalCredential(input) {
32
+ if (!input.declaration.endpointIds.includes(input.endpointId)) {
33
+ throw new DataRuntimeError("endpoint-policy-blocked", "The logical credential is not authorized for the selected endpoint.", {
34
+ details: {
35
+ credentialId: input.declaration.credentialId,
36
+ endpointId: input.endpointId,
37
+ },
38
+ });
39
+ }
40
+ if (!input.value) {
41
+ throw new DataRuntimeError("credential-missing", `Required logical credential ${input.declaration.credentialId} is not configured.`, {
42
+ userActionRequired: true,
43
+ details: {
44
+ credentialId: input.declaration.credentialId,
45
+ environmentVariable: input.declaration.environmentVariable,
46
+ },
47
+ });
48
+ }
49
+ if (input.declaration.injection.kind === "header") {
50
+ input.headers.set(input.declaration.injection.name, `${input.declaration.injection.prefix}${input.value}`);
51
+ return input.path;
52
+ }
53
+ const placeholder = input.declaration.injection.placeholder;
54
+ const segments = input.path.split("/");
55
+ if (segments.filter((segment) => segment === placeholder).length !== 1) {
56
+ throw new DataRuntimeError("endpoint-policy-blocked", "A path-segment credential placeholder must occur exactly once as a complete path segment.", {
57
+ details: {
58
+ credentialId: input.declaration.credentialId,
59
+ endpointId: input.endpointId,
60
+ },
61
+ });
62
+ }
63
+ return segments
64
+ .map((segment) => segment === placeholder ? encodeURIComponent(input.value) : segment)
65
+ .join("/");
66
+ }
67
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/data/runtime/credentials.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare class CsvParseError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare function parseCsvRows(text: string): string[][];
@@ -0,0 +1,51 @@
1
+ export class CsvParseError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "CsvParseError";
5
+ }
6
+ }
7
+ export function parseCsvRows(text) {
8
+ const rows = [];
9
+ let row = [];
10
+ let field = "";
11
+ let quoted = false;
12
+ for (let index = 0; index < text.length; index += 1) {
13
+ const character = text[index];
14
+ if (quoted) {
15
+ if (character === '"' && text[index + 1] === '"') {
16
+ field += '"';
17
+ index += 1;
18
+ }
19
+ else if (character === '"') {
20
+ quoted = false;
21
+ }
22
+ else {
23
+ field += character;
24
+ }
25
+ }
26
+ else if (character === '"' && field.length === 0) {
27
+ quoted = true;
28
+ }
29
+ else if (character === ",") {
30
+ row.push(field);
31
+ field = "";
32
+ }
33
+ else if (character === "\n") {
34
+ row.push(field.replace(/\r$/, ""));
35
+ rows.push(row);
36
+ row = [];
37
+ field = "";
38
+ }
39
+ else {
40
+ field += character;
41
+ }
42
+ }
43
+ if (quoted)
44
+ throw new CsvParseError("The CSV contains an unterminated quoted field.");
45
+ if (field.length > 0 || row.length > 0) {
46
+ row.push(field.replace(/\r$/, ""));
47
+ rows.push(row);
48
+ }
49
+ return rows;
50
+ }
51
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../../src/data/runtime/csv.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,IAAI,GAAG,GAAa,EAAE,CAAC;IACvB,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAW,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,SAAS,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACjD,KAAK,IAAI,GAAG,CAAC;gBACb,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;gBAC7B,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,KAAK,IAAI,SAAS,CAAC;YACrB,CAAC;QACH,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnD,MAAM,GAAG,IAAI,CAAC;QAChB,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;aAAM,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,GAAG,EAAE,CAAC;YACT,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IACD,IAAI,MAAM;QAAE,MAAM,IAAI,aAAa,CAAC,gDAAgD,CAAC,CAAC;IACtF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}