puls-dev 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/bin/install-shell.d.ts +2 -0
  2. package/dist/bin/install-shell.js +136 -0
  3. package/dist/bin/puls.js +32 -10
  4. package/dist/core/checker.js +74 -0
  5. package/dist/core/decorators.js +17 -1
  6. package/dist/core/resource.d.ts +35 -0
  7. package/dist/core/resource.js +57 -1
  8. package/dist/core/stack.d.ts +11 -0
  9. package/dist/core/stack.js +88 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/providers/aws/api.js +3 -0
  12. package/dist/providers/aws/ec2.d.ts +5 -0
  13. package/dist/providers/aws/ec2.js +7 -0
  14. package/dist/providers/aws/lambda.d.ts +5 -0
  15. package/dist/providers/aws/lambda.js +24 -0
  16. package/dist/providers/aws/list.js +15 -3
  17. package/dist/providers/aws/rds.d.ts +9 -0
  18. package/dist/providers/aws/rds.js +19 -0
  19. package/dist/providers/do/database.d.ts +9 -0
  20. package/dist/providers/do/database.js +19 -0
  21. package/dist/providers/do/domain.js +1 -1
  22. package/dist/providers/do/droplet.d.ts +5 -0
  23. package/dist/providers/do/droplet.js +10 -0
  24. package/dist/providers/do/list.js +25 -2
  25. package/dist/providers/do/load_balancer.d.ts +5 -0
  26. package/dist/providers/do/load_balancer.js +7 -0
  27. package/dist/providers/do/vpc.d.ts +5 -0
  28. package/dist/providers/do/vpc.js +8 -0
  29. package/dist/providers/firebase/functions.d.ts +9 -0
  30. package/dist/providers/firebase/functions.js +28 -0
  31. package/dist/providers/firebase/list.js +34 -2
  32. package/dist/providers/gcp/api.js +6 -0
  33. package/dist/providers/gcp/cloudrun.d.ts +13 -0
  34. package/dist/providers/gcp/cloudrun.js +30 -0
  35. package/dist/providers/gcp/cloudsql.d.ts +9 -0
  36. package/dist/providers/gcp/cloudsql.js +20 -0
  37. package/dist/providers/gcp/list.js +12 -2
  38. package/dist/providers/gcp/vm.d.ts +5 -0
  39. package/dist/providers/gcp/vm.js +8 -0
  40. package/dist/providers/proxmox/list.js +8 -1
  41. package/dist/providers/proxmox/vm.d.ts +13 -0
  42. package/dist/providers/proxmox/vm.js +16 -0
  43. package/dist/types/diff.d.ts +17 -0
  44. package/dist/types/diff.js +1 -0
  45. package/dist/types/inventory.d.ts +65 -0
  46. package/package.json +2 -2
