@reyemtech/nimbus 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +399 -0
- package/dist/cjs/aws/cluster.d.ts +32 -0
- package/dist/cjs/aws/cluster.d.ts.map +1 -0
- package/dist/cjs/aws/cluster.js +214 -0
- package/dist/cjs/aws/cluster.js.map +1 -0
- package/dist/cjs/aws/dns.d.ts +22 -0
- package/dist/cjs/aws/dns.d.ts.map +1 -0
- package/dist/cjs/aws/dns.js +95 -0
- package/dist/cjs/aws/dns.js.map +1 -0
- package/dist/cjs/aws/index.d.ts +10 -0
- package/dist/cjs/aws/index.d.ts.map +1 -0
- package/dist/cjs/aws/index.js +17 -0
- package/dist/cjs/aws/index.js.map +1 -0
- package/dist/cjs/aws/network.d.ts +27 -0
- package/dist/cjs/aws/network.d.ts.map +1 -0
- package/dist/cjs/aws/network.js +262 -0
- package/dist/cjs/aws/network.js.map +1 -0
- package/dist/cjs/aws/secrets.d.ts +26 -0
- package/dist/cjs/aws/secrets.d.ts.map +1 -0
- package/dist/cjs/aws/secrets.js +127 -0
- package/dist/cjs/aws/secrets.js.map +1 -0
- package/dist/cjs/azure/cluster.d.ts +44 -0
- package/dist/cjs/azure/cluster.d.ts.map +1 -0
- package/dist/cjs/azure/cluster.js +143 -0
- package/dist/cjs/azure/cluster.js.map +1 -0
- package/dist/cjs/azure/dns.d.ts +28 -0
- package/dist/cjs/azure/dns.d.ts.map +1 -0
- package/dist/cjs/azure/dns.js +169 -0
- package/dist/cjs/azure/dns.js.map +1 -0
- package/dist/cjs/azure/index.d.ts +10 -0
- package/dist/cjs/azure/index.d.ts.map +1 -0
- package/dist/cjs/azure/index.js +17 -0
- package/dist/cjs/azure/index.js.map +1 -0
- package/dist/cjs/azure/network.d.ts +28 -0
- package/dist/cjs/azure/network.d.ts.map +1 -0
- package/dist/cjs/azure/network.js +176 -0
- package/dist/cjs/azure/network.js.map +1 -0
- package/dist/cjs/azure/secrets.d.ts +37 -0
- package/dist/cjs/azure/secrets.d.ts.map +1 -0
- package/dist/cjs/azure/secrets.js +150 -0
- package/dist/cjs/azure/secrets.js.map +1 -0
- package/dist/cjs/cache/index.d.ts +7 -0
- package/dist/cjs/cache/index.d.ts.map +1 -0
- package/dist/cjs/cache/index.js +8 -0
- package/dist/cjs/cache/index.js.map +1 -0
- package/dist/cjs/cache/interfaces.d.ts +60 -0
- package/dist/cjs/cache/interfaces.d.ts.map +1 -0
- package/dist/cjs/cache/interfaces.js +11 -0
- package/dist/cjs/cache/interfaces.js.map +1 -0
- package/dist/cjs/cluster/index.d.ts +7 -0
- package/dist/cjs/cluster/index.d.ts.map +1 -0
- package/dist/cjs/cluster/index.js +8 -0
- package/dist/cjs/cluster/index.js.map +1 -0
- package/dist/cjs/cluster/interfaces.d.ts +120 -0
- package/dist/cjs/cluster/interfaces.d.ts.map +1 -0
- package/dist/cjs/cluster/interfaces.js +12 -0
- package/dist/cjs/cluster/interfaces.js.map +1 -0
- package/dist/cjs/database/index.d.ts +7 -0
- package/dist/cjs/database/index.d.ts.map +1 -0
- package/dist/cjs/database/index.js +8 -0
- package/dist/cjs/database/index.js.map +1 -0
- package/dist/cjs/database/interfaces.d.ts +93 -0
- package/dist/cjs/database/interfaces.d.ts.map +1 -0
- package/dist/cjs/database/interfaces.js +12 -0
- package/dist/cjs/database/interfaces.js.map +1 -0
- package/dist/cjs/dns/index.d.ts +7 -0
- package/dist/cjs/dns/index.d.ts.map +1 -0
- package/dist/cjs/dns/index.js +8 -0
- package/dist/cjs/dns/index.js.map +1 -0
- package/dist/cjs/dns/interfaces.d.ts +55 -0
- package/dist/cjs/dns/interfaces.d.ts.map +1 -0
- package/dist/cjs/dns/interfaces.js +11 -0
- package/dist/cjs/dns/interfaces.js.map +1 -0
- package/dist/cjs/factories/cluster.d.ts +45 -0
- package/dist/cjs/factories/cluster.d.ts.map +1 -0
- package/dist/cjs/factories/cluster.js +90 -0
- package/dist/cjs/factories/cluster.js.map +1 -0
- package/dist/cjs/factories/dns.d.ts +30 -0
- package/dist/cjs/factories/dns.d.ts.map +1 -0
- package/dist/cjs/factories/dns.js +56 -0
- package/dist/cjs/factories/dns.js.map +1 -0
- package/dist/cjs/factories/index.d.ts +15 -0
- package/dist/cjs/factories/index.d.ts.map +1 -0
- package/dist/cjs/factories/index.js +23 -0
- package/dist/cjs/factories/index.js.map +1 -0
- package/dist/cjs/factories/network.d.ts +40 -0
- package/dist/cjs/factories/network.d.ts.map +1 -0
- package/dist/cjs/factories/network.js +85 -0
- package/dist/cjs/factories/network.js.map +1 -0
- package/dist/cjs/factories/secrets.d.ts +38 -0
- package/dist/cjs/factories/secrets.d.ts.map +1 -0
- package/dist/cjs/factories/secrets.js +67 -0
- package/dist/cjs/factories/secrets.js.map +1 -0
- package/dist/cjs/factories/types.d.ts +75 -0
- package/dist/cjs/factories/types.d.ts.map +1 -0
- package/dist/cjs/factories/types.js +28 -0
- package/dist/cjs/factories/types.js.map +1 -0
- package/dist/cjs/global-lb/glb.d.ts +29 -0
- package/dist/cjs/global-lb/glb.d.ts.map +1 -0
- package/dist/cjs/global-lb/glb.js +220 -0
- package/dist/cjs/global-lb/glb.js.map +1 -0
- package/dist/cjs/global-lb/index.d.ts +8 -0
- package/dist/cjs/global-lb/index.d.ts.map +1 -0
- package/dist/cjs/global-lb/index.js +11 -0
- package/dist/cjs/global-lb/index.js.map +1 -0
- package/dist/cjs/global-lb/interfaces.d.ts +62 -0
- package/dist/cjs/global-lb/interfaces.d.ts.map +1 -0
- package/dist/cjs/global-lb/interfaces.js +11 -0
- package/dist/cjs/global-lb/interfaces.js.map +1 -0
- package/dist/cjs/index.d.ts +28 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +72 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/network/cidr.d.ts +92 -0
- package/dist/cjs/network/cidr.d.ts.map +1 -0
- package/dist/cjs/network/cidr.js +189 -0
- package/dist/cjs/network/cidr.js.map +1 -0
- package/dist/cjs/network/index.d.ts +8 -0
- package/dist/cjs/network/index.d.ts.map +1 -0
- package/dist/cjs/network/index.js +17 -0
- package/dist/cjs/network/index.js.map +1 -0
- package/dist/cjs/network/interfaces.d.ts +60 -0
- package/dist/cjs/network/interfaces.d.ts.map +1 -0
- package/dist/cjs/network/interfaces.js +12 -0
- package/dist/cjs/network/interfaces.js.map +1 -0
- package/dist/cjs/platform/index.d.ts +8 -0
- package/dist/cjs/platform/index.d.ts.map +1 -0
- package/dist/cjs/platform/index.js +11 -0
- package/dist/cjs/platform/index.js.map +1 -0
- package/dist/cjs/platform/interfaces.d.ts +86 -0
- package/dist/cjs/platform/interfaces.d.ts.map +1 -0
- package/dist/cjs/platform/interfaces.js +12 -0
- package/dist/cjs/platform/interfaces.js.map +1 -0
- package/dist/cjs/platform/stack.d.ts +32 -0
- package/dist/cjs/platform/stack.d.ts.map +1 -0
- package/dist/cjs/platform/stack.js +258 -0
- package/dist/cjs/platform/stack.js.map +1 -0
- package/dist/cjs/queue/index.d.ts +7 -0
- package/dist/cjs/queue/index.d.ts.map +1 -0
- package/dist/cjs/queue/index.js +8 -0
- package/dist/cjs/queue/index.js.map +1 -0
- package/dist/cjs/queue/interfaces.d.ts +46 -0
- package/dist/cjs/queue/interfaces.d.ts.map +1 -0
- package/dist/cjs/queue/interfaces.js +11 -0
- package/dist/cjs/queue/interfaces.js.map +1 -0
- package/dist/cjs/secrets/index.d.ts +7 -0
- package/dist/cjs/secrets/index.d.ts.map +1 -0
- package/dist/cjs/secrets/index.js +8 -0
- package/dist/cjs/secrets/index.js.map +1 -0
- package/dist/cjs/secrets/interfaces.d.ts +73 -0
- package/dist/cjs/secrets/interfaces.d.ts.map +1 -0
- package/dist/cjs/secrets/interfaces.js +11 -0
- package/dist/cjs/secrets/interfaces.js.map +1 -0
- package/dist/cjs/storage/index.d.ts +7 -0
- package/dist/cjs/storage/index.d.ts.map +1 -0
- package/dist/cjs/storage/index.js +8 -0
- package/dist/cjs/storage/index.js.map +1 -0
- package/dist/cjs/storage/interfaces.d.ts +63 -0
- package/dist/cjs/storage/interfaces.d.ts.map +1 -0
- package/dist/cjs/storage/interfaces.js +11 -0
- package/dist/cjs/storage/interfaces.js.map +1 -0
- package/dist/cjs/types/cloud-target.d.ts +89 -0
- package/dist/cjs/types/cloud-target.d.ts.map +1 -0
- package/dist/cjs/types/cloud-target.js +73 -0
- package/dist/cjs/types/cloud-target.js.map +1 -0
- package/dist/cjs/types/errors.d.ts +96 -0
- package/dist/cjs/types/errors.d.ts.map +1 -0
- package/dist/cjs/types/errors.js +127 -0
- package/dist/cjs/types/errors.js.map +1 -0
- package/dist/cjs/types/index.d.ts +10 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +33 -0
- package/dist/cjs/types/index.js.map +1 -0
- package/dist/cjs/types/tags.d.ts +53 -0
- package/dist/cjs/types/tags.d.ts.map +1 -0
- package/dist/cjs/types/tags.js +110 -0
- package/dist/cjs/types/tags.js.map +1 -0
- package/dist/cjs/types/validation.d.ts +63 -0
- package/dist/cjs/types/validation.d.ts.map +1 -0
- package/dist/cjs/types/validation.js +158 -0
- package/dist/cjs/types/validation.js.map +1 -0
- package/dist/esm/aws/cluster.d.ts +32 -0
- package/dist/esm/aws/cluster.d.ts.map +1 -0
- package/dist/esm/aws/cluster.js +214 -0
- package/dist/esm/aws/cluster.js.map +1 -0
- package/dist/esm/aws/dns.d.ts +22 -0
- package/dist/esm/aws/dns.d.ts.map +1 -0
- package/dist/esm/aws/dns.js +95 -0
- package/dist/esm/aws/dns.js.map +1 -0
- package/dist/esm/aws/index.d.ts +10 -0
- package/dist/esm/aws/index.d.ts.map +1 -0
- package/dist/esm/aws/index.js +17 -0
- package/dist/esm/aws/index.js.map +1 -0
- package/dist/esm/aws/network.d.ts +27 -0
- package/dist/esm/aws/network.d.ts.map +1 -0
- package/dist/esm/aws/network.js +262 -0
- package/dist/esm/aws/network.js.map +1 -0
- package/dist/esm/aws/secrets.d.ts +26 -0
- package/dist/esm/aws/secrets.d.ts.map +1 -0
- package/dist/esm/aws/secrets.js +127 -0
- package/dist/esm/aws/secrets.js.map +1 -0
- package/dist/esm/azure/cluster.d.ts +44 -0
- package/dist/esm/azure/cluster.d.ts.map +1 -0
- package/dist/esm/azure/cluster.js +143 -0
- package/dist/esm/azure/cluster.js.map +1 -0
- package/dist/esm/azure/dns.d.ts +28 -0
- package/dist/esm/azure/dns.d.ts.map +1 -0
- package/dist/esm/azure/dns.js +169 -0
- package/dist/esm/azure/dns.js.map +1 -0
- package/dist/esm/azure/index.d.ts +10 -0
- package/dist/esm/azure/index.d.ts.map +1 -0
- package/dist/esm/azure/index.js +17 -0
- package/dist/esm/azure/index.js.map +1 -0
- package/dist/esm/azure/network.d.ts +28 -0
- package/dist/esm/azure/network.d.ts.map +1 -0
- package/dist/esm/azure/network.js +176 -0
- package/dist/esm/azure/network.js.map +1 -0
- package/dist/esm/azure/secrets.d.ts +37 -0
- package/dist/esm/azure/secrets.d.ts.map +1 -0
- package/dist/esm/azure/secrets.js +150 -0
- package/dist/esm/azure/secrets.js.map +1 -0
- package/dist/esm/cache/index.d.ts +7 -0
- package/dist/esm/cache/index.d.ts.map +1 -0
- package/dist/esm/cache/index.js +8 -0
- package/dist/esm/cache/index.js.map +1 -0
- package/dist/esm/cache/interfaces.d.ts +60 -0
- package/dist/esm/cache/interfaces.d.ts.map +1 -0
- package/dist/esm/cache/interfaces.js +11 -0
- package/dist/esm/cache/interfaces.js.map +1 -0
- package/dist/esm/cluster/index.d.ts +7 -0
- package/dist/esm/cluster/index.d.ts.map +1 -0
- package/dist/esm/cluster/index.js +8 -0
- package/dist/esm/cluster/index.js.map +1 -0
- package/dist/esm/cluster/interfaces.d.ts +120 -0
- package/dist/esm/cluster/interfaces.d.ts.map +1 -0
- package/dist/esm/cluster/interfaces.js +12 -0
- package/dist/esm/cluster/interfaces.js.map +1 -0
- package/dist/esm/database/index.d.ts +7 -0
- package/dist/esm/database/index.d.ts.map +1 -0
- package/dist/esm/database/index.js +8 -0
- package/dist/esm/database/index.js.map +1 -0
- package/dist/esm/database/interfaces.d.ts +93 -0
- package/dist/esm/database/interfaces.d.ts.map +1 -0
- package/dist/esm/database/interfaces.js +12 -0
- package/dist/esm/database/interfaces.js.map +1 -0
- package/dist/esm/dns/index.d.ts +7 -0
- package/dist/esm/dns/index.d.ts.map +1 -0
- package/dist/esm/dns/index.js +8 -0
- package/dist/esm/dns/index.js.map +1 -0
- package/dist/esm/dns/interfaces.d.ts +55 -0
- package/dist/esm/dns/interfaces.d.ts.map +1 -0
- package/dist/esm/dns/interfaces.js +11 -0
- package/dist/esm/dns/interfaces.js.map +1 -0
- package/dist/esm/factories/cluster.d.ts +45 -0
- package/dist/esm/factories/cluster.d.ts.map +1 -0
- package/dist/esm/factories/cluster.js +90 -0
- package/dist/esm/factories/cluster.js.map +1 -0
- package/dist/esm/factories/dns.d.ts +30 -0
- package/dist/esm/factories/dns.d.ts.map +1 -0
- package/dist/esm/factories/dns.js +56 -0
- package/dist/esm/factories/dns.js.map +1 -0
- package/dist/esm/factories/index.d.ts +15 -0
- package/dist/esm/factories/index.d.ts.map +1 -0
- package/dist/esm/factories/index.js +23 -0
- package/dist/esm/factories/index.js.map +1 -0
- package/dist/esm/factories/network.d.ts +40 -0
- package/dist/esm/factories/network.d.ts.map +1 -0
- package/dist/esm/factories/network.js +85 -0
- package/dist/esm/factories/network.js.map +1 -0
- package/dist/esm/factories/secrets.d.ts +38 -0
- package/dist/esm/factories/secrets.d.ts.map +1 -0
- package/dist/esm/factories/secrets.js +67 -0
- package/dist/esm/factories/secrets.js.map +1 -0
- package/dist/esm/factories/types.d.ts +75 -0
- package/dist/esm/factories/types.d.ts.map +1 -0
- package/dist/esm/factories/types.js +28 -0
- package/dist/esm/factories/types.js.map +1 -0
- package/dist/esm/global-lb/glb.d.ts +29 -0
- package/dist/esm/global-lb/glb.d.ts.map +1 -0
- package/dist/esm/global-lb/glb.js +220 -0
- package/dist/esm/global-lb/glb.js.map +1 -0
- package/dist/esm/global-lb/index.d.ts +8 -0
- package/dist/esm/global-lb/index.d.ts.map +1 -0
- package/dist/esm/global-lb/index.js +11 -0
- package/dist/esm/global-lb/index.js.map +1 -0
- package/dist/esm/global-lb/interfaces.d.ts +62 -0
- package/dist/esm/global-lb/interfaces.d.ts.map +1 -0
- package/dist/esm/global-lb/interfaces.js +11 -0
- package/dist/esm/global-lb/interfaces.js.map +1 -0
- package/dist/esm/index.d.ts +28 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +72 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/network/cidr.d.ts +92 -0
- package/dist/esm/network/cidr.d.ts.map +1 -0
- package/dist/esm/network/cidr.js +189 -0
- package/dist/esm/network/cidr.js.map +1 -0
- package/dist/esm/network/index.d.ts +8 -0
- package/dist/esm/network/index.d.ts.map +1 -0
- package/dist/esm/network/index.js +17 -0
- package/dist/esm/network/index.js.map +1 -0
- package/dist/esm/network/interfaces.d.ts +60 -0
- package/dist/esm/network/interfaces.d.ts.map +1 -0
- package/dist/esm/network/interfaces.js +12 -0
- package/dist/esm/network/interfaces.js.map +1 -0
- package/dist/esm/platform/index.d.ts +8 -0
- package/dist/esm/platform/index.d.ts.map +1 -0
- package/dist/esm/platform/index.js +11 -0
- package/dist/esm/platform/index.js.map +1 -0
- package/dist/esm/platform/interfaces.d.ts +86 -0
- package/dist/esm/platform/interfaces.d.ts.map +1 -0
- package/dist/esm/platform/interfaces.js +12 -0
- package/dist/esm/platform/interfaces.js.map +1 -0
- package/dist/esm/platform/stack.d.ts +32 -0
- package/dist/esm/platform/stack.d.ts.map +1 -0
- package/dist/esm/platform/stack.js +258 -0
- package/dist/esm/platform/stack.js.map +1 -0
- package/dist/esm/queue/index.d.ts +7 -0
- package/dist/esm/queue/index.d.ts.map +1 -0
- package/dist/esm/queue/index.js +8 -0
- package/dist/esm/queue/index.js.map +1 -0
- package/dist/esm/queue/interfaces.d.ts +46 -0
- package/dist/esm/queue/interfaces.d.ts.map +1 -0
- package/dist/esm/queue/interfaces.js +11 -0
- package/dist/esm/queue/interfaces.js.map +1 -0
- package/dist/esm/secrets/index.d.ts +7 -0
- package/dist/esm/secrets/index.d.ts.map +1 -0
- package/dist/esm/secrets/index.js +8 -0
- package/dist/esm/secrets/index.js.map +1 -0
- package/dist/esm/secrets/interfaces.d.ts +73 -0
- package/dist/esm/secrets/interfaces.d.ts.map +1 -0
- package/dist/esm/secrets/interfaces.js +11 -0
- package/dist/esm/secrets/interfaces.js.map +1 -0
- package/dist/esm/storage/index.d.ts +7 -0
- package/dist/esm/storage/index.d.ts.map +1 -0
- package/dist/esm/storage/index.js +8 -0
- package/dist/esm/storage/index.js.map +1 -0
- package/dist/esm/storage/interfaces.d.ts +63 -0
- package/dist/esm/storage/interfaces.d.ts.map +1 -0
- package/dist/esm/storage/interfaces.js +11 -0
- package/dist/esm/storage/interfaces.js.map +1 -0
- package/dist/esm/types/cloud-target.d.ts +89 -0
- package/dist/esm/types/cloud-target.d.ts.map +1 -0
- package/dist/esm/types/cloud-target.js +73 -0
- package/dist/esm/types/cloud-target.js.map +1 -0
- package/dist/esm/types/errors.d.ts +96 -0
- package/dist/esm/types/errors.d.ts.map +1 -0
- package/dist/esm/types/errors.js +127 -0
- package/dist/esm/types/errors.js.map +1 -0
- package/dist/esm/types/index.d.ts +10 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +33 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/tags.d.ts +53 -0
- package/dist/esm/types/tags.d.ts.map +1 -0
- package/dist/esm/types/tags.js +110 -0
- package/dist/esm/types/tags.js.map +1 -0
- package/dist/esm/types/validation.d.ts +63 -0
- package/dist/esm/types/validation.d.ts.map +1 -0
- package/dist/esm/types/validation.js +158 -0
- package/dist/esm/types/validation.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CIDR utilities for multi-cloud network planning.
|
|
4
|
+
*
|
|
5
|
+
* Provides overlap detection, auto-offset for non-conflicting CIDRs,
|
|
6
|
+
* and validation for multi-cloud VPC peering/mesh scenarios.
|
|
7
|
+
*
|
|
8
|
+
* @module network/cidr
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.parseCidr = parseCidr;
|
|
12
|
+
exports.formatIp = formatIp;
|
|
13
|
+
exports.cidrsOverlap = cidrsOverlap;
|
|
14
|
+
exports.detectOverlaps = detectOverlaps;
|
|
15
|
+
exports.validateNoOverlaps = validateNoOverlaps;
|
|
16
|
+
exports.autoOffsetCidrs = autoOffsetCidrs;
|
|
17
|
+
exports.buildCidrMap = buildCidrMap;
|
|
18
|
+
const types_1 = require("../types");
|
|
19
|
+
/**
|
|
20
|
+
* Parse a CIDR string into its numeric components.
|
|
21
|
+
*
|
|
22
|
+
* @param cidr - CIDR notation string (e.g., "10.0.0.0/16")
|
|
23
|
+
* @returns Parsed CIDR with start/end addresses
|
|
24
|
+
* @throws {CidrError} If the CIDR string is malformed
|
|
25
|
+
*/
|
|
26
|
+
function parseCidr(cidr) {
|
|
27
|
+
const match = /^(\d+)\.(\d+)\.(\d+)\.(\d+)\/(\d+)$/.exec(cidr);
|
|
28
|
+
if (!match) {
|
|
29
|
+
throw new types_1.CidrError(`Invalid CIDR notation: "${cidr}"`, "CIDR_INVALID", [cidr]);
|
|
30
|
+
}
|
|
31
|
+
const octets = [
|
|
32
|
+
parseInt(match[1] ?? "0", 10),
|
|
33
|
+
parseInt(match[2] ?? "0", 10),
|
|
34
|
+
parseInt(match[3] ?? "0", 10),
|
|
35
|
+
parseInt(match[4] ?? "0", 10),
|
|
36
|
+
];
|
|
37
|
+
const prefix = parseInt(match[5] ?? "0", 10);
|
|
38
|
+
if (octets.some((o) => o < 0 || o > 255) || prefix < 0 || prefix > 32) {
|
|
39
|
+
throw new types_1.CidrError(`Invalid CIDR values: "${cidr}"`, "CIDR_INVALID", [cidr]);
|
|
40
|
+
}
|
|
41
|
+
const network = ((octets[0] ?? 0) << 24) |
|
|
42
|
+
((octets[1] ?? 0) << 16) |
|
|
43
|
+
((octets[2] ?? 0) << 8) |
|
|
44
|
+
(octets[3] ?? 0);
|
|
45
|
+
const size = 1 << (32 - prefix);
|
|
46
|
+
const mask = ~(size - 1);
|
|
47
|
+
const start = (network & mask) >>> 0;
|
|
48
|
+
const end = (start + size - 1) >>> 0;
|
|
49
|
+
return { network: start, prefix, size, start, end };
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Format a numeric IP address back to dotted notation.
|
|
53
|
+
*
|
|
54
|
+
* @param ip - 32-bit unsigned integer IP address
|
|
55
|
+
* @returns Dotted decimal string
|
|
56
|
+
*/
|
|
57
|
+
function formatIp(ip) {
|
|
58
|
+
return `${(ip >>> 24) & 0xff}.${(ip >>> 16) & 0xff}.${(ip >>> 8) & 0xff}.${ip & 0xff}`;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if two CIDR ranges overlap.
|
|
62
|
+
*
|
|
63
|
+
* @param a - First CIDR string
|
|
64
|
+
* @param b - Second CIDR string
|
|
65
|
+
* @returns True if ranges overlap
|
|
66
|
+
*/
|
|
67
|
+
function cidrsOverlap(a, b) {
|
|
68
|
+
const pa = parseCidr(a);
|
|
69
|
+
const pb = parseCidr(b);
|
|
70
|
+
return pa.start <= pb.end && pb.start <= pa.end;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Detect overlaps in a set of CIDRs.
|
|
74
|
+
*
|
|
75
|
+
* @param cidrs - Array of CIDR strings to check
|
|
76
|
+
* @returns Array of overlapping pairs, empty if no conflicts
|
|
77
|
+
*/
|
|
78
|
+
function detectOverlaps(cidrs) {
|
|
79
|
+
const overlaps = [];
|
|
80
|
+
for (let i = 0; i < cidrs.length; i++) {
|
|
81
|
+
for (let j = i + 1; j < cidrs.length; j++) {
|
|
82
|
+
const a = cidrs[i];
|
|
83
|
+
const b = cidrs[j];
|
|
84
|
+
if (a && b && cidrsOverlap(a, b)) {
|
|
85
|
+
overlaps.push([a, b]);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return overlaps;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate that a set of CIDRs do not overlap.
|
|
93
|
+
*
|
|
94
|
+
* @param cidrs - Array of CIDR strings
|
|
95
|
+
* @throws {CidrError} If any CIDRs overlap
|
|
96
|
+
*/
|
|
97
|
+
function validateNoOverlaps(cidrs) {
|
|
98
|
+
const overlaps = detectOverlaps(cidrs);
|
|
99
|
+
if (overlaps.length > 0) {
|
|
100
|
+
const pairs = overlaps.map(([a, b]) => `${a} <-> ${b}`).join(", ");
|
|
101
|
+
throw new types_1.CidrError(`CIDR overlap detected: ${pairs}. Multi-cloud VPC peering requires non-overlapping ranges.`, "CIDR_OVERLAP", cidrs);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Auto-generate non-overlapping CIDRs for multiple clouds.
|
|
106
|
+
*
|
|
107
|
+
* Uses 10.{offset}.0.0/16 pattern with configurable base and step.
|
|
108
|
+
*
|
|
109
|
+
* @param count - Number of CIDRs to generate
|
|
110
|
+
* @param options - Base octet and step between CIDRs
|
|
111
|
+
* @returns Array of non-overlapping CIDR strings
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* autoOffsetCidrs(3); // ["10.0.0.0/16", "10.1.0.0/16", "10.2.0.0/16"]
|
|
116
|
+
* autoOffsetCidrs(2, { base: 10, step: 10 }); // ["10.10.0.0/16", "10.20.0.0/16"]
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
function autoOffsetCidrs(count, options) {
|
|
120
|
+
const base = options?.base ?? 0;
|
|
121
|
+
const step = options?.step ?? 1;
|
|
122
|
+
const prefix = options?.prefix ?? 16;
|
|
123
|
+
const cidrs = [];
|
|
124
|
+
for (let i = 0; i < count; i++) {
|
|
125
|
+
const secondOctet = base + i * step;
|
|
126
|
+
if (secondOctet > 255) {
|
|
127
|
+
throw new types_1.CidrError(`Cannot generate ${count} non-overlapping /16 CIDRs: second octet exceeds 255 at index ${i}`, "CIDR_INVALID");
|
|
128
|
+
}
|
|
129
|
+
cidrs.push(`10.${secondOctet}.0.0/${prefix}`);
|
|
130
|
+
}
|
|
131
|
+
return cidrs;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Build a CIDR map for named clouds from explicit values or auto-offset.
|
|
135
|
+
*
|
|
136
|
+
* If explicit CIDRs are provided for all clouds, validates no overlaps.
|
|
137
|
+
* For missing clouds, auto-generates non-overlapping CIDRs.
|
|
138
|
+
*
|
|
139
|
+
* @param clouds - Array of cloud names
|
|
140
|
+
* @param explicit - Explicit CIDR assignments (partial or full)
|
|
141
|
+
* @returns Complete CIDR map keyed by cloud name
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* buildCidrMap(["aws", "azure"], { aws: "10.0.0.0/16" });
|
|
146
|
+
* // { aws: "10.0.0.0/16", azure: "10.1.0.0/16" }
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
function buildCidrMap(clouds, explicit) {
|
|
150
|
+
const result = {};
|
|
151
|
+
const usedCidrs = [];
|
|
152
|
+
// First, assign explicit CIDRs
|
|
153
|
+
for (const cloud of clouds) {
|
|
154
|
+
const cidr = explicit?.[cloud];
|
|
155
|
+
if (cidr) {
|
|
156
|
+
result[cloud] = cidr;
|
|
157
|
+
usedCidrs.push(cidr);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Validate explicit CIDRs don't overlap
|
|
161
|
+
if (usedCidrs.length > 1) {
|
|
162
|
+
validateNoOverlaps(usedCidrs);
|
|
163
|
+
}
|
|
164
|
+
// Auto-assign remaining clouds with non-overlapping CIDRs
|
|
165
|
+
const remaining = clouds.filter((c) => !result[c]);
|
|
166
|
+
if (remaining.length > 0) {
|
|
167
|
+
// Find a base that doesn't overlap with existing CIDRs
|
|
168
|
+
let base = 0;
|
|
169
|
+
for (const existing of usedCidrs) {
|
|
170
|
+
const parsed = parseCidr(existing);
|
|
171
|
+
const secondOctet = (parsed.start >>> 16) & 0xff;
|
|
172
|
+
if (secondOctet >= base) {
|
|
173
|
+
base = secondOctet + 1;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const autoCidrs = autoOffsetCidrs(remaining.length, { base });
|
|
177
|
+
for (let i = 0; i < remaining.length; i++) {
|
|
178
|
+
const cloud = remaining[i];
|
|
179
|
+
const cidr = autoCidrs[i];
|
|
180
|
+
if (cloud && cidr) {
|
|
181
|
+
result[cloud] = cidr;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Final validation
|
|
185
|
+
validateNoOverlaps(Object.values(result));
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=cidr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cidr.js","sourceRoot":"","sources":["../../../src/network/cidr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network module — VPC/VNet provisioning abstraction.
|
|
3
|
+
*
|
|
4
|
+
* @module network
|
|
5
|
+
*/
|
|
6
|
+
export type { NatStrategy, ISubnetConfig, INetworkConfig, INetwork } from "./interfaces";
|
|
7
|
+
export { parseCidr, formatIp, cidrsOverlap, detectOverlaps, validateNoOverlaps, autoOffsetCidrs, buildCidrMap, } from "./cidr";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/network/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzF,OAAO,EACL,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,YAAY,GACb,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Network module — VPC/VNet provisioning abstraction.
|
|
4
|
+
*
|
|
5
|
+
* @module network
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.buildCidrMap = exports.autoOffsetCidrs = exports.validateNoOverlaps = exports.detectOverlaps = exports.cidrsOverlap = exports.formatIp = exports.parseCidr = void 0;
|
|
9
|
+
var cidr_1 = require("./cidr");
|
|
10
|
+
Object.defineProperty(exports, "parseCidr", { enumerable: true, get: function () { return cidr_1.parseCidr; } });
|
|
11
|
+
Object.defineProperty(exports, "formatIp", { enumerable: true, get: function () { return cidr_1.formatIp; } });
|
|
12
|
+
Object.defineProperty(exports, "cidrsOverlap", { enumerable: true, get: function () { return cidr_1.cidrsOverlap; } });
|
|
13
|
+
Object.defineProperty(exports, "detectOverlaps", { enumerable: true, get: function () { return cidr_1.detectOverlaps; } });
|
|
14
|
+
Object.defineProperty(exports, "validateNoOverlaps", { enumerable: true, get: function () { return cidr_1.validateNoOverlaps; } });
|
|
15
|
+
Object.defineProperty(exports, "autoOffsetCidrs", { enumerable: true, get: function () { return cidr_1.autoOffsetCidrs; } });
|
|
16
|
+
Object.defineProperty(exports, "buildCidrMap", { enumerable: true, get: function () { return cidr_1.buildCidrMap; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/network/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH,+BAQgB;AAPd,iGAAA,SAAS,OAAA;AACT,gGAAA,QAAQ,OAAA;AACR,oGAAA,YAAY,OAAA;AACZ,sGAAA,cAAc,OAAA;AACd,0GAAA,kBAAkB,OAAA;AAClB,uGAAA,eAAe,OAAA;AACf,oGAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network interfaces for @reyemtech/nimbus.
|
|
3
|
+
*
|
|
4
|
+
* Abstracts VPC (AWS), VNet (Azure), and VPC (GCP) provisioning.
|
|
5
|
+
* Includes NAT strategy options (managed, fck-nat, none) and
|
|
6
|
+
* CIDR overlap detection for multi-cloud deployments.
|
|
7
|
+
*
|
|
8
|
+
* @module network/interfaces
|
|
9
|
+
*/
|
|
10
|
+
import type * as pulumi from "@pulumi/pulumi";
|
|
11
|
+
import type { CloudArg, ResolvedCloudTarget } from "../types";
|
|
12
|
+
/** NAT gateway strategy. */
|
|
13
|
+
export type NatStrategy = "managed" | "fck-nat" | "none";
|
|
14
|
+
/** Subnet configuration. */
|
|
15
|
+
export interface ISubnetConfig {
|
|
16
|
+
readonly cidr: string;
|
|
17
|
+
readonly availabilityZone?: string;
|
|
18
|
+
readonly public?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Network configuration input.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const config: INetworkConfig = {
|
|
26
|
+
* cloud: "aws",
|
|
27
|
+
* cidr: "10.0.0.0/16",
|
|
28
|
+
* natStrategy: "fck-nat", // ~$97/mo savings vs managed NAT
|
|
29
|
+
* };
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export interface INetworkConfig {
|
|
33
|
+
readonly cloud: CloudArg;
|
|
34
|
+
/** CIDR block for the VPC/VNet. Optional for hosted K8s without custom networking (e.g. Rackspace Spot). */
|
|
35
|
+
readonly cidr?: string;
|
|
36
|
+
readonly publicSubnets?: ReadonlyArray<ISubnetConfig>;
|
|
37
|
+
readonly privateSubnets?: ReadonlyArray<ISubnetConfig>;
|
|
38
|
+
readonly natStrategy?: NatStrategy;
|
|
39
|
+
readonly enableDnsHostnames?: boolean;
|
|
40
|
+
readonly enableDnsSupport?: boolean;
|
|
41
|
+
readonly tags?: Readonly<Record<string, string>>;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Network output — the created VPC/VNet resource.
|
|
45
|
+
*
|
|
46
|
+
* Use `nativeResource` for cloud-specific network operations.
|
|
47
|
+
*/
|
|
48
|
+
export interface INetwork {
|
|
49
|
+
readonly name: string;
|
|
50
|
+
readonly cloud: ResolvedCloudTarget;
|
|
51
|
+
/** VPC ID (AWS), VNet ID (Azure), or Network self-link (GCP). */
|
|
52
|
+
readonly vpcId: pulumi.Output<string>;
|
|
53
|
+
readonly cidr?: string;
|
|
54
|
+
readonly publicSubnetIds: pulumi.Output<ReadonlyArray<string>>;
|
|
55
|
+
readonly privateSubnetIds: pulumi.Output<ReadonlyArray<string>>;
|
|
56
|
+
readonly natGatewayId?: pulumi.Output<string>;
|
|
57
|
+
/** Escape hatch: cloud-native network resource. */
|
|
58
|
+
readonly nativeResource: pulumi.Resource;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/network/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE9D,4BAA4B;AAC5B,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,SAAS,GACT,MAAM,CAAC;AAEX,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,4GAA4G;IAC5G,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACtD,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE9C,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC1C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Network interfaces for @reyemtech/nimbus.
|
|
4
|
+
*
|
|
5
|
+
* Abstracts VPC (AWS), VNet (Azure), and VPC (GCP) provisioning.
|
|
6
|
+
* Includes NAT strategy options (managed, fck-nat, none) and
|
|
7
|
+
* CIDR overlap detection for multi-cloud deployments.
|
|
8
|
+
*
|
|
9
|
+
* @module network/interfaces
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/network/interfaces.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform module — cloud-agnostic platform stack abstraction.
|
|
3
|
+
*
|
|
4
|
+
* @module platform
|
|
5
|
+
*/
|
|
6
|
+
export type { DnsProvider, IPlatformComponentConfig, IExternalDnsConfig, IVaultConfig, IPlatformStackConfig, IPlatformStack, } from "./interfaces";
|
|
7
|
+
export { createPlatformStack } from "./stack";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platform/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,WAAW,EACX,wBAAwB,EACxB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Platform module — cloud-agnostic platform stack abstraction.
|
|
4
|
+
*
|
|
5
|
+
* @module platform
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.createPlatformStack = void 0;
|
|
9
|
+
var stack_1 = require("./stack");
|
|
10
|
+
Object.defineProperty(exports, "createPlatformStack", { enumerable: true, get: function () { return stack_1.createPlatformStack; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/platform/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH,iCAA8C;AAArC,4GAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform stack interfaces for @reyemtech/nimbus.
|
|
3
|
+
*
|
|
4
|
+
* Cloud-agnostic platform components deployed via Helm to any ICluster.
|
|
5
|
+
* These are the components used across all 3 client environments:
|
|
6
|
+
* Traefik, ArgoCD, cert-manager, External DNS, Vault, External Secrets.
|
|
7
|
+
*
|
|
8
|
+
* @module platform/interfaces
|
|
9
|
+
*/
|
|
10
|
+
import type * as pulumi from "@pulumi/pulumi";
|
|
11
|
+
import type * as k8s from "@pulumi/kubernetes";
|
|
12
|
+
import type { ICluster } from "../cluster";
|
|
13
|
+
/** DNS provider for External DNS integration. */
|
|
14
|
+
export type DnsProvider = "route53" | "azure-dns" | "cloud-dns" | "cloudflare";
|
|
15
|
+
/** Individual platform component configuration. */
|
|
16
|
+
export interface IPlatformComponentConfig {
|
|
17
|
+
/** Enable or disable this component. Default: true for core components. */
|
|
18
|
+
readonly enabled?: boolean;
|
|
19
|
+
/** Helm chart version override. */
|
|
20
|
+
readonly version?: string;
|
|
21
|
+
/** Additional Helm values to merge with defaults. */
|
|
22
|
+
readonly values?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/** External DNS component configuration with provider-specific auth. */
|
|
25
|
+
export interface IExternalDnsConfig extends IPlatformComponentConfig {
|
|
26
|
+
readonly dnsProvider: DnsProvider;
|
|
27
|
+
/** Provider-specific credentials (e.g., AWS IAM keys, Azure identity). */
|
|
28
|
+
readonly dnsCredentials?: Record<string, pulumi.Input<string>>;
|
|
29
|
+
/** DNS zone filter (e.g., ["reyem.tech"]). */
|
|
30
|
+
readonly domainFilters?: ReadonlyArray<string>;
|
|
31
|
+
}
|
|
32
|
+
/** Vault component configuration. */
|
|
33
|
+
export interface IVaultConfig extends IPlatformComponentConfig {
|
|
34
|
+
/** Enable HA mode. Default: false (single node). */
|
|
35
|
+
readonly ha?: boolean;
|
|
36
|
+
/** Storage size for Vault data. Default: "5Gi". */
|
|
37
|
+
readonly storageSize?: string;
|
|
38
|
+
/** Domain for Vault ingress (e.g., "vault.reyem.tech"). */
|
|
39
|
+
readonly ingressHost?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Platform stack configuration input.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const config: IPlatformStackConfig = {
|
|
47
|
+
* cluster,
|
|
48
|
+
* domain: "reyem.tech",
|
|
49
|
+
* externalDns: {
|
|
50
|
+
* dnsProvider: "route53",
|
|
51
|
+
* domainFilters: ["reyem.tech"],
|
|
52
|
+
* },
|
|
53
|
+
* vault: { enabled: true, ingressHost: "vault.reyem.tech" },
|
|
54
|
+
* };
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export interface IPlatformStackConfig {
|
|
58
|
+
readonly cluster: ICluster | ReadonlyArray<ICluster>;
|
|
59
|
+
readonly domain: string;
|
|
60
|
+
/** Core components (enabled by default). */
|
|
61
|
+
readonly traefik?: IPlatformComponentConfig;
|
|
62
|
+
readonly certManager?: IPlatformComponentConfig;
|
|
63
|
+
readonly externalDns?: IExternalDnsConfig;
|
|
64
|
+
/** Optional components. */
|
|
65
|
+
readonly argocd?: IPlatformComponentConfig;
|
|
66
|
+
readonly vault?: IVaultConfig;
|
|
67
|
+
readonly externalSecrets?: IPlatformComponentConfig;
|
|
68
|
+
readonly oauth2Proxy?: IPlatformComponentConfig & {
|
|
69
|
+
readonly provider: "google" | "github" | "azure";
|
|
70
|
+
readonly clientId: pulumi.Input<string>;
|
|
71
|
+
readonly clientSecret: pulumi.Input<string>;
|
|
72
|
+
};
|
|
73
|
+
readonly tags?: Readonly<Record<string, string>>;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Platform stack output — the deployed platform components.
|
|
77
|
+
*
|
|
78
|
+
* Each component is accessible as a Helm release for further customization.
|
|
79
|
+
*/
|
|
80
|
+
export interface IPlatformStack {
|
|
81
|
+
readonly name: string;
|
|
82
|
+
readonly cluster: ICluster;
|
|
83
|
+
readonly components: Readonly<Record<string, k8s.helm.v3.Release>>;
|
|
84
|
+
readonly traefikEndpoint: pulumi.Output<string>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/platform/interfaces.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,KAAK,MAAM,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,iDAAiD;AACjD,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,CAAC;AAEjB,mDAAmD;AACnD,MAAM,WAAW,wBAAwB;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAmB,SAAQ,wBAAwB;IAClE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/D,8CAA8C;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAChD;AAED,qCAAqC;AACrC,MAAM,WAAW,YAAa,SAAQ,wBAAwB;IAC5D,oDAAoD;IACpD,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IAChD,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAE1C,2BAA2B;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,WAAW,CAAC,EAAE,wBAAwB,GAAG;QAChD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;QACjD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACxC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KAC7C,CAAC;IAEF,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Platform stack interfaces for @reyemtech/nimbus.
|
|
4
|
+
*
|
|
5
|
+
* Cloud-agnostic platform components deployed via Helm to any ICluster.
|
|
6
|
+
* These are the components used across all 3 client environments:
|
|
7
|
+
* Traefik, ArgoCD, cert-manager, External DNS, Vault, External Secrets.
|
|
8
|
+
*
|
|
9
|
+
* @module platform/interfaces
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=interfaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/platform/interfaces.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform stack implementation — deploys Helm-based platform components
|
|
3
|
+
* to any ICluster.
|
|
4
|
+
*
|
|
5
|
+
* Components: Traefik, cert-manager, External DNS, ArgoCD, Vault,
|
|
6
|
+
* External Secrets Operator.
|
|
7
|
+
*
|
|
8
|
+
* @module platform/stack
|
|
9
|
+
*/
|
|
10
|
+
import type { IPlatformStack, IPlatformStackConfig } from "./interfaces";
|
|
11
|
+
/**
|
|
12
|
+
* Deploy a platform stack to one or more clusters.
|
|
13
|
+
*
|
|
14
|
+
* Installs cloud-agnostic Helm releases for ingress, TLS, DNS, GitOps,
|
|
15
|
+
* secrets management, and more. Each component can be individually
|
|
16
|
+
* enabled/disabled and configured.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const platform = createPlatformStack("prod", {
|
|
21
|
+
* cluster,
|
|
22
|
+
* domain: "reyem.tech",
|
|
23
|
+
* externalDns: {
|
|
24
|
+
* dnsProvider: "route53",
|
|
25
|
+
* domainFilters: ["reyem.tech"],
|
|
26
|
+
* },
|
|
27
|
+
* vault: { enabled: true, ingressHost: "vault.reyem.tech" },
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function createPlatformStack(name: string, config: IPlatformStackConfig): IPlatformStack | IPlatformStack[];
|
|
32
|
+
//# sourceMappingURL=stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/platform/stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAGV,cAAc,EACd,oBAAoB,EAErB,MAAM,cAAc,CAAC;AAYtB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,oBAAoB,GAC3B,cAAc,GAAG,cAAc,EAAE,CAUnC"}
|