@fractal_cloud/sdk 1.5.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1971 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) {
13
+ __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ }
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+ let superagent = require("superagent");
29
+ superagent = __toESM(superagent);
30
+
31
+ //#region src/model/core.ts
32
+ /** Build an offer constructor (pure). Default instantiate merges neutral params + vendor config. */
33
+ const defineOffer = (spec) => (config) => ({
34
+ satisfies: spec.satisfies,
35
+ offerType: spec.offerType,
36
+ provider: spec.provider,
37
+ deliveryModel: spec.deliveryModel,
38
+ config,
39
+ instantiate: (ctx) => spec.instantiate ? spec.instantiate(ctx, config) : [{
40
+ id: ctx.id,
41
+ type: spec.offerType,
42
+ provider: spec.provider,
43
+ deliveryModel: spec.deliveryModel,
44
+ parameters: {
45
+ ...ctx.parameters,
46
+ ...config
47
+ },
48
+ dependencies: ctx.dependencies,
49
+ links: ctx.links
50
+ }]
51
+ });
52
+ /** Authoring primitive: create a fresh node for a Component factory. */
53
+ const newNode = (id, component) => ({
54
+ id,
55
+ component,
56
+ parameters: {},
57
+ locked: /* @__PURE__ */ new Set(),
58
+ dependencies: []
59
+ });
60
+ /** Authoring primitive: set a neutral param AND lock it (guardrail, design time). */
61
+ const guardrail = (s, key, value) => ({
62
+ ...s,
63
+ parameters: {
64
+ ...s.parameters,
65
+ [key]: value
66
+ },
67
+ locked: new Set([...s.locked, key])
68
+ });
69
+ /** Authoring primitive: declare a structural dependency on another node. */
70
+ const addDependency = (s, depId) => ({
71
+ ...s,
72
+ dependencies: [...s.dependencies, depId]
73
+ });
74
+ /** Collect the links a component is the source of, in wire shape. */
75
+ const linksFor = (st, sourceId) => st.links.filter((l) => l.sourceId === sourceId).map((l) => ({
76
+ componentId: l.targetId,
77
+ settings: l.settings
78
+ }));
79
+ const ensureUnlocked = (node, key) => {
80
+ if (node.locked.has(key)) throw new Error(`Parameter '${key}' on '${node.id}' is a locked guardrail and cannot be changed.`);
81
+ };
82
+ const setOpen = (st, id, key, value) => {
83
+ const node = st.nodes[id];
84
+ ensureUnlocked(node, key);
85
+ return {
86
+ ...st,
87
+ nodes: {
88
+ ...st.nodes,
89
+ [id]: {
90
+ ...node,
91
+ parameters: {
92
+ ...node.parameters,
93
+ [key]: value
94
+ }
95
+ }
96
+ }
97
+ };
98
+ };
99
+ const appendOpen = (st, id, key, value) => {
100
+ const node = st.nodes[id];
101
+ ensureUnlocked(node, key);
102
+ const prev = node.parameters[key] ?? [];
103
+ return {
104
+ ...st,
105
+ nodes: {
106
+ ...st.nodes,
107
+ [id]: {
108
+ ...node,
109
+ parameters: {
110
+ ...node.parameters,
111
+ [key]: [...prev, value]
112
+ }
113
+ }
114
+ }
115
+ };
116
+ };
117
+ const addChild = (st, parentId, child) => ({
118
+ ...st,
119
+ children: {
120
+ ...st.children,
121
+ [parentId]: [...st.children[parentId] ?? [], child]
122
+ }
123
+ });
124
+ const slotOps = (id) => ({
125
+ set: (k, v) => (st) => setOpen(st, id, k, v),
126
+ append: (k, v) => (st) => appendOpen(st, id, k, v),
127
+ addChild: (child) => (st) => addChild(st, id, child.state)
128
+ });
129
+ /** Collect a parent's child components in instantiation-context shape. */
130
+ const childrenFor = (st, parentId) => (st.children[parentId] ?? []).map((c) => ({
131
+ id: c.id,
132
+ parameters: { ...c.parameters },
133
+ dependencies: [...c.dependencies, parentId],
134
+ links: linksFor(st, c.id)
135
+ }));
136
+ const serialize = (st) => ({
137
+ fractalId: st.fractalId,
138
+ components: st.order.map((id) => {
139
+ const n = st.nodes[id];
140
+ return {
141
+ id,
142
+ component: n.component,
143
+ parameters: { ...n.parameters },
144
+ locked: [...n.locked],
145
+ dependencies: [...n.dependencies],
146
+ links: linksFor(st, id)
147
+ };
148
+ })
149
+ });
150
+ const toLiveSystem = (st, args) => {
151
+ const validIds = new Set(st.order);
152
+ for (const key of Object.keys(args.select)) if (!validIds.has(key)) throw new Error(`Selection key '${key}' does not match any component in the fractal. Valid components: ${st.order.join(", ")}.`);
153
+ const components = [];
154
+ for (const id of st.order) {
155
+ const node = st.nodes[id];
156
+ const offer = args.select[id];
157
+ if (!offer) throw new Error(`Missing offer selection for component '${id}'.`);
158
+ if (offer.satisfies !== node.component) throw new Error(`Offer '${offer.offerType}' does not satisfy component '${node.component}' (selected for '${id}').`);
159
+ const children = childrenFor(st, id);
160
+ const emitted = offer.instantiate({
161
+ id,
162
+ parameters: { ...node.parameters },
163
+ dependencies: node.dependencies,
164
+ links: linksFor(st, id),
165
+ children
166
+ });
167
+ if (children.length > 0) {
168
+ const emittedIds = new Set(emitted.map((c) => c.id));
169
+ const dropped = children.filter((c) => !emittedIds.has(c.id));
170
+ if (dropped.length > 0) throw new Error(`Offer '${offer.offerType}' selected for '${id}' does not emit its child component(s) [${dropped.map((c) => c.id).join(", ")}]. The selected offer must support child components (e.g. databases added via an operation).`);
171
+ }
172
+ components.push(...emitted);
173
+ }
174
+ return {
175
+ name: args.name,
176
+ fractalId: st.fractalId,
177
+ fractalName: st.fractalName,
178
+ version: st.version,
179
+ boundedContext: st.boundedContext,
180
+ environment: args.environment,
181
+ components
182
+ };
183
+ };
184
+ const fluent = (ops, st) => {
185
+ const api = {
186
+ value: st,
187
+ blueprint: serialize(st),
188
+ toLiveSystem: (args) => toLiveSystem(st, args)
189
+ };
190
+ for (const k of Object.keys(ops)) api[k] = (...args) => fluent(ops, ops[k](...args)(st));
191
+ return api;
192
+ };
193
+ function createFractal(def) {
194
+ const order = [];
195
+ const linkRecords = [];
196
+ const slots = def.blueprint({
197
+ add: (n) => {
198
+ order.push(n.state.id);
199
+ return n;
200
+ },
201
+ link: (source, target, settings = {}) => {
202
+ linkRecords.push({
203
+ sourceId: source.state.id,
204
+ targetId: target.state.id,
205
+ settings
206
+ });
207
+ }
208
+ });
209
+ const nodes = {};
210
+ const slotToId = {};
211
+ for (const key of Object.keys(slots)) {
212
+ const node = slots[key];
213
+ nodes[node.state.id] = node.state;
214
+ slotToId[key] = node.state.id;
215
+ }
216
+ const fractalId = `${def.id}:${def.version.major}.${def.version.minor}.${def.version.patch}`;
217
+ const state = {
218
+ fractalId,
219
+ fractalName: def.id,
220
+ version: def.version,
221
+ boundedContext: def.boundedContextId,
222
+ nodes,
223
+ order,
224
+ links: linkRecords,
225
+ children: {}
226
+ };
227
+ const slotOpsMap = {};
228
+ for (const key of Object.keys(slotToId)) slotOpsMap[key] = slotOps(slotToId[key]);
229
+ const ops = def.operations ? def.operations(slotOpsMap) : {};
230
+ return {
231
+ fractalId,
232
+ blueprint: serialize(state),
233
+ ops,
234
+ specialize: () => fluent(ops, state),
235
+ toLiveSystem: (args) => toLiveSystem(state, args)
236
+ };
237
+ }
238
+
239
+ //#endregion
240
+ //#region src/model/service.ts
241
+ /**
242
+ * service.ts — deploy a model LiveSystem to the Fractal Cloud API.
243
+ *
244
+ * Self-contained (the interim SDK service is unproven and not reused). Builds the
245
+ * API payload from the model LiveSystem, submits (create or update), and — in
246
+ * `wait` mode — polls to Active, emitting the canonical SDK wait-mode log lines
247
+ * (see ~/Projects/CLAUDE.md "SDK — Wait Mode Log Format").
248
+ *
249
+ * NOTE: not runtime-verified here (no Fractal Cloud credentials) — covered by
250
+ * mocked-HTTP unit tests in service.test.ts; smoke against the live API with real
251
+ * credentials before release.
252
+ */
253
+ const FRACTAL_API_URL = "https://api.fractal.cloud";
254
+ const CLIENT_ID_HEADER = "X-ClientID";
255
+ const CLIENT_SECRET_HEADER = "X-ClientSecret";
256
+ const DEFAULT_POLL_INTERVAL_MS = 5e3;
257
+ const DEFAULT_TIMEOUT_MS = 6e5;
258
+ const TERMINAL_FAILURE_STATUSES = ["FailedMutation", "Error"];
259
+ const bcString = (bc) => `${bc.ownerType ?? "Personal"}/${bc.ownerId ?? ""}/${bc.name ?? ""}`;
260
+ const liveSystemId = (ls) => `${bcString(ls.boundedContext)}/${ls.name}`;
261
+ const fractalApiId = (ls) => `${bcString(ls.boundedContext)}/${ls.fractalName}:${ls.version.major}.${ls.version.minor}.${ls.version.patch}`;
262
+ const buildBody = (ls) => ({
263
+ liveSystemId: liveSystemId(ls),
264
+ fractalId: fractalApiId(ls),
265
+ blueprintMap: ls.components.reduce((acc, c) => {
266
+ acc[c.id] = {
267
+ type: c.type,
268
+ id: c.id,
269
+ provider: c.provider,
270
+ deliveryModel: c.deliveryModel,
271
+ parameters: c.parameters,
272
+ dependencies: [...c.dependencies],
273
+ links: c.links.map((l) => ({
274
+ componentId: l.componentId,
275
+ settings: l.settings
276
+ }))
277
+ };
278
+ return acc;
279
+ }, {}),
280
+ environment: {
281
+ id: {
282
+ type: ls.environment.ownerType ?? "Personal",
283
+ ownerId: ls.environment.ownerId ?? "",
284
+ shortName: ls.environment.name ?? ""
285
+ },
286
+ parameters: {}
287
+ }
288
+ });
289
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
290
+ const authHeaders = (c) => ({
291
+ [CLIENT_ID_HEADER]: c.clientId,
292
+ [CLIENT_SECRET_HEADER]: c.clientSecret
293
+ });
294
+ const log = (quiet, level, message, fields = {}) => {
295
+ if (quiet) return;
296
+ const ts = (/* @__PURE__ */ new Date()).toISOString();
297
+ const fieldStr = Object.entries(fields).map(([k, v]) => `${k}=${v}`).join(" ");
298
+ console.log(`[${ts}] ${level.padEnd(5)} ${message}${fieldStr ? " " + fieldStr : ""}`);
299
+ };
300
+ const elapsedSec = (startMs) => `${Math.round((Date.now() - startMs) / 1e3)}s`;
301
+ const submit = async (ls, creds) => {
302
+ const url = `${FRACTAL_API_URL}/livesystems/${liveSystemId(ls)}`;
303
+ const existing = await superagent.default.get(url).ok((res) => res.status === 200 || res.status === 404).set(authHeaders(creds));
304
+ const body = buildBody(ls);
305
+ if (existing.status === 200) await superagent.default.put(url).set(authHeaders(creds)).send(body);
306
+ else await superagent.default.post(`${FRACTAL_API_URL}/livesystems`).set(authHeaders(creds)).send(body);
307
+ };
308
+ const getStatus = async (id, creds) => {
309
+ return (await superagent.default.get(`${FRACTAL_API_URL}/livesystems/${id}`).set(authHeaders(creds))).body.status;
310
+ };
311
+ const pollUntilActive = async (ls, creds, opts, startMs) => {
312
+ const quiet = opts.quiet ?? false;
313
+ const interval = opts.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
314
+ const deadline = Date.now() + (opts.timeoutMs ?? DEFAULT_TIMEOUT_MS);
315
+ const id = liveSystemId(ls);
316
+ let round = 0;
317
+ while (Date.now() < deadline) {
318
+ await sleep(interval);
319
+ round++;
320
+ let status;
321
+ try {
322
+ status = await getStatus(id, creds);
323
+ } catch (err) {
324
+ const code = err.status;
325
+ if (code !== void 0 && code >= 400 && code < 500) {
326
+ log(quiet, "ERROR", "Fatal error polling Live System status", {
327
+ system: id,
328
+ round,
329
+ elapsed: elapsedSec(startMs)
330
+ });
331
+ throw err;
332
+ }
333
+ log(quiet, "WARN", "Transient error polling status, retrying", {
334
+ system: id,
335
+ round,
336
+ elapsed: elapsedSec(startMs)
337
+ });
338
+ continue;
339
+ }
340
+ if (status === "Active") return;
341
+ if (TERMINAL_FAILURE_STATUSES.includes(status)) {
342
+ log(quiet, "ERROR", "Live System deployment failed", {
343
+ system: id,
344
+ status,
345
+ elapsed: elapsedSec(startMs)
346
+ });
347
+ throw new Error(`Live system deployment failed with status: ${status}`);
348
+ }
349
+ log(quiet, "CHECK", "Polling Live System status", {
350
+ system: id,
351
+ round,
352
+ status,
353
+ elapsed: elapsedSec(startMs)
354
+ });
355
+ }
356
+ log(quiet, "ERROR", "Live System deployment timed out", {
357
+ system: id,
358
+ elapsed: elapsedSec(startMs),
359
+ timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS
360
+ });
361
+ throw new Error("Live system deployment timed out");
362
+ };
363
+ /** Deploy (create or update) a LiveSystem. `fire-and-forget` submits and returns;
364
+ * `wait` polls until Active (or failure/timeout) emitting wait-mode log lines. */
365
+ async function deploy(ls, creds, opts = { mode: "fire-and-forget" }) {
366
+ if (opts.mode === "fire-and-forget") {
367
+ await submit(ls, creds);
368
+ return;
369
+ }
370
+ const quiet = opts.quiet ?? false;
371
+ const startMs = Date.now();
372
+ log(quiet, "INFO", "Deploying Live System", {
373
+ system: liveSystemId(ls),
374
+ fractal: fractalApiId(ls)
375
+ });
376
+ await submit(ls, creds);
377
+ await pollUntilActive(ls, creds, opts, startMs);
378
+ log(quiet, "INFO", "Live System Active", {
379
+ system: liveSystemId(ls),
380
+ elapsed: elapsedSec(startMs)
381
+ });
382
+ }
383
+ /** Destroy a deployed LiveSystem. */
384
+ async function destroy(ls, creds) {
385
+ await superagent.default.delete(`${FRACTAL_API_URL}/livesystems/${liveSystemId(ls)}`).set(authHeaders(creds));
386
+ }
387
+
388
+ //#endregion
389
+ //#region src/model/components/network_and_compute.ts
390
+ /**
391
+ * components/network_and_compute.ts — NetworkAndCompute Component factories.
392
+ *
393
+ * Each agnostic blueprint parameter is a typed `.withXxx()` guardrail setter
394
+ * (locked at design time). Components that can sit under another expose
395
+ * `dependsOn(other)` to declare a structural dependency. Vendor knobs do NOT
396
+ * live here — they belong on Offers (see offers/network_and_compute.ts).
397
+ */
398
+ const virtualNetworkNode = (s) => ({
399
+ state: s,
400
+ withCidrBlock: (v) => virtualNetworkNode(guardrail(s, "cidrBlock", v)),
401
+ withRegion: (v) => virtualNetworkNode(guardrail(s, "region", v)),
402
+ withTags: (v) => virtualNetworkNode(guardrail(s, "tags", v))
403
+ });
404
+ const VirtualNetwork = (cfg) => virtualNetworkNode(newNode(cfg.id, "NetworkAndCompute.VirtualNetwork"));
405
+ const subnetNode = (s) => ({
406
+ state: s,
407
+ withCidrBlock: (v) => subnetNode(guardrail(s, "cidrBlock", v)),
408
+ dependsOn: (other) => subnetNode(addDependency(s, other.state.id))
409
+ });
410
+ const Subnet = (cfg) => subnetNode(newNode(cfg.id, "NetworkAndCompute.Subnet"));
411
+ const securityGroupNode = (s) => ({
412
+ state: s,
413
+ withIngressRules: (v) => securityGroupNode(guardrail(s, "ingressRules", v)),
414
+ withEgressRules: (v) => securityGroupNode(guardrail(s, "egressRules", v)),
415
+ dependsOn: (other) => securityGroupNode(addDependency(s, other.state.id))
416
+ });
417
+ const SecurityGroup = (cfg) => securityGroupNode(newNode(cfg.id, "NetworkAndCompute.SecurityGroup"));
418
+ const virtualMachineNode = (s) => ({
419
+ state: s,
420
+ withOsType: (v) => virtualMachineNode(guardrail(s, "osType", v)),
421
+ withSize: (v) => virtualMachineNode(guardrail(s, "size", v)),
422
+ withTags: (v) => virtualMachineNode(guardrail(s, "tags", v)),
423
+ dependsOn: (other) => virtualMachineNode(addDependency(s, other.state.id))
424
+ });
425
+ const VirtualMachine = (cfg) => virtualMachineNode(newNode(cfg.id, "NetworkAndCompute.VirtualMachine"));
426
+ const containerPlatformNode = (s) => ({
427
+ state: s,
428
+ withNodePools: (v) => containerPlatformNode(guardrail(s, "nodePools", v)),
429
+ withKubernetesVersion: (v) => containerPlatformNode(guardrail(s, "kubernetesVersion", v)),
430
+ withNetworkPolicyProvider: (v) => containerPlatformNode(guardrail(s, "networkPolicyProvider", v)),
431
+ dependsOn: (other) => containerPlatformNode(addDependency(s, other.state.id))
432
+ });
433
+ const ContainerPlatform = (cfg) => containerPlatformNode(newNode(cfg.id, "NetworkAndCompute.ContainerPlatform"));
434
+ const loadBalancerNode = (s) => ({
435
+ state: s,
436
+ withScheme: (v) => loadBalancerNode(guardrail(s, "scheme", v)),
437
+ dependsOn: (other) => loadBalancerNode(addDependency(s, other.state.id))
438
+ });
439
+ const LoadBalancer = (cfg) => loadBalancerNode(newNode(cfg.id, "NetworkAndCompute.LoadBalancer"));
440
+
441
+ //#endregion
442
+ //#region src/model/components/storage.ts
443
+ /**
444
+ * components/storage.ts — Storage domain Component factories (Level 1).
445
+ *
446
+ * Abstract, vendor-agnostic capability contracts:
447
+ * - Storage.ObjectStorage
448
+ * - Storage.RelationalDbms
449
+ * - Storage.RelationalDatabase
450
+ *
451
+ * Each agnostic parameter is a typed `.withXxx()` guardrail setter (locks the
452
+ * key at design time). Built exclusively on the LOCKED engine in ../core.
453
+ */
454
+ const objectStorageNode = (s) => ({
455
+ state: s,
456
+ withVersioningEnabled: (v) => objectStorageNode(guardrail(s, "versioningEnabled", v)),
457
+ withStorageClass: (v) => objectStorageNode(guardrail(s, "storageClass", v)),
458
+ withPublicAccess: (v) => objectStorageNode(guardrail(s, "publicAccess", v)),
459
+ withEncryption: (v) => objectStorageNode(guardrail(s, "encryption", v)),
460
+ withRetentionDays: (v) => objectStorageNode(guardrail(s, "retentionDays", v)),
461
+ withTags: (v) => objectStorageNode(guardrail(s, "tags", v))
462
+ });
463
+ const ObjectStorage = (cfg) => objectStorageNode(newNode(cfg.id, "Storage.ObjectStorage"));
464
+ const relationalDbmsNode = (s) => ({
465
+ state: s,
466
+ withEngineVersion: (v) => relationalDbmsNode(guardrail(s, "engineVersion", v)),
467
+ withSizeTier: (v) => relationalDbmsNode(guardrail(s, "sizeTier", v)),
468
+ withStorageGb: (v) => relationalDbmsNode(guardrail(s, "storageGb", v)),
469
+ withBackupRetentionDays: (v) => relationalDbmsNode(guardrail(s, "backupRetentionDays", v)),
470
+ withHighAvailability: (v) => relationalDbmsNode(guardrail(s, "highAvailability", v))
471
+ });
472
+ const RelationalDbms = (cfg) => relationalDbmsNode(newNode(cfg.id, "Storage.RelationalDbms"));
473
+ const relationalDatabaseNode = (s) => ({
474
+ state: s,
475
+ withCharset: (v) => relationalDatabaseNode(guardrail(s, "charset", v)),
476
+ withCollation: (v) => relationalDatabaseNode(guardrail(s, "collation", v)),
477
+ dependsOn: (other) => relationalDatabaseNode(addDependency(s, other.state.id))
478
+ });
479
+ const RelationalDatabase = (cfg) => relationalDatabaseNode(newNode(cfg.id, "Storage.RelationalDatabase"));
480
+
481
+ //#endregion
482
+ //#region src/model/components/big_data.ts
483
+ /**
484
+ * components/big_data.ts — BigData domain Component factories (Level 1, abstract).
485
+ *
486
+ * Each agnostic param is a typed `.withXxx()` guardrail setter (locked at design
487
+ * time via `guardrail`). Structural relationships are declared with `dependsOn`
488
+ * (via `addDependency`). Vendor knobs never appear here — they live on Offers.
489
+ */
490
+ const computeClusterNode = (s) => ({
491
+ state: s,
492
+ withClusterName: (v) => computeClusterNode(guardrail(s, "clusterName", v)),
493
+ withSparkVersion: (v) => computeClusterNode(guardrail(s, "sparkVersion", v)),
494
+ withMinWorkers: (v) => computeClusterNode(guardrail(s, "minWorkers", v)),
495
+ withMaxWorkers: (v) => computeClusterNode(guardrail(s, "maxWorkers", v)),
496
+ withAutoTerminationMinutes: (v) => computeClusterNode(guardrail(s, "autoTerminationMinutes", v)),
497
+ withDataSecurityMode: (v) => computeClusterNode(guardrail(s, "dataSecurityMode", v))
498
+ });
499
+ const ComputeCluster = (cfg) => computeClusterNode(newNode(cfg.id, "BigData.ComputeCluster"));
500
+ const dataProcessingJobNode = (s) => ({
501
+ state: s,
502
+ withJobName: (v) => dataProcessingJobNode(guardrail(s, "jobName", v)),
503
+ withTaskType: (v) => dataProcessingJobNode(guardrail(s, "taskType", v)),
504
+ withCronSchedule: (v) => dataProcessingJobNode(guardrail(s, "cronSchedule", v)),
505
+ withMaxRetries: (v) => dataProcessingJobNode(guardrail(s, "maxRetries", v)),
506
+ dependsOn: (other) => dataProcessingJobNode(addDependency(s, other.state.id))
507
+ });
508
+ const DataProcessingJob = (cfg) => dataProcessingJobNode(newNode(cfg.id, "BigData.DataProcessingJob"));
509
+ const mlExperimentNode = (s) => ({
510
+ state: s,
511
+ withExperimentName: (v) => mlExperimentNode(guardrail(s, "experimentName", v))
512
+ });
513
+ const MlExperiment = (cfg) => mlExperimentNode(newNode(cfg.id, "BigData.MlExperiment"));
514
+ const datalakeNode = (s) => ({
515
+ state: s,
516
+ withRegion: (v) => datalakeNode(guardrail(s, "region", v)),
517
+ withVersioningEnabled: (v) => datalakeNode(guardrail(s, "versioningEnabled", v)),
518
+ withRetentionDays: (v) => datalakeNode(guardrail(s, "retentionDays", v))
519
+ });
520
+ const Datalake = (cfg) => datalakeNode(newNode(cfg.id, "BigData.Datalake"));
521
+ const distributedDataProcessingNode = (s) => ({
522
+ state: s,
523
+ withWorkspaceName: (v) => distributedDataProcessingNode(guardrail(s, "workspaceName", v))
524
+ });
525
+ const DistributedDataProcessing = (cfg) => distributedDataProcessingNode(newNode(cfg.id, "BigData.DistributedDataProcessing"));
526
+
527
+ //#endregion
528
+ //#region src/model/components/messaging.ts
529
+ /**
530
+ * components/messaging.ts — Messaging domain Component factories (Level 1).
531
+ *
532
+ * Abstract, vendor-agnostic Components for the locked Fractal model. Agnostic
533
+ * `.withXxx()` setters are GUARDRAILS (locked at design time) via guardrail().
534
+ * Offers that satisfy these Components live in offers/messaging.ts.
535
+ */
536
+ const brokerNode = (s) => ({
537
+ state: s,
538
+ withTier: (v) => brokerNode(guardrail(s, "tier", v)),
539
+ withRegion: (v) => brokerNode(guardrail(s, "region", v)),
540
+ withEncryption: (v) => brokerNode(guardrail(s, "encryption", v))
541
+ });
542
+ const Broker = (cfg) => brokerNode(newNode(cfg.id, "Messaging.Broker"));
543
+ const messagingEntityNode = (s) => ({
544
+ state: s,
545
+ withMessageRetentionHours: (v) => messagingEntityNode(guardrail(s, "messageRetentionHours", v)),
546
+ withPartitionCount: (v) => messagingEntityNode(guardrail(s, "partitionCount", v)),
547
+ withDeadLetterEnabled: (v) => messagingEntityNode(guardrail(s, "deadLetterEnabled", v)),
548
+ withMaxDeliveryAttempts: (v) => messagingEntityNode(guardrail(s, "maxDeliveryAttempts", v)),
549
+ dependsOn: (other) => messagingEntityNode(addDependency(s, other.state.id))
550
+ });
551
+ const MessagingEntity = (cfg) => messagingEntityNode(newNode(cfg.id, "Messaging.MessagingEntity"));
552
+
553
+ //#endregion
554
+ //#region src/model/components/api_management.ts
555
+ /**
556
+ * components/api_management.ts — APIManagement Component factories.
557
+ *
558
+ * Each agnostic blueprint parameter is a typed `.withXxx()` guardrail setter
559
+ * (locked at design time). Vendor knobs do NOT live here — they belong on
560
+ * Offers (see offers/api_management.ts).
561
+ */
562
+ const apiGatewayNode = (s) => ({
563
+ state: s,
564
+ withHttpsOnly: (v) => apiGatewayNode(guardrail(s, "httpsOnly", v)),
565
+ withCustomDomain: (v) => apiGatewayNode(guardrail(s, "customDomain", v)),
566
+ withCors: (v) => apiGatewayNode(guardrail(s, "cors", v)),
567
+ withRateLimit: (v) => apiGatewayNode(guardrail(s, "rateLimit", v)),
568
+ withRoutes: (v) => apiGatewayNode(guardrail(s, "routes", v))
569
+ });
570
+ const ApiGateway = (cfg) => apiGatewayNode(newNode(cfg.id, "APIManagement.ApiGateway"));
571
+
572
+ //#endregion
573
+ //#region src/model/components/observability.ts
574
+ /**
575
+ * components/observability.ts — Observability domain Component factories (Level 1).
576
+ *
577
+ * Abstract, vendor-agnostic capability contracts:
578
+ * - Observability.Monitoring
579
+ * - Observability.Tracing
580
+ * - Observability.Logging
581
+ *
582
+ * Each agnostic parameter is a typed `.withXxx()` guardrail setter (locks the
583
+ * key at design time). Built exclusively on the LOCKED engine in ../core.
584
+ */
585
+ const monitoringNode = (s) => ({
586
+ state: s,
587
+ withRetentionDays: (v) => monitoringNode(guardrail(s, "retentionDays", v)),
588
+ withScrapeInterval: (v) => monitoringNode(guardrail(s, "scrapeInterval", v))
589
+ });
590
+ const Monitoring = (cfg) => monitoringNode(newNode(cfg.id, "Observability.Monitoring"));
591
+ const tracingNode = (s) => ({
592
+ state: s,
593
+ withRetentionDays: (v) => tracingNode(guardrail(s, "retentionDays", v)),
594
+ withSamplingRate: (v) => tracingNode(guardrail(s, "samplingRate", v))
595
+ });
596
+ const Tracing = (cfg) => tracingNode(newNode(cfg.id, "Observability.Tracing"));
597
+ const loggingNode = (s) => ({
598
+ state: s,
599
+ withRetentionDays: (v) => loggingNode(guardrail(s, "retentionDays", v))
600
+ });
601
+ const Logging = (cfg) => loggingNode(newNode(cfg.id, "Observability.Logging"));
602
+
603
+ //#endregion
604
+ //#region src/model/components/security.ts
605
+ /**
606
+ * components/security.ts — Security domain Component factories (Level 1).
607
+ *
608
+ * Abstract, vendor-agnostic capability contracts:
609
+ * - Security.ServiceMesh
610
+ * - Security.IdentityProvider
611
+ *
612
+ * Each agnostic parameter is a typed `.withXxx()` guardrail setter (locks the
613
+ * key at design time). Built exclusively on the LOCKED engine in ../core.
614
+ */
615
+ const serviceMeshNode = (s) => ({
616
+ state: s,
617
+ withMtlsMode: (v) => serviceMeshNode(guardrail(s, "mtlsMode", v)),
618
+ withAuthenticationMode: (v) => serviceMeshNode(guardrail(s, "authenticationMode", v)),
619
+ withTags: (v) => serviceMeshNode(guardrail(s, "tags", v))
620
+ });
621
+ const ServiceMesh = (cfg) => serviceMeshNode(newNode(cfg.id, "Security.ServiceMesh"));
622
+ const identityProviderNode = (s) => ({
623
+ state: s,
624
+ withUserDirectoryName: (v) => identityProviderNode(guardrail(s, "userDirectoryName", v)),
625
+ withPasswordPolicy: (v) => identityProviderNode(guardrail(s, "passwordPolicy", v)),
626
+ withMfaConfiguration: (v) => identityProviderNode(guardrail(s, "mfaConfiguration", v)),
627
+ withSessionDuration: (v) => identityProviderNode(guardrail(s, "sessionDuration", v)),
628
+ withTags: (v) => identityProviderNode(guardrail(s, "tags", v))
629
+ });
630
+ const IdentityProvider = (cfg) => identityProviderNode(newNode(cfg.id, "Security.IdentityProvider"));
631
+
632
+ //#endregion
633
+ //#region src/model/components/custom_workloads.ts
634
+ /**
635
+ * components/custom_workloads.ts — CustomWorkloads domain Component factories
636
+ * (Level 1, abstract).
637
+ *
638
+ * Each agnostic param is a typed `.withXxx()` guardrail setter (locked at design
639
+ * time via `guardrail`). Vendor knobs never appear here — they live on Offers.
640
+ */
641
+ const workloadNode = (s) => ({
642
+ state: s,
643
+ withImage: (v) => workloadNode(guardrail(s, "image", v)),
644
+ withPort: (v) => workloadNode(guardrail(s, "port", v)),
645
+ withReplicas: (v) => workloadNode(guardrail(s, "replicas", v)),
646
+ withEnv: (v) => workloadNode(guardrail(s, "env", v)),
647
+ withCpuRequest: (v) => workloadNode(guardrail(s, "cpuRequest", v)),
648
+ withMemoryRequest: (v) => workloadNode(guardrail(s, "memoryRequest", v)),
649
+ withMaxReplicas: (v) => workloadNode(guardrail(s, "maxReplicas", v)),
650
+ withHealthCheck: (v) => workloadNode(guardrail(s, "healthCheck", v))
651
+ });
652
+ const Workload = (cfg) => workloadNode(newNode(cfg.id, "CustomWorkloads.Workload"));
653
+ const functionNode = (s) => ({
654
+ state: s,
655
+ withSourceArtifact: (v) => functionNode(guardrail(s, "sourceArtifact", v)),
656
+ withRuntime: (v) => functionNode(guardrail(s, "runtime", v)),
657
+ withEnvironment: (v) => functionNode(guardrail(s, "environment", v)),
658
+ withMemory: (v) => functionNode(guardrail(s, "memory", v)),
659
+ withTimeout: (v) => functionNode(guardrail(s, "timeout", v)),
660
+ withConcurrency: (v) => functionNode(guardrail(s, "concurrency", v))
661
+ });
662
+ const Function = (cfg) => functionNode(newNode(cfg.id, "CustomWorkloads.Function"));
663
+
664
+ //#endregion
665
+ //#region src/model/offers/network_and_compute.ts
666
+ /**
667
+ * offers/network_and_compute.ts — NetworkAndCompute Offer catalogue (Level 3).
668
+ *
669
+ * Each offer declares which abstract Component it satisfies, its 3-part offer
670
+ * type, its vendor (provider) and delivery model, and carries vendor knobs in
671
+ * its config type. Offers with no extra vendor knobs use config type `{}`.
672
+ */
673
+ const AwsVpc = defineOffer({
674
+ satisfies: "NetworkAndCompute.VirtualNetwork",
675
+ offerType: "NetworkAndCompute.IaaS.AwsVpc",
676
+ provider: "AWS",
677
+ deliveryModel: "IaaS"
678
+ });
679
+ const AzureVnet = defineOffer({
680
+ satisfies: "NetworkAndCompute.VirtualNetwork",
681
+ offerType: "NetworkAndCompute.IaaS.AzureVnet",
682
+ provider: "Azure",
683
+ deliveryModel: "IaaS"
684
+ });
685
+ const GcpVpc = defineOffer({
686
+ satisfies: "NetworkAndCompute.VirtualNetwork",
687
+ offerType: "NetworkAndCompute.IaaS.GcpVpc",
688
+ provider: "GCP",
689
+ deliveryModel: "IaaS"
690
+ });
691
+ const AwsSubnet = defineOffer({
692
+ satisfies: "NetworkAndCompute.Subnet",
693
+ offerType: "NetworkAndCompute.IaaS.AwsSubnet",
694
+ provider: "AWS",
695
+ deliveryModel: "IaaS"
696
+ });
697
+ const AzureSubnet = defineOffer({
698
+ satisfies: "NetworkAndCompute.Subnet",
699
+ offerType: "NetworkAndCompute.IaaS.AzureSubnet",
700
+ provider: "Azure",
701
+ deliveryModel: "IaaS"
702
+ });
703
+ const GcpSubnet = defineOffer({
704
+ satisfies: "NetworkAndCompute.Subnet",
705
+ offerType: "NetworkAndCompute.IaaS.GcpSubnet",
706
+ provider: "GCP",
707
+ deliveryModel: "IaaS"
708
+ });
709
+ const AwsSecurityGroup = defineOffer({
710
+ satisfies: "NetworkAndCompute.SecurityGroup",
711
+ offerType: "NetworkAndCompute.IaaS.AwsSecurityGroup",
712
+ provider: "AWS",
713
+ deliveryModel: "IaaS"
714
+ });
715
+ const AzureNsg = defineOffer({
716
+ satisfies: "NetworkAndCompute.SecurityGroup",
717
+ offerType: "NetworkAndCompute.IaaS.AzureNsg",
718
+ provider: "Azure",
719
+ deliveryModel: "IaaS"
720
+ });
721
+ const GcpFirewall = defineOffer({
722
+ satisfies: "NetworkAndCompute.SecurityGroup",
723
+ offerType: "NetworkAndCompute.IaaS.GcpFirewall",
724
+ provider: "GCP",
725
+ deliveryModel: "IaaS"
726
+ });
727
+ const Ec2Instance = defineOffer({
728
+ satisfies: "NetworkAndCompute.VirtualMachine",
729
+ offerType: "NetworkAndCompute.IaaS.Ec2Instance",
730
+ provider: "AWS",
731
+ deliveryModel: "IaaS"
732
+ });
733
+ const AzureVm = defineOffer({
734
+ satisfies: "NetworkAndCompute.VirtualMachine",
735
+ offerType: "NetworkAndCompute.IaaS.AzureVm",
736
+ provider: "Azure",
737
+ deliveryModel: "IaaS"
738
+ });
739
+ const GcpVm = defineOffer({
740
+ satisfies: "NetworkAndCompute.VirtualMachine",
741
+ offerType: "NetworkAndCompute.IaaS.GcpVm",
742
+ provider: "GCP",
743
+ deliveryModel: "IaaS"
744
+ });
745
+ const VsphereVm = defineOffer({
746
+ satisfies: "NetworkAndCompute.VirtualMachine",
747
+ offerType: "NetworkAndCompute.IaaS.VsphereVm",
748
+ provider: "VMware",
749
+ deliveryModel: "IaaS"
750
+ });
751
+ const OpenshiftVm = defineOffer({
752
+ satisfies: "NetworkAndCompute.VirtualMachine",
753
+ offerType: "NetworkAndCompute.CaaS.OpenshiftVm",
754
+ provider: "RedHat",
755
+ deliveryModel: "CaaS"
756
+ });
757
+ const Eks = defineOffer({
758
+ satisfies: "NetworkAndCompute.ContainerPlatform",
759
+ offerType: "NetworkAndCompute.PaaS.Eks",
760
+ provider: "AWS",
761
+ deliveryModel: "PaaS"
762
+ });
763
+ const Aks = defineOffer({
764
+ satisfies: "NetworkAndCompute.ContainerPlatform",
765
+ offerType: "NetworkAndCompute.PaaS.Aks",
766
+ provider: "Azure",
767
+ deliveryModel: "PaaS"
768
+ });
769
+ const Gke = defineOffer({
770
+ satisfies: "NetworkAndCompute.ContainerPlatform",
771
+ offerType: "NetworkAndCompute.PaaS.Gke",
772
+ provider: "GCP",
773
+ deliveryModel: "PaaS"
774
+ });
775
+ const AwsLb = defineOffer({
776
+ satisfies: "NetworkAndCompute.LoadBalancer",
777
+ offerType: "NetworkAndCompute.IaaS.AwsLb",
778
+ provider: "AWS",
779
+ deliveryModel: "IaaS"
780
+ });
781
+ const AzureLb = defineOffer({
782
+ satisfies: "NetworkAndCompute.LoadBalancer",
783
+ offerType: "NetworkAndCompute.IaaS.AzureLb",
784
+ provider: "Azure",
785
+ deliveryModel: "IaaS"
786
+ });
787
+ const GcpGlb = defineOffer({
788
+ satisfies: "NetworkAndCompute.LoadBalancer",
789
+ offerType: "NetworkAndCompute.IaaS.GcpGlb",
790
+ provider: "GCP",
791
+ deliveryModel: "IaaS"
792
+ });
793
+ const OciVcn = defineOffer({
794
+ satisfies: "NetworkAndCompute.VirtualNetwork",
795
+ offerType: "NetworkAndCompute.IaaS.OciVcn",
796
+ provider: "OCI",
797
+ deliveryModel: "IaaS"
798
+ });
799
+ const OciSubnet = defineOffer({
800
+ satisfies: "NetworkAndCompute.Subnet",
801
+ offerType: "NetworkAndCompute.IaaS.OciSubnet",
802
+ provider: "OCI",
803
+ deliveryModel: "IaaS"
804
+ });
805
+ const OciSecurityList = defineOffer({
806
+ satisfies: "NetworkAndCompute.SecurityGroup",
807
+ offerType: "NetworkAndCompute.IaaS.OciSecurityList",
808
+ provider: "OCI",
809
+ deliveryModel: "IaaS"
810
+ });
811
+ const OciInstance = defineOffer({
812
+ satisfies: "NetworkAndCompute.VirtualMachine",
813
+ offerType: "NetworkAndCompute.IaaS.OciInstance",
814
+ provider: "OCI",
815
+ deliveryModel: "IaaS"
816
+ });
817
+ const HetznerNetwork = defineOffer({
818
+ satisfies: "NetworkAndCompute.VirtualNetwork",
819
+ offerType: "NetworkAndCompute.IaaS.HetznerNetwork",
820
+ provider: "Hetzner",
821
+ deliveryModel: "IaaS"
822
+ });
823
+ const HetznerSubnet = defineOffer({
824
+ satisfies: "NetworkAndCompute.Subnet",
825
+ offerType: "NetworkAndCompute.IaaS.HetznerSubnet",
826
+ provider: "Hetzner",
827
+ deliveryModel: "IaaS"
828
+ });
829
+ const HetznerFirewall = defineOffer({
830
+ satisfies: "NetworkAndCompute.SecurityGroup",
831
+ offerType: "NetworkAndCompute.IaaS.HetznerFirewall",
832
+ provider: "Hetzner",
833
+ deliveryModel: "IaaS"
834
+ });
835
+ const HetznerServer = defineOffer({
836
+ satisfies: "NetworkAndCompute.VirtualMachine",
837
+ offerType: "NetworkAndCompute.IaaS.HetznerServer",
838
+ provider: "Hetzner",
839
+ deliveryModel: "IaaS"
840
+ });
841
+ const VspherePortGroup = defineOffer({
842
+ satisfies: "NetworkAndCompute.VirtualNetwork",
843
+ offerType: "NetworkAndCompute.IaaS.VspherePortGroup",
844
+ provider: "VMware",
845
+ deliveryModel: "IaaS"
846
+ });
847
+ const VsphereVlan = defineOffer({
848
+ satisfies: "NetworkAndCompute.Subnet",
849
+ offerType: "NetworkAndCompute.IaaS.VsphereVlan",
850
+ provider: "VMware",
851
+ deliveryModel: "IaaS"
852
+ });
853
+ const OpenshiftSecurityGroup = defineOffer({
854
+ satisfies: "NetworkAndCompute.SecurityGroup",
855
+ offerType: "NetworkAndCompute.CaaS.OpenshiftNetworkPolicy",
856
+ provider: "RedHat",
857
+ deliveryModel: "CaaS"
858
+ });
859
+ const OpenshiftService = defineOffer({
860
+ satisfies: "NetworkAndCompute.LoadBalancer",
861
+ offerType: "NetworkAndCompute.CaaS.OpenshiftService",
862
+ provider: "RedHat",
863
+ deliveryModel: "CaaS"
864
+ });
865
+
866
+ //#endregion
867
+ //#region src/model/offers/storage.ts
868
+ /**
869
+ * offers/storage.ts — Storage domain Offers (Catalogue, Level 3).
870
+ *
871
+ * Concrete, vendor-specific implementations declaring which abstract Storage
872
+ * Component each satisfies. Vendor knobs live in each offer's config only.
873
+ * Vendor-neutral self-hosted offers (e.g. MinIO on any cluster) omit `provider`.
874
+ */
875
+ /**
876
+ * A DBMS offer emits itself PLUS one Database live component per child the
877
+ * application added via `withDatabases` — each database lives in the DBMS's
878
+ * vendor family, so it is not independently offer-selected. Swap the DBMS offer
879
+ * and the databases' offer type follows.
880
+ */
881
+ const dbmsInstantiate = (dbmsType, provider, databaseType) => (ctx, config) => [{
882
+ id: ctx.id,
883
+ type: dbmsType,
884
+ provider,
885
+ deliveryModel: "PaaS",
886
+ parameters: {
887
+ ...ctx.parameters,
888
+ ...config
889
+ },
890
+ dependencies: [...ctx.dependencies],
891
+ links: [...ctx.links]
892
+ }, ...ctx.children.map((child) => ({
893
+ id: child.id,
894
+ type: databaseType,
895
+ provider,
896
+ deliveryModel: "PaaS",
897
+ parameters: { ...child.parameters },
898
+ dependencies: [...child.dependencies],
899
+ links: [...child.links]
900
+ }))];
901
+ const AwsS3 = defineOffer({
902
+ satisfies: "Storage.ObjectStorage",
903
+ offerType: "Storage.PaaS.S3",
904
+ provider: "AWS",
905
+ deliveryModel: "PaaS"
906
+ });
907
+ const AzureBlob = defineOffer({
908
+ satisfies: "Storage.ObjectStorage",
909
+ offerType: "Storage.PaaS.AzureBlob",
910
+ provider: "Azure",
911
+ deliveryModel: "PaaS"
912
+ });
913
+ const GcsBucket = defineOffer({
914
+ satisfies: "Storage.ObjectStorage",
915
+ offerType: "Storage.PaaS.GcsBucket",
916
+ provider: "GCP",
917
+ deliveryModel: "PaaS"
918
+ });
919
+ const MinIO = defineOffer({
920
+ satisfies: "Storage.ObjectStorage",
921
+ offerType: "Storage.CaaS.MinIO",
922
+ deliveryModel: "CaaS"
923
+ });
924
+ const AzurePostgresDbms = defineOffer({
925
+ satisfies: "Storage.RelationalDbms",
926
+ offerType: "Storage.PaaS.AzurePostgresDbms",
927
+ provider: "Azure",
928
+ deliveryModel: "PaaS",
929
+ instantiate: dbmsInstantiate("Storage.PaaS.AzurePostgresDbms", "Azure", "Storage.PaaS.AzurePostgresDatabase")
930
+ });
931
+ const GcpPostgresDbms = defineOffer({
932
+ satisfies: "Storage.RelationalDbms",
933
+ offerType: "Storage.PaaS.GcpPostgresDbms",
934
+ provider: "GCP",
935
+ deliveryModel: "PaaS",
936
+ instantiate: dbmsInstantiate("Storage.PaaS.GcpPostgresDbms", "GCP", "Storage.PaaS.GcpPostgresDatabase")
937
+ });
938
+ const ArubaMySqlDbms = defineOffer({
939
+ satisfies: "Storage.RelationalDbms",
940
+ offerType: "Storage.PaaS.ArubaMySqlDbms",
941
+ provider: "Aruba",
942
+ deliveryModel: "PaaS",
943
+ instantiate: dbmsInstantiate("Storage.PaaS.ArubaMySqlDbms", "Aruba", "Storage.PaaS.ArubaMySqlDatabase")
944
+ });
945
+ const AzurePostgresDatabase = defineOffer({
946
+ satisfies: "Storage.RelationalDatabase",
947
+ offerType: "Storage.PaaS.AzurePostgresDatabase",
948
+ provider: "Azure",
949
+ deliveryModel: "PaaS"
950
+ });
951
+ const GcpPostgresDatabase = defineOffer({
952
+ satisfies: "Storage.RelationalDatabase",
953
+ offerType: "Storage.PaaS.GcpPostgresDatabase",
954
+ provider: "GCP",
955
+ deliveryModel: "PaaS"
956
+ });
957
+ const OpenshiftPersistentVolume = defineOffer({
958
+ satisfies: "Storage.ObjectStorage",
959
+ offerType: "Storage.CaaS.OpenshiftPersistentVolume",
960
+ provider: "RedHat",
961
+ deliveryModel: "CaaS"
962
+ });
963
+
964
+ //#endregion
965
+ //#region src/model/offers/big_data.ts
966
+ /**
967
+ * offers/big_data.ts — BigData domain Offers (Catalogue, Level 3, concrete).
968
+ *
969
+ * Each offer declares which Component it satisfies, its 3-part offer type, its
970
+ * delivery model and (for cloud offers) its vendor. Vendor-neutral CaaS offers
971
+ * OMIT `provider` — they run on any cluster and are identified by deliveryModel
972
+ * + offerType. Vendor knobs live in each offer's config type.
973
+ */
974
+ const AwsDatabricksCluster = defineOffer({
975
+ satisfies: "BigData.ComputeCluster",
976
+ offerType: "BigData.PaaS.AwsDatabricksCluster",
977
+ provider: "AWS",
978
+ deliveryModel: "PaaS"
979
+ });
980
+ const AzureDatabricksCluster = defineOffer({
981
+ satisfies: "BigData.ComputeCluster",
982
+ offerType: "BigData.PaaS.AzureDatabricksCluster",
983
+ provider: "Azure",
984
+ deliveryModel: "PaaS"
985
+ });
986
+ const GcpDatabricksCluster = defineOffer({
987
+ satisfies: "BigData.ComputeCluster",
988
+ offerType: "BigData.PaaS.GcpDatabricksCluster",
989
+ provider: "GCP",
990
+ deliveryModel: "PaaS"
991
+ });
992
+ const CaaSSparkCluster = defineOffer({
993
+ satisfies: "BigData.ComputeCluster",
994
+ offerType: "BigData.CaaS.CaaSSparkCluster",
995
+ deliveryModel: "CaaS"
996
+ });
997
+ const AwsDatabricksJob = defineOffer({
998
+ satisfies: "BigData.DataProcessingJob",
999
+ offerType: "BigData.PaaS.AwsDatabricksJob",
1000
+ provider: "AWS",
1001
+ deliveryModel: "PaaS"
1002
+ });
1003
+ const AzureDatabricksJob = defineOffer({
1004
+ satisfies: "BigData.DataProcessingJob",
1005
+ offerType: "BigData.PaaS.AzureDatabricksJob",
1006
+ provider: "Azure",
1007
+ deliveryModel: "PaaS"
1008
+ });
1009
+ const GcpDatabricksJob = defineOffer({
1010
+ satisfies: "BigData.DataProcessingJob",
1011
+ offerType: "BigData.PaaS.GcpDatabricksJob",
1012
+ provider: "GCP",
1013
+ deliveryModel: "PaaS"
1014
+ });
1015
+ const CaaSSparkJob = defineOffer({
1016
+ satisfies: "BigData.DataProcessingJob",
1017
+ offerType: "BigData.CaaS.CaaSSparkJob",
1018
+ deliveryModel: "CaaS"
1019
+ });
1020
+ const AwsDatabricksMlflow = defineOffer({
1021
+ satisfies: "BigData.MlExperiment",
1022
+ offerType: "BigData.PaaS.AwsDatabricksMlflow",
1023
+ provider: "AWS",
1024
+ deliveryModel: "PaaS"
1025
+ });
1026
+ const AzureDatabricksMlflow = defineOffer({
1027
+ satisfies: "BigData.MlExperiment",
1028
+ offerType: "BigData.PaaS.AzureDatabricksMlflow",
1029
+ provider: "Azure",
1030
+ deliveryModel: "PaaS"
1031
+ });
1032
+ const GcpDatabricksMlflow = defineOffer({
1033
+ satisfies: "BigData.MlExperiment",
1034
+ offerType: "BigData.PaaS.GcpDatabricksMlflow",
1035
+ provider: "GCP",
1036
+ deliveryModel: "PaaS"
1037
+ });
1038
+ const CaaSMlflow = defineOffer({
1039
+ satisfies: "BigData.MlExperiment",
1040
+ offerType: "BigData.CaaS.CaaSMlflow",
1041
+ deliveryModel: "CaaS"
1042
+ });
1043
+ const AwsS3Datalake = defineOffer({
1044
+ satisfies: "BigData.Datalake",
1045
+ offerType: "BigData.PaaS.AwsS3Datalake",
1046
+ provider: "AWS",
1047
+ deliveryModel: "PaaS"
1048
+ });
1049
+ const AzureDatalake = defineOffer({
1050
+ satisfies: "BigData.Datalake",
1051
+ offerType: "BigData.PaaS.AzureDatalake",
1052
+ provider: "Azure",
1053
+ deliveryModel: "PaaS"
1054
+ });
1055
+ const GcpDatalake = defineOffer({
1056
+ satisfies: "BigData.Datalake",
1057
+ offerType: "BigData.PaaS.GcpDatalake",
1058
+ provider: "GCP",
1059
+ deliveryModel: "PaaS"
1060
+ });
1061
+ const AwsDatabricks = defineOffer({
1062
+ satisfies: "BigData.DistributedDataProcessing",
1063
+ offerType: "BigData.PaaS.AwsDatabricks",
1064
+ provider: "AWS",
1065
+ deliveryModel: "PaaS"
1066
+ });
1067
+ const AzureDatabricks = defineOffer({
1068
+ satisfies: "BigData.DistributedDataProcessing",
1069
+ offerType: "BigData.PaaS.AzureDatabricks",
1070
+ provider: "Azure",
1071
+ deliveryModel: "PaaS"
1072
+ });
1073
+ const GcpDatabricks = defineOffer({
1074
+ satisfies: "BigData.DistributedDataProcessing",
1075
+ offerType: "BigData.PaaS.GcpDatabricks",
1076
+ provider: "GCP",
1077
+ deliveryModel: "PaaS"
1078
+ });
1079
+
1080
+ //#endregion
1081
+ //#region src/model/offers/messaging.ts
1082
+ /**
1083
+ * offers/messaging.ts — Messaging domain Offers (Catalogue, Level 3).
1084
+ *
1085
+ * Concrete vendor-specific implementations that satisfy the abstract Messaging
1086
+ * Components in components/messaging.ts. Vendor knobs live in each offer's Cfg.
1087
+ * Vendor-neutral self-hosted offers (Kafka on any cluster) OMIT `provider`.
1088
+ */
1089
+ const AzureServiceBus = defineOffer({
1090
+ satisfies: "Messaging.Broker",
1091
+ offerType: "Messaging.PaaS.AzureServiceBus",
1092
+ provider: "Azure",
1093
+ deliveryModel: "PaaS"
1094
+ });
1095
+ const GcpPubSub = defineOffer({
1096
+ satisfies: "Messaging.Broker",
1097
+ offerType: "Messaging.PaaS.GcpPubSub",
1098
+ provider: "GCP",
1099
+ deliveryModel: "PaaS"
1100
+ });
1101
+ /** Vendor-neutral self-hosted Kafka — no `provider`. */
1102
+ const Kafka = defineOffer({
1103
+ satisfies: "Messaging.Broker",
1104
+ offerType: "Messaging.CaaS.Kafka",
1105
+ deliveryModel: "CaaS"
1106
+ });
1107
+ const AzureServiceBusTopic = defineOffer({
1108
+ satisfies: "Messaging.MessagingEntity",
1109
+ offerType: "Messaging.PaaS.AzureServiceBusTopic",
1110
+ provider: "Azure",
1111
+ deliveryModel: "PaaS"
1112
+ });
1113
+ const GcpPubSubTopic = defineOffer({
1114
+ satisfies: "Messaging.MessagingEntity",
1115
+ offerType: "Messaging.PaaS.GcpPubSubTopic",
1116
+ provider: "GCP",
1117
+ deliveryModel: "PaaS"
1118
+ });
1119
+ /** Vendor-neutral self-hosted Kafka topic — no `provider`. */
1120
+ const KafkaTopic = defineOffer({
1121
+ satisfies: "Messaging.MessagingEntity",
1122
+ offerType: "Messaging.CaaS.KafkaTopic",
1123
+ deliveryModel: "CaaS"
1124
+ });
1125
+
1126
+ //#endregion
1127
+ //#region src/model/offers/api_management.ts
1128
+ /**
1129
+ * offers/api_management.ts — APIManagement Offer catalogue (Level 3).
1130
+ *
1131
+ * Each offer declares which abstract Component it satisfies, its 3-part offer
1132
+ * type, its vendor (provider) and delivery model, and carries vendor knobs in
1133
+ * its config type. Vendor-neutral self-hosted offers (CaaS) OMIT `provider`.
1134
+ */
1135
+ const AwsCloudFront = defineOffer({
1136
+ satisfies: "APIManagement.ApiGateway",
1137
+ offerType: "APIManagement.PaaS.CloudFront",
1138
+ provider: "AWS",
1139
+ deliveryModel: "PaaS"
1140
+ });
1141
+ const AzureApiManagement = defineOffer({
1142
+ satisfies: "APIManagement.ApiGateway",
1143
+ offerType: "APIManagement.PaaS.ApiManagement",
1144
+ provider: "Azure",
1145
+ deliveryModel: "PaaS"
1146
+ });
1147
+ const GcpApiGateway = defineOffer({
1148
+ satisfies: "APIManagement.ApiGateway",
1149
+ offerType: "APIManagement.PaaS.GcpApiGateway",
1150
+ provider: "GCP",
1151
+ deliveryModel: "PaaS"
1152
+ });
1153
+ const Ambassador = defineOffer({
1154
+ satisfies: "APIManagement.ApiGateway",
1155
+ offerType: "APIManagement.CaaS.Ambassador",
1156
+ deliveryModel: "CaaS"
1157
+ });
1158
+ const Traefik = defineOffer({
1159
+ satisfies: "APIManagement.ApiGateway",
1160
+ offerType: "APIManagement.CaaS.Traefik",
1161
+ deliveryModel: "CaaS"
1162
+ });
1163
+
1164
+ //#endregion
1165
+ //#region src/model/offers/observability.ts
1166
+ /**
1167
+ * offers/observability.ts — Observability domain Offers (Catalogue, Level 3).
1168
+ *
1169
+ * Concrete implementations declaring which abstract Observability Component each
1170
+ * satisfies. Vendor knobs live in each offer's config only. These are all
1171
+ * vendor-neutral self-hosted CaaS offers (Prometheus/Jaeger/Elastic on any
1172
+ * cluster), so they omit `provider`.
1173
+ */
1174
+ const Prometheus = defineOffer({
1175
+ satisfies: "Observability.Monitoring",
1176
+ offerType: "Observability.CaaS.Prometheus",
1177
+ deliveryModel: "CaaS"
1178
+ });
1179
+ const Jaeger = defineOffer({
1180
+ satisfies: "Observability.Tracing",
1181
+ offerType: "Observability.CaaS.Jaeger",
1182
+ deliveryModel: "CaaS"
1183
+ });
1184
+ const ObservabilityElastic = defineOffer({
1185
+ satisfies: "Observability.Logging",
1186
+ offerType: "Observability.CaaS.Elastic",
1187
+ deliveryModel: "CaaS"
1188
+ });
1189
+
1190
+ //#endregion
1191
+ //#region src/model/offers/security.ts
1192
+ /**
1193
+ * offers/security.ts — Security domain Offers (Catalogue, Level 3).
1194
+ *
1195
+ * Concrete implementations declaring which abstract Security Component each
1196
+ * satisfies. Vendor knobs live in each offer's config only. Vendor-neutral
1197
+ * self-hosted offers (e.g. Ocelot / Keycloak on any cluster) omit `provider`.
1198
+ */
1199
+ const Ocelot = defineOffer({
1200
+ satisfies: "Security.ServiceMesh",
1201
+ offerType: "Security.CaaS.Ocelot",
1202
+ deliveryModel: "CaaS"
1203
+ });
1204
+ const Cognito = defineOffer({
1205
+ satisfies: "Security.IdentityProvider",
1206
+ offerType: "Security.PaaS.Cognito",
1207
+ provider: "AWS",
1208
+ deliveryModel: "PaaS"
1209
+ });
1210
+ const Keycloak = defineOffer({
1211
+ satisfies: "Security.IdentityProvider",
1212
+ offerType: "Security.CaaS.Keycloak",
1213
+ deliveryModel: "CaaS"
1214
+ });
1215
+
1216
+ //#endregion
1217
+ //#region src/model/offers/custom_workloads.ts
1218
+ /**
1219
+ * offers/custom_workloads.ts — CustomWorkloads domain Offers (Catalogue, Level 3,
1220
+ * concrete).
1221
+ *
1222
+ * Each offer declares which Component it satisfies, its 3-part offer type, its
1223
+ * delivery model and (for cloud offers) its vendor. Vendor-neutral CaaS offers
1224
+ * OMIT `provider` — they run on any cluster and are identified by deliveryModel
1225
+ * + offerType. Vendor knobs live in each offer's config type.
1226
+ */
1227
+ const EcsService = defineOffer({
1228
+ satisfies: "CustomWorkloads.Workload",
1229
+ offerType: "CustomWorkloads.PaaS.EcsService",
1230
+ provider: "AWS",
1231
+ deliveryModel: "PaaS"
1232
+ });
1233
+ const CloudRun = defineOffer({
1234
+ satisfies: "CustomWorkloads.Workload",
1235
+ offerType: "CustomWorkloads.PaaS.CloudRun",
1236
+ provider: "GCP",
1237
+ deliveryModel: "PaaS"
1238
+ });
1239
+ const AzureContainerApp = defineOffer({
1240
+ satisfies: "CustomWorkloads.Workload",
1241
+ offerType: "CustomWorkloads.PaaS.AzureContainerApp",
1242
+ provider: "Azure",
1243
+ deliveryModel: "PaaS"
1244
+ });
1245
+ const OpenshiftWorkload = defineOffer({
1246
+ satisfies: "CustomWorkloads.Workload",
1247
+ offerType: "CustomWorkloads.CaaS.OpenshiftWorkload",
1248
+ provider: "RedHat",
1249
+ deliveryModel: "CaaS"
1250
+ });
1251
+ const K8sWorkload = defineOffer({
1252
+ satisfies: "CustomWorkloads.Workload",
1253
+ offerType: "CustomWorkloads.CaaS.K8sWorkload",
1254
+ deliveryModel: "CaaS"
1255
+ });
1256
+ const AwsLambda = defineOffer({
1257
+ satisfies: "CustomWorkloads.Function",
1258
+ offerType: "CustomWorkloads.FaaS.AwsLambda",
1259
+ provider: "AWS",
1260
+ deliveryModel: "FaaS"
1261
+ });
1262
+ const AzureFunction = defineOffer({
1263
+ satisfies: "CustomWorkloads.Function",
1264
+ offerType: "CustomWorkloads.FaaS.AzureFunction",
1265
+ provider: "Azure",
1266
+ deliveryModel: "FaaS"
1267
+ });
1268
+ const GcpFunction = defineOffer({
1269
+ satisfies: "CustomWorkloads.Function",
1270
+ offerType: "CustomWorkloads.FaaS.GcpFunction",
1271
+ provider: "GCP",
1272
+ deliveryModel: "FaaS"
1273
+ });
1274
+
1275
+ //#endregion
1276
+ Object.defineProperty(exports, 'Aks', {
1277
+ enumerable: true,
1278
+ get: function () {
1279
+ return Aks;
1280
+ }
1281
+ });
1282
+ Object.defineProperty(exports, 'Ambassador', {
1283
+ enumerable: true,
1284
+ get: function () {
1285
+ return Ambassador;
1286
+ }
1287
+ });
1288
+ Object.defineProperty(exports, 'ApiGateway', {
1289
+ enumerable: true,
1290
+ get: function () {
1291
+ return ApiGateway;
1292
+ }
1293
+ });
1294
+ Object.defineProperty(exports, 'ArubaMySqlDbms', {
1295
+ enumerable: true,
1296
+ get: function () {
1297
+ return ArubaMySqlDbms;
1298
+ }
1299
+ });
1300
+ Object.defineProperty(exports, 'AwsCloudFront', {
1301
+ enumerable: true,
1302
+ get: function () {
1303
+ return AwsCloudFront;
1304
+ }
1305
+ });
1306
+ Object.defineProperty(exports, 'AwsDatabricks', {
1307
+ enumerable: true,
1308
+ get: function () {
1309
+ return AwsDatabricks;
1310
+ }
1311
+ });
1312
+ Object.defineProperty(exports, 'AwsDatabricksCluster', {
1313
+ enumerable: true,
1314
+ get: function () {
1315
+ return AwsDatabricksCluster;
1316
+ }
1317
+ });
1318
+ Object.defineProperty(exports, 'AwsDatabricksJob', {
1319
+ enumerable: true,
1320
+ get: function () {
1321
+ return AwsDatabricksJob;
1322
+ }
1323
+ });
1324
+ Object.defineProperty(exports, 'AwsDatabricksMlflow', {
1325
+ enumerable: true,
1326
+ get: function () {
1327
+ return AwsDatabricksMlflow;
1328
+ }
1329
+ });
1330
+ Object.defineProperty(exports, 'AwsLambda', {
1331
+ enumerable: true,
1332
+ get: function () {
1333
+ return AwsLambda;
1334
+ }
1335
+ });
1336
+ Object.defineProperty(exports, 'AwsLb', {
1337
+ enumerable: true,
1338
+ get: function () {
1339
+ return AwsLb;
1340
+ }
1341
+ });
1342
+ Object.defineProperty(exports, 'AwsS3', {
1343
+ enumerable: true,
1344
+ get: function () {
1345
+ return AwsS3;
1346
+ }
1347
+ });
1348
+ Object.defineProperty(exports, 'AwsS3Datalake', {
1349
+ enumerable: true,
1350
+ get: function () {
1351
+ return AwsS3Datalake;
1352
+ }
1353
+ });
1354
+ Object.defineProperty(exports, 'AwsSecurityGroup', {
1355
+ enumerable: true,
1356
+ get: function () {
1357
+ return AwsSecurityGroup;
1358
+ }
1359
+ });
1360
+ Object.defineProperty(exports, 'AwsSubnet', {
1361
+ enumerable: true,
1362
+ get: function () {
1363
+ return AwsSubnet;
1364
+ }
1365
+ });
1366
+ Object.defineProperty(exports, 'AwsVpc', {
1367
+ enumerable: true,
1368
+ get: function () {
1369
+ return AwsVpc;
1370
+ }
1371
+ });
1372
+ Object.defineProperty(exports, 'AzureApiManagement', {
1373
+ enumerable: true,
1374
+ get: function () {
1375
+ return AzureApiManagement;
1376
+ }
1377
+ });
1378
+ Object.defineProperty(exports, 'AzureBlob', {
1379
+ enumerable: true,
1380
+ get: function () {
1381
+ return AzureBlob;
1382
+ }
1383
+ });
1384
+ Object.defineProperty(exports, 'AzureContainerApp', {
1385
+ enumerable: true,
1386
+ get: function () {
1387
+ return AzureContainerApp;
1388
+ }
1389
+ });
1390
+ Object.defineProperty(exports, 'AzureDatabricks', {
1391
+ enumerable: true,
1392
+ get: function () {
1393
+ return AzureDatabricks;
1394
+ }
1395
+ });
1396
+ Object.defineProperty(exports, 'AzureDatabricksCluster', {
1397
+ enumerable: true,
1398
+ get: function () {
1399
+ return AzureDatabricksCluster;
1400
+ }
1401
+ });
1402
+ Object.defineProperty(exports, 'AzureDatabricksJob', {
1403
+ enumerable: true,
1404
+ get: function () {
1405
+ return AzureDatabricksJob;
1406
+ }
1407
+ });
1408
+ Object.defineProperty(exports, 'AzureDatabricksMlflow', {
1409
+ enumerable: true,
1410
+ get: function () {
1411
+ return AzureDatabricksMlflow;
1412
+ }
1413
+ });
1414
+ Object.defineProperty(exports, 'AzureDatalake', {
1415
+ enumerable: true,
1416
+ get: function () {
1417
+ return AzureDatalake;
1418
+ }
1419
+ });
1420
+ Object.defineProperty(exports, 'AzureFunction', {
1421
+ enumerable: true,
1422
+ get: function () {
1423
+ return AzureFunction;
1424
+ }
1425
+ });
1426
+ Object.defineProperty(exports, 'AzureLb', {
1427
+ enumerable: true,
1428
+ get: function () {
1429
+ return AzureLb;
1430
+ }
1431
+ });
1432
+ Object.defineProperty(exports, 'AzureNsg', {
1433
+ enumerable: true,
1434
+ get: function () {
1435
+ return AzureNsg;
1436
+ }
1437
+ });
1438
+ Object.defineProperty(exports, 'AzurePostgresDatabase', {
1439
+ enumerable: true,
1440
+ get: function () {
1441
+ return AzurePostgresDatabase;
1442
+ }
1443
+ });
1444
+ Object.defineProperty(exports, 'AzurePostgresDbms', {
1445
+ enumerable: true,
1446
+ get: function () {
1447
+ return AzurePostgresDbms;
1448
+ }
1449
+ });
1450
+ Object.defineProperty(exports, 'AzureServiceBus', {
1451
+ enumerable: true,
1452
+ get: function () {
1453
+ return AzureServiceBus;
1454
+ }
1455
+ });
1456
+ Object.defineProperty(exports, 'AzureServiceBusTopic', {
1457
+ enumerable: true,
1458
+ get: function () {
1459
+ return AzureServiceBusTopic;
1460
+ }
1461
+ });
1462
+ Object.defineProperty(exports, 'AzureSubnet', {
1463
+ enumerable: true,
1464
+ get: function () {
1465
+ return AzureSubnet;
1466
+ }
1467
+ });
1468
+ Object.defineProperty(exports, 'AzureVm', {
1469
+ enumerable: true,
1470
+ get: function () {
1471
+ return AzureVm;
1472
+ }
1473
+ });
1474
+ Object.defineProperty(exports, 'AzureVnet', {
1475
+ enumerable: true,
1476
+ get: function () {
1477
+ return AzureVnet;
1478
+ }
1479
+ });
1480
+ Object.defineProperty(exports, 'Broker', {
1481
+ enumerable: true,
1482
+ get: function () {
1483
+ return Broker;
1484
+ }
1485
+ });
1486
+ Object.defineProperty(exports, 'CaaSMlflow', {
1487
+ enumerable: true,
1488
+ get: function () {
1489
+ return CaaSMlflow;
1490
+ }
1491
+ });
1492
+ Object.defineProperty(exports, 'CaaSSparkCluster', {
1493
+ enumerable: true,
1494
+ get: function () {
1495
+ return CaaSSparkCluster;
1496
+ }
1497
+ });
1498
+ Object.defineProperty(exports, 'CaaSSparkJob', {
1499
+ enumerable: true,
1500
+ get: function () {
1501
+ return CaaSSparkJob;
1502
+ }
1503
+ });
1504
+ Object.defineProperty(exports, 'CloudRun', {
1505
+ enumerable: true,
1506
+ get: function () {
1507
+ return CloudRun;
1508
+ }
1509
+ });
1510
+ Object.defineProperty(exports, 'Cognito', {
1511
+ enumerable: true,
1512
+ get: function () {
1513
+ return Cognito;
1514
+ }
1515
+ });
1516
+ Object.defineProperty(exports, 'ComputeCluster', {
1517
+ enumerable: true,
1518
+ get: function () {
1519
+ return ComputeCluster;
1520
+ }
1521
+ });
1522
+ Object.defineProperty(exports, 'ContainerPlatform', {
1523
+ enumerable: true,
1524
+ get: function () {
1525
+ return ContainerPlatform;
1526
+ }
1527
+ });
1528
+ Object.defineProperty(exports, 'DataProcessingJob', {
1529
+ enumerable: true,
1530
+ get: function () {
1531
+ return DataProcessingJob;
1532
+ }
1533
+ });
1534
+ Object.defineProperty(exports, 'Datalake', {
1535
+ enumerable: true,
1536
+ get: function () {
1537
+ return Datalake;
1538
+ }
1539
+ });
1540
+ Object.defineProperty(exports, 'DistributedDataProcessing', {
1541
+ enumerable: true,
1542
+ get: function () {
1543
+ return DistributedDataProcessing;
1544
+ }
1545
+ });
1546
+ Object.defineProperty(exports, 'Ec2Instance', {
1547
+ enumerable: true,
1548
+ get: function () {
1549
+ return Ec2Instance;
1550
+ }
1551
+ });
1552
+ Object.defineProperty(exports, 'EcsService', {
1553
+ enumerable: true,
1554
+ get: function () {
1555
+ return EcsService;
1556
+ }
1557
+ });
1558
+ Object.defineProperty(exports, 'Eks', {
1559
+ enumerable: true,
1560
+ get: function () {
1561
+ return Eks;
1562
+ }
1563
+ });
1564
+ Object.defineProperty(exports, 'Function', {
1565
+ enumerable: true,
1566
+ get: function () {
1567
+ return Function;
1568
+ }
1569
+ });
1570
+ Object.defineProperty(exports, 'GcpApiGateway', {
1571
+ enumerable: true,
1572
+ get: function () {
1573
+ return GcpApiGateway;
1574
+ }
1575
+ });
1576
+ Object.defineProperty(exports, 'GcpDatabricks', {
1577
+ enumerable: true,
1578
+ get: function () {
1579
+ return GcpDatabricks;
1580
+ }
1581
+ });
1582
+ Object.defineProperty(exports, 'GcpDatabricksCluster', {
1583
+ enumerable: true,
1584
+ get: function () {
1585
+ return GcpDatabricksCluster;
1586
+ }
1587
+ });
1588
+ Object.defineProperty(exports, 'GcpDatabricksJob', {
1589
+ enumerable: true,
1590
+ get: function () {
1591
+ return GcpDatabricksJob;
1592
+ }
1593
+ });
1594
+ Object.defineProperty(exports, 'GcpDatabricksMlflow', {
1595
+ enumerable: true,
1596
+ get: function () {
1597
+ return GcpDatabricksMlflow;
1598
+ }
1599
+ });
1600
+ Object.defineProperty(exports, 'GcpDatalake', {
1601
+ enumerable: true,
1602
+ get: function () {
1603
+ return GcpDatalake;
1604
+ }
1605
+ });
1606
+ Object.defineProperty(exports, 'GcpFirewall', {
1607
+ enumerable: true,
1608
+ get: function () {
1609
+ return GcpFirewall;
1610
+ }
1611
+ });
1612
+ Object.defineProperty(exports, 'GcpFunction', {
1613
+ enumerable: true,
1614
+ get: function () {
1615
+ return GcpFunction;
1616
+ }
1617
+ });
1618
+ Object.defineProperty(exports, 'GcpGlb', {
1619
+ enumerable: true,
1620
+ get: function () {
1621
+ return GcpGlb;
1622
+ }
1623
+ });
1624
+ Object.defineProperty(exports, 'GcpPostgresDatabase', {
1625
+ enumerable: true,
1626
+ get: function () {
1627
+ return GcpPostgresDatabase;
1628
+ }
1629
+ });
1630
+ Object.defineProperty(exports, 'GcpPostgresDbms', {
1631
+ enumerable: true,
1632
+ get: function () {
1633
+ return GcpPostgresDbms;
1634
+ }
1635
+ });
1636
+ Object.defineProperty(exports, 'GcpPubSub', {
1637
+ enumerable: true,
1638
+ get: function () {
1639
+ return GcpPubSub;
1640
+ }
1641
+ });
1642
+ Object.defineProperty(exports, 'GcpPubSubTopic', {
1643
+ enumerable: true,
1644
+ get: function () {
1645
+ return GcpPubSubTopic;
1646
+ }
1647
+ });
1648
+ Object.defineProperty(exports, 'GcpSubnet', {
1649
+ enumerable: true,
1650
+ get: function () {
1651
+ return GcpSubnet;
1652
+ }
1653
+ });
1654
+ Object.defineProperty(exports, 'GcpVm', {
1655
+ enumerable: true,
1656
+ get: function () {
1657
+ return GcpVm;
1658
+ }
1659
+ });
1660
+ Object.defineProperty(exports, 'GcpVpc', {
1661
+ enumerable: true,
1662
+ get: function () {
1663
+ return GcpVpc;
1664
+ }
1665
+ });
1666
+ Object.defineProperty(exports, 'GcsBucket', {
1667
+ enumerable: true,
1668
+ get: function () {
1669
+ return GcsBucket;
1670
+ }
1671
+ });
1672
+ Object.defineProperty(exports, 'Gke', {
1673
+ enumerable: true,
1674
+ get: function () {
1675
+ return Gke;
1676
+ }
1677
+ });
1678
+ Object.defineProperty(exports, 'HetznerFirewall', {
1679
+ enumerable: true,
1680
+ get: function () {
1681
+ return HetznerFirewall;
1682
+ }
1683
+ });
1684
+ Object.defineProperty(exports, 'HetznerNetwork', {
1685
+ enumerable: true,
1686
+ get: function () {
1687
+ return HetznerNetwork;
1688
+ }
1689
+ });
1690
+ Object.defineProperty(exports, 'HetznerServer', {
1691
+ enumerable: true,
1692
+ get: function () {
1693
+ return HetznerServer;
1694
+ }
1695
+ });
1696
+ Object.defineProperty(exports, 'HetznerSubnet', {
1697
+ enumerable: true,
1698
+ get: function () {
1699
+ return HetznerSubnet;
1700
+ }
1701
+ });
1702
+ Object.defineProperty(exports, 'IdentityProvider', {
1703
+ enumerable: true,
1704
+ get: function () {
1705
+ return IdentityProvider;
1706
+ }
1707
+ });
1708
+ Object.defineProperty(exports, 'Jaeger', {
1709
+ enumerable: true,
1710
+ get: function () {
1711
+ return Jaeger;
1712
+ }
1713
+ });
1714
+ Object.defineProperty(exports, 'K8sWorkload', {
1715
+ enumerable: true,
1716
+ get: function () {
1717
+ return K8sWorkload;
1718
+ }
1719
+ });
1720
+ Object.defineProperty(exports, 'Kafka', {
1721
+ enumerable: true,
1722
+ get: function () {
1723
+ return Kafka;
1724
+ }
1725
+ });
1726
+ Object.defineProperty(exports, 'KafkaTopic', {
1727
+ enumerable: true,
1728
+ get: function () {
1729
+ return KafkaTopic;
1730
+ }
1731
+ });
1732
+ Object.defineProperty(exports, 'Keycloak', {
1733
+ enumerable: true,
1734
+ get: function () {
1735
+ return Keycloak;
1736
+ }
1737
+ });
1738
+ Object.defineProperty(exports, 'LoadBalancer', {
1739
+ enumerable: true,
1740
+ get: function () {
1741
+ return LoadBalancer;
1742
+ }
1743
+ });
1744
+ Object.defineProperty(exports, 'Logging', {
1745
+ enumerable: true,
1746
+ get: function () {
1747
+ return Logging;
1748
+ }
1749
+ });
1750
+ Object.defineProperty(exports, 'MessagingEntity', {
1751
+ enumerable: true,
1752
+ get: function () {
1753
+ return MessagingEntity;
1754
+ }
1755
+ });
1756
+ Object.defineProperty(exports, 'MinIO', {
1757
+ enumerable: true,
1758
+ get: function () {
1759
+ return MinIO;
1760
+ }
1761
+ });
1762
+ Object.defineProperty(exports, 'MlExperiment', {
1763
+ enumerable: true,
1764
+ get: function () {
1765
+ return MlExperiment;
1766
+ }
1767
+ });
1768
+ Object.defineProperty(exports, 'Monitoring', {
1769
+ enumerable: true,
1770
+ get: function () {
1771
+ return Monitoring;
1772
+ }
1773
+ });
1774
+ Object.defineProperty(exports, 'ObjectStorage', {
1775
+ enumerable: true,
1776
+ get: function () {
1777
+ return ObjectStorage;
1778
+ }
1779
+ });
1780
+ Object.defineProperty(exports, 'ObservabilityElastic', {
1781
+ enumerable: true,
1782
+ get: function () {
1783
+ return ObservabilityElastic;
1784
+ }
1785
+ });
1786
+ Object.defineProperty(exports, 'Ocelot', {
1787
+ enumerable: true,
1788
+ get: function () {
1789
+ return Ocelot;
1790
+ }
1791
+ });
1792
+ Object.defineProperty(exports, 'OciInstance', {
1793
+ enumerable: true,
1794
+ get: function () {
1795
+ return OciInstance;
1796
+ }
1797
+ });
1798
+ Object.defineProperty(exports, 'OciSecurityList', {
1799
+ enumerable: true,
1800
+ get: function () {
1801
+ return OciSecurityList;
1802
+ }
1803
+ });
1804
+ Object.defineProperty(exports, 'OciSubnet', {
1805
+ enumerable: true,
1806
+ get: function () {
1807
+ return OciSubnet;
1808
+ }
1809
+ });
1810
+ Object.defineProperty(exports, 'OciVcn', {
1811
+ enumerable: true,
1812
+ get: function () {
1813
+ return OciVcn;
1814
+ }
1815
+ });
1816
+ Object.defineProperty(exports, 'OpenshiftPersistentVolume', {
1817
+ enumerable: true,
1818
+ get: function () {
1819
+ return OpenshiftPersistentVolume;
1820
+ }
1821
+ });
1822
+ Object.defineProperty(exports, 'OpenshiftSecurityGroup', {
1823
+ enumerable: true,
1824
+ get: function () {
1825
+ return OpenshiftSecurityGroup;
1826
+ }
1827
+ });
1828
+ Object.defineProperty(exports, 'OpenshiftService', {
1829
+ enumerable: true,
1830
+ get: function () {
1831
+ return OpenshiftService;
1832
+ }
1833
+ });
1834
+ Object.defineProperty(exports, 'OpenshiftVm', {
1835
+ enumerable: true,
1836
+ get: function () {
1837
+ return OpenshiftVm;
1838
+ }
1839
+ });
1840
+ Object.defineProperty(exports, 'OpenshiftWorkload', {
1841
+ enumerable: true,
1842
+ get: function () {
1843
+ return OpenshiftWorkload;
1844
+ }
1845
+ });
1846
+ Object.defineProperty(exports, 'Prometheus', {
1847
+ enumerable: true,
1848
+ get: function () {
1849
+ return Prometheus;
1850
+ }
1851
+ });
1852
+ Object.defineProperty(exports, 'RelationalDatabase', {
1853
+ enumerable: true,
1854
+ get: function () {
1855
+ return RelationalDatabase;
1856
+ }
1857
+ });
1858
+ Object.defineProperty(exports, 'RelationalDbms', {
1859
+ enumerable: true,
1860
+ get: function () {
1861
+ return RelationalDbms;
1862
+ }
1863
+ });
1864
+ Object.defineProperty(exports, 'SecurityGroup', {
1865
+ enumerable: true,
1866
+ get: function () {
1867
+ return SecurityGroup;
1868
+ }
1869
+ });
1870
+ Object.defineProperty(exports, 'ServiceMesh', {
1871
+ enumerable: true,
1872
+ get: function () {
1873
+ return ServiceMesh;
1874
+ }
1875
+ });
1876
+ Object.defineProperty(exports, 'Subnet', {
1877
+ enumerable: true,
1878
+ get: function () {
1879
+ return Subnet;
1880
+ }
1881
+ });
1882
+ Object.defineProperty(exports, 'Tracing', {
1883
+ enumerable: true,
1884
+ get: function () {
1885
+ return Tracing;
1886
+ }
1887
+ });
1888
+ Object.defineProperty(exports, 'Traefik', {
1889
+ enumerable: true,
1890
+ get: function () {
1891
+ return Traefik;
1892
+ }
1893
+ });
1894
+ Object.defineProperty(exports, 'VirtualMachine', {
1895
+ enumerable: true,
1896
+ get: function () {
1897
+ return VirtualMachine;
1898
+ }
1899
+ });
1900
+ Object.defineProperty(exports, 'VirtualNetwork', {
1901
+ enumerable: true,
1902
+ get: function () {
1903
+ return VirtualNetwork;
1904
+ }
1905
+ });
1906
+ Object.defineProperty(exports, 'VspherePortGroup', {
1907
+ enumerable: true,
1908
+ get: function () {
1909
+ return VspherePortGroup;
1910
+ }
1911
+ });
1912
+ Object.defineProperty(exports, 'VsphereVlan', {
1913
+ enumerable: true,
1914
+ get: function () {
1915
+ return VsphereVlan;
1916
+ }
1917
+ });
1918
+ Object.defineProperty(exports, 'VsphereVm', {
1919
+ enumerable: true,
1920
+ get: function () {
1921
+ return VsphereVm;
1922
+ }
1923
+ });
1924
+ Object.defineProperty(exports, 'Workload', {
1925
+ enumerable: true,
1926
+ get: function () {
1927
+ return Workload;
1928
+ }
1929
+ });
1930
+ Object.defineProperty(exports, 'addDependency', {
1931
+ enumerable: true,
1932
+ get: function () {
1933
+ return addDependency;
1934
+ }
1935
+ });
1936
+ Object.defineProperty(exports, 'createFractal', {
1937
+ enumerable: true,
1938
+ get: function () {
1939
+ return createFractal;
1940
+ }
1941
+ });
1942
+ Object.defineProperty(exports, 'defineOffer', {
1943
+ enumerable: true,
1944
+ get: function () {
1945
+ return defineOffer;
1946
+ }
1947
+ });
1948
+ Object.defineProperty(exports, 'deploy', {
1949
+ enumerable: true,
1950
+ get: function () {
1951
+ return deploy;
1952
+ }
1953
+ });
1954
+ Object.defineProperty(exports, 'destroy', {
1955
+ enumerable: true,
1956
+ get: function () {
1957
+ return destroy;
1958
+ }
1959
+ });
1960
+ Object.defineProperty(exports, 'guardrail', {
1961
+ enumerable: true,
1962
+ get: function () {
1963
+ return guardrail;
1964
+ }
1965
+ });
1966
+ Object.defineProperty(exports, 'newNode', {
1967
+ enumerable: true,
1968
+ get: function () {
1969
+ return newNode;
1970
+ }
1971
+ });