@apexops/capabilities 0.10.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/bound-envelope-transport.d.ts +27 -0
  3. package/dist/bound-envelope-transport.d.ts.map +1 -0
  4. package/dist/bound-envelope-transport.js +96 -0
  5. package/dist/bound-envelope-transport.js.map +1 -0
  6. package/dist/capability.d.ts +36 -0
  7. package/dist/capability.d.ts.map +1 -0
  8. package/dist/capability.js +83 -0
  9. package/dist/capability.js.map +1 -0
  10. package/dist/command-plans.d.ts +49 -0
  11. package/dist/command-plans.d.ts.map +1 -0
  12. package/dist/command-plans.js +157 -0
  13. package/dist/command-plans.js.map +1 -0
  14. package/dist/design-capabilities.d.ts +23 -0
  15. package/dist/design-capabilities.d.ts.map +1 -0
  16. package/dist/design-capabilities.js +32 -0
  17. package/dist/design-capabilities.js.map +1 -0
  18. package/dist/encrypted-envelope-transport.d.ts +32 -0
  19. package/dist/encrypted-envelope-transport.d.ts.map +1 -0
  20. package/dist/encrypted-envelope-transport.js +138 -0
  21. package/dist/encrypted-envelope-transport.js.map +1 -0
  22. package/dist/iac-generation.d.ts +52 -0
  23. package/dist/iac-generation.d.ts.map +1 -0
  24. package/dist/iac-generation.js +645 -0
  25. package/dist/iac-generation.js.map +1 -0
  26. package/dist/iac-normalizers.d.ts +22 -0
  27. package/dist/iac-normalizers.d.ts.map +1 -0
  28. package/dist/iac-normalizers.js +198 -0
  29. package/dist/iac-normalizers.js.map +1 -0
  30. package/dist/iac.d.ts +83 -0
  31. package/dist/iac.d.ts.map +1 -0
  32. package/dist/iac.js +217 -0
  33. package/dist/iac.js.map +1 -0
  34. package/dist/index.d.ts +17 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +17 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/local-plan-transport.d.ts +29 -0
  39. package/dist/local-plan-transport.d.ts.map +1 -0
  40. package/dist/local-plan-transport.js +101 -0
  41. package/dist/local-plan-transport.js.map +1 -0
  42. package/dist/native-iac-providers.d.ts +96 -0
  43. package/dist/native-iac-providers.d.ts.map +1 -0
  44. package/dist/native-iac-providers.js +487 -0
  45. package/dist/native-iac-providers.js.map +1 -0
  46. package/dist/operations-placeholders.d.ts +5 -0
  47. package/dist/operations-placeholders.d.ts.map +1 -0
  48. package/dist/operations-placeholders.js +23 -0
  49. package/dist/operations-placeholders.js.map +1 -0
  50. package/dist/pack-manager.d.ts +95 -0
  51. package/dist/pack-manager.d.ts.map +1 -0
  52. package/dist/pack-manager.js +556 -0
  53. package/dist/pack-manager.js.map +1 -0
  54. package/dist/packs.d.ts +29 -0
  55. package/dist/packs.d.ts.map +1 -0
  56. package/dist/packs.js +51 -0
  57. package/dist/packs.js.map +1 -0
  58. package/dist/process-runner.d.ts +30 -0
  59. package/dist/process-runner.d.ts.map +1 -0
  60. package/dist/process-runner.js +97 -0
  61. package/dist/process-runner.js.map +1 -0
  62. package/dist/secret-redaction.d.ts +3 -0
  63. package/dist/secret-redaction.d.ts.map +1 -0
  64. package/dist/secret-redaction.js +48 -0
  65. package/dist/secret-redaction.js.map +1 -0
  66. package/dist/terraform-provider-schema.d.ts +75 -0
  67. package/dist/terraform-provider-schema.d.ts.map +1 -0
  68. package/dist/terraform-provider-schema.js +307 -0
  69. package/dist/terraform-provider-schema.js.map +1 -0
  70. package/dist/terraform-registry-client.d.ts +63 -0
  71. package/dist/terraform-registry-client.d.ts.map +1 -0
  72. package/dist/terraform-registry-client.js +388 -0
  73. package/dist/terraform-registry-client.js.map +1 -0
  74. package/dist/test/bound-envelope-transport.test.d.ts +2 -0
  75. package/dist/test/bound-envelope-transport.test.d.ts.map +1 -0
  76. package/dist/test/bound-envelope-transport.test.js +30 -0
  77. package/dist/test/bound-envelope-transport.test.js.map +1 -0
  78. package/dist/test/capabilities.test.d.ts +2 -0
  79. package/dist/test/capabilities.test.d.ts.map +1 -0
  80. package/dist/test/capabilities.test.js +86 -0
  81. package/dist/test/capabilities.test.js.map +1 -0
  82. package/dist/test/encrypted-envelope-transport.test.d.ts +2 -0
  83. package/dist/test/encrypted-envelope-transport.test.d.ts.map +1 -0
  84. package/dist/test/encrypted-envelope-transport.test.js +74 -0
  85. package/dist/test/encrypted-envelope-transport.test.js.map +1 -0
  86. package/dist/test/fixtures/terraform-provider-schema.d.ts +65 -0
  87. package/dist/test/fixtures/terraform-provider-schema.d.ts.map +1 -0
  88. package/dist/test/fixtures/terraform-provider-schema.js +29 -0
  89. package/dist/test/fixtures/terraform-provider-schema.js.map +1 -0
  90. package/dist/test/fixtures/terraform-registry.d.ts +54 -0
  91. package/dist/test/fixtures/terraform-registry.d.ts.map +1 -0
  92. package/dist/test/fixtures/terraform-registry.js +42 -0
  93. package/dist/test/fixtures/terraform-registry.js.map +1 -0
  94. package/dist/test/iac-generation.test.d.ts +2 -0
  95. package/dist/test/iac-generation.test.d.ts.map +1 -0
  96. package/dist/test/iac-generation.test.js +271 -0
  97. package/dist/test/iac-generation.test.js.map +1 -0
  98. package/dist/test/iac.test.d.ts +2 -0
  99. package/dist/test/iac.test.d.ts.map +1 -0
  100. package/dist/test/iac.test.js +161 -0
  101. package/dist/test/iac.test.js.map +1 -0
  102. package/dist/test/native-iac-providers.test.d.ts +2 -0
  103. package/dist/test/native-iac-providers.test.d.ts.map +1 -0
  104. package/dist/test/native-iac-providers.test.js +594 -0
  105. package/dist/test/native-iac-providers.test.js.map +1 -0
  106. package/dist/test/operations-placeholders.test.d.ts +2 -0
  107. package/dist/test/operations-placeholders.test.d.ts.map +1 -0
  108. package/dist/test/operations-placeholders.test.js +34 -0
  109. package/dist/test/operations-placeholders.test.js.map +1 -0
  110. package/dist/test/pack-manager.test.d.ts +2 -0
  111. package/dist/test/pack-manager.test.d.ts.map +1 -0
  112. package/dist/test/pack-manager.test.js +379 -0
  113. package/dist/test/pack-manager.test.js.map +1 -0
  114. package/dist/test/packs-and-commands.test.d.ts +2 -0
  115. package/dist/test/packs-and-commands.test.d.ts.map +1 -0
  116. package/dist/test/packs-and-commands.test.js +131 -0
  117. package/dist/test/packs-and-commands.test.js.map +1 -0
  118. package/dist/test/process-runner.test.d.ts +2 -0
  119. package/dist/test/process-runner.test.d.ts.map +1 -0
  120. package/dist/test/process-runner.test.js +42 -0
  121. package/dist/test/process-runner.test.js.map +1 -0
  122. package/dist/test/terraform-provider-schema.test.d.ts +2 -0
  123. package/dist/test/terraform-provider-schema.test.d.ts.map +1 -0
  124. package/dist/test/terraform-provider-schema.test.js +259 -0
  125. package/dist/test/terraform-provider-schema.test.js.map +1 -0
  126. package/dist/test/terraform-registry-client.test.d.ts +2 -0
  127. package/dist/test/terraform-registry-client.test.d.ts.map +1 -0
  128. package/dist/test/terraform-registry-client.test.js +321 -0
  129. package/dist/test/terraform-registry-client.test.js.map +1 -0
  130. package/package.json +41 -0