@@ -38,6 +38,9 @@ export class VMBuilder extends ProxmoxBaseBuilder {
38
38
  try {
39
39
  const config = await pm.get(`/nodes/${match.node}/qemu/${match.vmid}/config`);
40
40
  match.description = config.description ?? "";
41
+ match.cfgCores = config.cores;
42
+ match.cfgMemory = config.memory;
43
+ match.cfgMachine = config.machine ?? "q35";
41
44
  }
42
45
  catch (err) {
43
46
  console.warn(` ⚠️ Could not fetch VM config for ${match.vmid}: ${err.message}`);
@@ -105,6 +108,19 @@ export class VMBuilder extends ProxmoxBaseBuilder {
105
108
  this._forceConfigCheck = true;
106
109
  return this;
107
110
  }
111
+ getDiff(existing) {
112
+ const diffs = [];
113
+ if (existing.cfgCores !== undefined && existing.cfgCores !== this._cores) {
114
+ diffs.push({ field: "cores", declared: this._cores, live: existing.cfgCores });
115
+ }
116
+ if (existing.cfgMemory !== undefined && existing.cfgMemory !== this._memory) {
117
+ diffs.push({ field: "memory", declared: `${this._memory} MB`, live: `${existing.cfgMemory} MB` });
118
+ }
119
+ if (existing.cfgMachine !== undefined && this._machine !== existing.cfgMachine) {
120
+ diffs.push({ field: "machine", declared: this._machine, live: existing.cfgMachine });
121
+ }
122
+ return diffs;
123
+ }
108
124
  async deploy() {
109
125
  try {
110
126
  return await this._deploy();
@@ -0,0 +1,17 @@
1
+ export interface FieldDiff {
2
+ field: string;
3
+ declared: any;
4
+ live: any;
5
+ }
6
+ export type ResourceStatus = "missing" | "in-sync" | "drift" | "adopted";
7
+ export interface ResourceDiff {
8
+ prop: string;
9
+ resource: string;
10
+ status: ResourceStatus;
11
+ changes: FieldDiff[];
12
+ }
13
+ export interface StackDiff {
14
+ stackName: string;
15
+ resources: ResourceDiff[];
16
+ hasDrift: boolean;
17
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -6,8 +6,14 @@ export interface ProxmoxVm {
6
6
  maxmem: number;
7
7
  maxdisk: number;
8
8
  }
9
+ export interface ProxmoxTemplate {
10
+ name: string;
11
+ vmid: number;
12
+ node: string;
13
+ }
9
14
  export interface ProxmoxInventory {
10
15
  vms: ProxmoxVm[];
16
+ templates: ProxmoxTemplate[];
11
17
  }
12
18
  export interface DoDroplet {
13
19
  id: number;
@@ -34,11 +40,34 @@ export interface DoDomain {
34
40
  name: string;
35
41
  ttl: number;
36
42
  }
43
+ export interface DoDatabase {
44
+ id: string;
45
+ name: string;
46
+ engine: string;
47
+ region: string;
48
+ status: string;
49
+ nodeCount: number;
50
+ }
51
+ export interface DoApp {
52
+ id: string;
53
+ name: string;
54
+ liveUrl: string;
55
+ status: string;
56
+ }
57
+ export interface DoVpc {
58
+ id: string;
59
+ name: string;
60
+ region: string;
61
+ ipRange: string;
62
+ }
37
63
  export interface DoInventory {
38
64
  droplets: DoDroplet[];
39
65
  firewalls: DoFirewall[];
40
66
  loadBalancers: DoLoadBalancer[];
41
67
  domains: DoDomain[];
68
+ databases: DoDatabase[];
69
+ apps: DoApp[];
70
+ vpcs: DoVpc[];
42
71
  totalMonthlyCost: number;
43
72
  }
44
73
  export interface AwsDistribution {
@@ -67,6 +96,13 @@ export interface AwsHostedZone {
67
96
  id: string;
68
97
  recordCount: number;
69
98
  }
99
+ export interface AwsEc2Instance {
100
+ id: string;
101
+ name: string;
102
+ type: string;
103
+ state: string;
104
+ publicIp?: string;
105
+ }
70
106
  export interface AwsInventory {
71
107
  region: string;
72
108
  distributions: AwsDistribution[];
@@ -74,6 +110,7 @@ export interface AwsInventory {
74
110
  lambdas: AwsLambdaFn[];
75
111
  rdsInstances: AwsRdsInstance[];
76
112
  hostedZones: AwsHostedZone[];
113
+ ec2Instances: AwsEc2Instance[];
77
114
  }
78
115
  export interface GcpVM {
79
116
  name: string;
@@ -97,11 +134,19 @@ export interface GcpCloudDNS {
97
134
  name: string;
98
135
  dnsName: string;
99
136
  }
137
+ export interface GcpPubSubTopic {
138
+ name: string;
139
+ }
140
+ export interface GcpSecret {
141
+ name: string;
142
+ }
100
143
  export interface GcpInventory {
101
144
  vms: GcpVM[];
102
145
  rdsInstances: GcpCloudSQL[];
103
146
  distributions: GcpCloudRun[];
104
147
  hostedZones: GcpCloudDNS[];
148
+ pubSubTopics: GcpPubSubTopic[];
149
+ secrets: GcpSecret[];
105
150
  }
106
151
  export interface FirebaseHosting {
107
152
  site: string;
@@ -112,9 +157,29 @@ export interface FirebaseFunction {
112
157
  entryPoint: string;
113
158
  runtime: string;
114
159
  }
160
+ export interface FirebaseFirestoreDb {
161
+ name: string;
162
+ type: string;
163
+ state: string;
164
+ }
165
+ export interface FirebaseStorageBucket {
166
+ name: string;
167
+ location: string;
168
+ }
169
+ export interface FirebaseAuthProvider {
170
+ providerId: string;
171
+ }
172
+ export interface FirebaseRemoteConfig {
173
+ parameterCount: number;
174
+ version: string;
175
+ }
115
176
  export interface FirebaseInventory {
116
177
  hostingSites: FirebaseHosting[];
117
178
  functions: FirebaseFunction[];
179
+ firestoreDbs: FirebaseFirestoreDb[];
180
+ storageBuckets: FirebaseStorageBucket[];
181
+ authProviders: FirebaseAuthProvider[];
182
+ remoteConfig?: FirebaseRemoteConfig;
118
183
  }
119
184
  export interface InventoryError {
120
185
  provider: "proxmox" | "do" | "aws" | "gcp" | "firebase";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "puls-dev",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "Intent-driven infrastructure-as-code with eager discovery and no state files.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -60,7 +60,7 @@
60
60
  "devDependencies": {
61
61
  "@types/node": "^25.6.2",
62
62
  "ts-node": "^10.9.2",
63
- "tsx": "^4.21.0",
63
+ "tsx": "^4.22.4",
64
64
  "typescript": "^6.0.3"
65
65
  },
66
66
  "dependencies": {