@@ -0,0 +1,307 @@
1
+ import { spawn } from "node:child_process";
2
+ import { TerraformCommandAdapter } from "./command-plans.js";
3
+ import { ProcessRunnerError } from "./process-runner.js";
4
+ const DEFAULT_TIMEOUT_MS = 30_000;
5
+ const DEFAULT_MAX_OUTPUT_BYTES = 20_000_000;
6
+ const MAX_TIMEOUT_MS = 60_000;
7
+ const MAX_OUTPUT_BYTES = 50_000_000;
8
+ const MAX_INPUT_LENGTH = 4096;
9
+ const IDENTIFIER = /^[a-z0-9](?:[a-z0-9_-]{0,98}[a-z0-9])?$/u;
10
+ const VERSION = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/u;
11
+ const FORMAT_VERSION = /^(\d+)\.(\d+)$/u;
12
+ function plainObject(value) {
13
+ return value !== null && typeof value === "object" && !Array.isArray(value)
14
+ ? value
15
+ : null;
16
+ }
17
+ function validPositiveInteger(value, maximum) {
18
+ return Number.isSafeInteger(value) && value > 0 && value <= maximum;
19
+ }
20
+ function validProviderSource(value) {
21
+ if (typeof value !== "string")
22
+ return false;
23
+ const parts = value.split("/");
24
+ return (value.length <= MAX_INPUT_LENGTH &&
25
+ parts.length === 3 &&
26
+ parts[0] === "registry.terraform.io" &&
27
+ IDENTIFIER.test(parts[1]) &&
28
+ IDENTIFIER.test(parts[2]));
29
+ }
30
+ function validSchemaProviderSource(value) {
31
+ return value === "terraform.io/builtin/terraform" || validProviderSource(value);
32
+ }
33
+ function validName(value) {
34
+ return typeof value === "string" && value.length <= MAX_INPUT_LENGTH && IDENTIFIER.test(value);
35
+ }
36
+ function schemaRepresentation(value) {
37
+ const schema = plainObject(value);
38
+ return schema !== null &&
39
+ Number.isSafeInteger(schema.version) &&
40
+ Number(schema.version) >= 0 &&
41
+ plainObject(schema.block) !== null
42
+ ? schema
43
+ : null;
44
+ }
45
+ function sortedSchemaKeys(value) {
46
+ const object = plainObject(value);
47
+ if (object === null)
48
+ return null;
49
+ if (Object.entries(object).some(([name, entry]) => !validName(name) || schemaRepresentation(entry) === null)) {
50
+ return null;
51
+ }
52
+ return Object.keys(object).sort();
53
+ }
54
+ function unavailableReason(error) {
55
+ if (!(error instanceof ProcessRunnerError))
56
+ return "spawn";
57
+ const reasons = {
58
+ PROCESS_EXIT_NONZERO: "process-exit",
59
+ PROCESS_OUTPUT_LIMIT: "output-limit",
60
+ PROCESS_SPAWN_ERROR: "spawn",
61
+ PROCESS_TIMEOUT: "timeout",
62
+ };
63
+ return reasons[error.code];
64
+ }
65
+ class TerraformMetadataRunner {
66
+ async run(request) {
67
+ if (request.plan.executable !== "terraform" ||
68
+ (request.plan.args.join("\0") !== "providers\0schema\0-json" && request.plan.args.join("\0") !== "version\0-json")) {
69
+ throw new TypeError("Terraform metadata runner accepts only schema and version plans");
70
+ }
71
+ return await new Promise((resolve, reject) => {
72
+ const child = spawn(request.plan.executable, [...request.plan.args], {
73
+ shell: false,
74
+ windowsHide: true,
75
+ env: Object.fromEntries(Object.entries(process.env).filter(([key]) => !key.toUpperCase().startsWith("TF_CLI_ARGS"))),
76
+ ...(request.plan.cwd === undefined ? {} : { cwd: request.plan.cwd }),
77
+ });
78
+ let stdout = Buffer.alloc(0);
79
+ let stderrBytes = 0;
80
+ let outputTruncated = false;
81
+ let timedOut = false;
82
+ const consume = (current, chunk, retain) => {
83
+ const remaining = request.maxOutputBytes - stdout.length - stderrBytes;
84
+ if (remaining <= 0 || chunk.length > remaining) {
85
+ outputTruncated = true;
86
+ child.kill("SIGKILL");
87
+ if (!retain || remaining <= 0)
88
+ return current;
89
+ return Buffer.concat([current, chunk.subarray(0, remaining)]);
90
+ }
91
+ if (!retain) {
92
+ stderrBytes += chunk.length;
93
+ return current;
94
+ }
95
+ return Buffer.concat([current, chunk]);
96
+ };
97
+ child.stdout.on("data", (chunk) => {
98
+ stdout = consume(stdout, chunk, true);
99
+ });
100
+ child.stderr.on("data", (chunk) => {
101
+ consume(Buffer.alloc(0), chunk, false);
102
+ });
103
+ const timeout = setTimeout(() => {
104
+ timedOut = true;
105
+ child.kill("SIGKILL");
106
+ }, request.timeoutMs);
107
+ child.once("error", () => {
108
+ clearTimeout(timeout);
109
+ reject(new ProcessRunnerError("PROCESS_SPAWN_ERROR", "Terraform metadata process could not start"));
110
+ });
111
+ child.once("close", (exitCode) => {
112
+ clearTimeout(timeout);
113
+ if (timedOut) {
114
+ reject(new ProcessRunnerError("PROCESS_TIMEOUT", "Terraform metadata process timed out"));
115
+ }
116
+ else if (outputTruncated) {
117
+ reject(new ProcessRunnerError("PROCESS_OUTPUT_LIMIT", "Terraform metadata output exceeded its limit"));
118
+ }
119
+ else if (exitCode !== 0) {
120
+ reject(new ProcessRunnerError("PROCESS_EXIT_NONZERO", "Terraform metadata process failed"));
121
+ }
122
+ else {
123
+ resolve(stdout.toString("utf8"));
124
+ }
125
+ });
126
+ });
127
+ }
128
+ }
129
+ export class TerraformProviderIntrospection {
130
+ #runner;
131
+ #commands = new TerraformCommandAdapter();
132
+ #timeoutMs;
133
+ #maxOutputBytes;
134
+ constructor(options = {}) {
135
+ this.#timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
136
+ this.#maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
137
+ if (!validPositiveInteger(this.#timeoutMs, MAX_TIMEOUT_MS) ||
138
+ !validPositiveInteger(this.#maxOutputBytes, MAX_OUTPUT_BYTES)) {
139
+ throw new TypeError("Terraform provider introspection bounds are invalid");
140
+ }
141
+ this.#runner = options.runner ?? new TerraformMetadataRunner();
142
+ }
143
+ async inspect(cwd) {
144
+ if (typeof cwd !== "string" || cwd.trim().length === 0 || cwd.length > MAX_INPUT_LENGTH || cwd.includes("\0")) {
145
+ return { status: "invalid", reason: "invalid-cwd" };
146
+ }
147
+ try {
148
+ const [schemaResult, versionResult] = await Promise.allSettled([
149
+ this.#run(this.#commands.providerSchemas(cwd)),
150
+ this.#run(this.#commands.versionJson(cwd)),
151
+ ]);
152
+ if (schemaResult.status === "rejected")
153
+ throw schemaResult.reason;
154
+ if (versionResult.status === "rejected")
155
+ throw versionResult.reason;
156
+ return this.#parse(schemaResult.value, versionResult.value);
157
+ }
158
+ catch (error) {
159
+ return { status: "unavailable", reason: unavailableReason(error) };
160
+ }
161
+ }
162
+ async select(cwd, selector) {
163
+ if (selector === null || typeof selector !== "object") {
164
+ return { status: "invalid", reason: "invalid-selector" };
165
+ }
166
+ if (!validSchemaProviderSource(selector.providerSource)) {
167
+ return { status: "invalid", reason: "invalid-provider-source" };
168
+ }
169
+ if (!["provider", "resource", "data-source", "list-resource"].includes(selector.kind)) {
170
+ return { status: "invalid", reason: "invalid-schema-kind" };
171
+ }
172
+ if (selector.kind === "provider" && selector.name !== undefined) {
173
+ return { status: "invalid", reason: "invalid-schema-name" };
174
+ }
175
+ if (selector.kind !== "provider" && (selector.name === undefined || !validName(selector.name))) {
176
+ return { status: "invalid", reason: "invalid-schema-name" };
177
+ }
178
+ const inspected = await this.inspect(cwd);
179
+ if (inspected.status !== "ok")
180
+ return inspected;
181
+ const provider = inspected.value.providers.find(({ source }) => source === selector.providerSource);
182
+ if (provider === undefined)
183
+ return { status: "missing" };
184
+ const collectionKey = {
185
+ resource: "resource_schemas",
186
+ "data-source": "data_source_schemas",
187
+ "list-resource": "list_resource_schemas",
188
+ };
189
+ const schema = selector.kind === "provider"
190
+ ? plainObject(provider.schema.provider)
191
+ : plainObject(plainObject(provider.schema[collectionKey[selector.kind]])?.[selector.name]);
192
+ if (schema === null)
193
+ return { status: "missing" };
194
+ return {
195
+ status: "ok",
196
+ value: {
197
+ providerSource: provider.source,
198
+ version: provider.version,
199
+ kind: selector.kind,
200
+ ...(selector.name === undefined ? {} : { name: selector.name }),
201
+ schema: structuredClone(schema),
202
+ },
203
+ };
204
+ }
205
+ async documentation(cwd, request) {
206
+ if (request === null || typeof request !== "object") {
207
+ return { status: "invalid", reason: "invalid-documentation-request" };
208
+ }
209
+ if (!["resources", "data-sources", "list-resources"].includes(request.kind)) {
210
+ return { status: "invalid", reason: "invalid-documentation-kind" };
211
+ }
212
+ if (!validName(request.slug))
213
+ return { status: "invalid", reason: "invalid-documentation-slug" };
214
+ if (!validProviderSource(request.providerSource)) {
215
+ return { status: "invalid", reason: "invalid-provider-source" };
216
+ }
217
+ const schemaKind = {
218
+ resources: "resource",
219
+ "data-sources": "data-source",
220
+ "list-resources": "list-resource",
221
+ };
222
+ const selected = await this.select(cwd, {
223
+ providerSource: request.providerSource,
224
+ kind: schemaKind[request.kind],
225
+ name: request.schemaName,
226
+ });
227
+ if (selected.status !== "ok")
228
+ return selected;
229
+ if (selected.value.version === null)
230
+ return { status: "unavailable", reason: "version-mismatch" };
231
+ const [, namespace, name] = request.providerSource.split("/");
232
+ return {
233
+ status: "ok",
234
+ value: {
235
+ providerSource: request.providerSource,
236
+ version: selected.value.version,
237
+ kind: request.kind,
238
+ slug: request.slug,
239
+ url: `https://registry.terraform.io/providers/${namespace}/${name}/${selected.value.version}/docs/${request.kind}/${request.slug}`,
240
+ },
241
+ };
242
+ }
243
+ async #run(plan) {
244
+ return await this.#runner.run({ plan, timeoutMs: this.#timeoutMs, maxOutputBytes: this.#maxOutputBytes });
245
+ }
246
+ #parse(schemaText, versionText) {
247
+ let schemaValue;
248
+ let versionValue;
249
+ try {
250
+ schemaValue = JSON.parse(schemaText);
251
+ versionValue = JSON.parse(versionText);
252
+ }
253
+ catch {
254
+ return { status: "unavailable", reason: "malformed-response" };
255
+ }
256
+ const schema = plainObject(schemaValue);
257
+ const version = plainObject(versionValue);
258
+ const formatVersion = typeof schema?.format_version === "string" ? schema.format_version : "";
259
+ const format = FORMAT_VERSION.exec(formatVersion);
260
+ if (format === null)
261
+ return { status: "unavailable", reason: "malformed-response" };
262
+ if (format[1] !== "1")
263
+ return { status: "unavailable", reason: "unsupported-format" };
264
+ const providerSchemas = schema?.provider_schemas === undefined ? {} : plainObject(schema.provider_schemas);
265
+ const providerSelections = plainObject(version?.provider_selections);
266
+ const terraformVersion = typeof version?.terraform_version === "string" ? version.terraform_version : "";
267
+ if (providerSchemas === null || providerSelections === null || !VERSION.test(terraformVersion)) {
268
+ return { status: "unavailable", reason: "malformed-response" };
269
+ }
270
+ const providers = [];
271
+ for (const source of Object.keys(providerSchemas).sort()) {
272
+ const providerSchema = plainObject(providerSchemas[source]);
273
+ const selectedVersion = providerSelections[source];
274
+ const builtIn = source === "terraform.io/builtin/terraform";
275
+ if (!validSchemaProviderSource(source) || providerSchema === null) {
276
+ return { status: "unavailable", reason: "version-mismatch" };
277
+ }
278
+ if (!builtIn && (typeof selectedVersion !== "string" || !VERSION.test(selectedVersion))) {
279
+ return { status: "unavailable", reason: "version-mismatch" };
280
+ }
281
+ if (builtIn && selectedVersion !== undefined) {
282
+ return { status: "unavailable", reason: "version-mismatch" };
283
+ }
284
+ const resources = sortedSchemaKeys(providerSchema.resource_schemas);
285
+ const dataSources = sortedSchemaKeys(providerSchema.data_source_schemas);
286
+ const listResources = providerSchema.list_resource_schemas === undefined
287
+ ? []
288
+ : sortedSchemaKeys(providerSchema.list_resource_schemas);
289
+ if (resources === null ||
290
+ dataSources === null ||
291
+ listResources === null ||
292
+ schemaRepresentation(providerSchema.provider) === null) {
293
+ return { status: "unavailable", reason: "malformed-response" };
294
+ }
295
+ providers.push({
296
+ source,
297
+ version: builtIn ? null : selectedVersion,
298
+ schema: structuredClone(providerSchema),
299
+ resources,
300
+ dataSources,
301
+ listResources,
302
+ });
303
+ }
304
+ return { status: "ok", value: { formatVersion, terraformVersion, providers } };
305
+ }
306
+ }
307
+ //# sourceMappingURL=terraform-provider-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-provider-schema.js","sourceRoot":"","sources":["../src/terraform-provider-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export type TerraformRegistryUnavailableReason = "http" | "malformed-response" | "rate-limited" | "response-too-large" | "timeout" | "transport";
2
+ export type TerraformRegistryResult<T> = {
3
+ readonly status: "ok";
4
+ readonly value: T;
5
+ readonly cached: boolean;
6
+ } | {
7
+ readonly status: "missing";
8
+ readonly note: string;
9
+ readonly cached: boolean;
10
+ } | {
11
+ readonly status: "invalid";
12
+ readonly note: string;
13
+ } | {
14
+ readonly status: "unavailable";
15
+ readonly reason: TerraformRegistryUnavailableReason;
16
+ readonly note: string;
17
+ };
18
+ export interface TerraformModuleSummary {
19
+ readonly id: string;
20
+ readonly namespace: string;
21
+ readonly name: string;
22
+ readonly provider: string;
23
+ readonly version: string;
24
+ readonly description: string;
25
+ readonly verified: boolean;
26
+ readonly downloads: number;
27
+ }
28
+ export interface TerraformModuleSearchResult {
29
+ readonly modules: readonly TerraformModuleSummary[];
30
+ readonly offset: number;
31
+ readonly nextOffset: number | null;
32
+ readonly limit: number;
33
+ }
34
+ export interface TerraformModuleDetails extends TerraformModuleSummary {
35
+ readonly source: string;
36
+ }
37
+ export interface TerraformVersionResult {
38
+ readonly versions: readonly string[];
39
+ readonly latestStable: string | null;
40
+ }
41
+ export interface TerraformRegistryClientOptions {
42
+ readonly fetch?: typeof fetch;
43
+ readonly now?: () => number;
44
+ readonly sleep?: (milliseconds: number) => Promise<void>;
45
+ readonly timeoutMs?: number;
46
+ readonly maxResponseBytes?: number;
47
+ readonly cacheTtlMs?: number;
48
+ readonly maxCacheEntries?: number;
49
+ readonly retries?: number;
50
+ readonly retryDelayMs?: number;
51
+ }
52
+ export declare class TerraformRegistryClient {
53
+ #private;
54
+ constructor(options?: TerraformRegistryClientOptions);
55
+ searchModules(query: string, options?: {
56
+ readonly offset?: number;
57
+ readonly limit?: number;
58
+ }): Promise<TerraformRegistryResult<TerraformModuleSearchResult>>;
59
+ getModuleDetails(namespace: string, name: string, provider: string, version: string): Promise<TerraformRegistryResult<TerraformModuleDetails>>;
60
+ getModuleVersions(namespace: string, name: string, provider: string): Promise<TerraformRegistryResult<TerraformVersionResult>>;
61
+ getProviderVersions(namespace: string, name: string): Promise<TerraformRegistryResult<TerraformVersionResult>>;
62
+ }
63
+ //# sourceMappingURL=terraform-registry-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-registry-client.d.ts","sourceRoot":"","sources":["../src/terraform-registry-client.ts"],"names":[],"mappings":"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"}