@itssergio91/sandman 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.md +54 -272
  2. package/dist/cli/commands/cli-contract.test.d.ts +2 -0
  3. package/dist/cli/commands/cli-contract.test.d.ts.map +1 -0
  4. package/dist/cli/commands/cli-contract.test.js +217 -0
  5. package/dist/cli/commands/cli-contract.test.js.map +1 -0
  6. package/dist/cli/commands/connect.d.ts +1 -0
  7. package/dist/cli/commands/connect.d.ts.map +1 -1
  8. package/dist/cli/commands/connect.js +67 -42
  9. package/dist/cli/commands/connect.js.map +1 -1
  10. package/dist/cli/commands/create.d.ts +7 -2
  11. package/dist/cli/commands/create.d.ts.map +1 -1
  12. package/dist/cli/commands/create.js +158 -46
  13. package/dist/cli/commands/create.js.map +1 -1
  14. package/dist/cli/commands/destroy.d.ts.map +1 -1
  15. package/dist/cli/commands/destroy.js +27 -23
  16. package/dist/cli/commands/destroy.js.map +1 -1
  17. package/dist/cli/commands/doctor.d.ts +8 -0
  18. package/dist/cli/commands/doctor.d.ts.map +1 -0
  19. package/dist/cli/commands/doctor.js +124 -0
  20. package/dist/cli/commands/doctor.js.map +1 -0
  21. package/dist/cli/commands/enable.d.ts +1 -2
  22. package/dist/cli/commands/enable.d.ts.map +1 -1
  23. package/dist/cli/commands/enable.js +75 -46
  24. package/dist/cli/commands/enable.js.map +1 -1
  25. package/dist/cli/commands/init.d.ts +2 -2
  26. package/dist/cli/commands/init.d.ts.map +1 -1
  27. package/dist/cli/commands/init.js +49 -17
  28. package/dist/cli/commands/init.js.map +1 -1
  29. package/dist/cli/commands/list.d.ts.map +1 -1
  30. package/dist/cli/commands/list.js +25 -18
  31. package/dist/cli/commands/list.js.map +1 -1
  32. package/dist/cli/commands/providers.d.ts +6 -0
  33. package/dist/cli/commands/providers.d.ts.map +1 -0
  34. package/dist/cli/commands/providers.js +20 -0
  35. package/dist/cli/commands/providers.js.map +1 -0
  36. package/dist/cli/commands/status.d.ts.map +1 -1
  37. package/dist/cli/commands/status.js +88 -50
  38. package/dist/cli/commands/status.js.map +1 -1
  39. package/dist/cli/env-name.d.ts +7 -0
  40. package/dist/cli/env-name.d.ts.map +1 -0
  41. package/dist/cli/env-name.js +9 -0
  42. package/dist/cli/env-name.js.map +1 -0
  43. package/dist/cli/env-name.test.d.ts +2 -0
  44. package/dist/cli/env-name.test.d.ts.map +1 -0
  45. package/dist/cli/env-name.test.js +38 -0
  46. package/dist/cli/env-name.test.js.map +1 -0
  47. package/dist/cli/index.d.ts.map +1 -1
  48. package/dist/cli/index.js +43 -11
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/output.d.ts +28 -0
  51. package/dist/cli/output.d.ts.map +1 -0
  52. package/dist/cli/output.js +60 -0
  53. package/dist/cli/output.js.map +1 -0
  54. package/dist/cli/output.test.d.ts +2 -0
  55. package/dist/cli/output.test.d.ts.map +1 -0
  56. package/dist/cli/output.test.js +78 -0
  57. package/dist/cli/output.test.js.map +1 -0
  58. package/dist/cli/reap.d.ts +11 -0
  59. package/dist/cli/reap.d.ts.map +1 -0
  60. package/dist/cli/reap.js +32 -0
  61. package/dist/cli/reap.js.map +1 -0
  62. package/dist/cli/secrets.d.ts +8 -0
  63. package/dist/cli/secrets.d.ts.map +1 -0
  64. package/dist/cli/secrets.js +30 -0
  65. package/dist/cli/secrets.js.map +1 -0
  66. package/dist/core/state-store.d.ts +15 -1
  67. package/dist/core/state-store.d.ts.map +1 -1
  68. package/dist/core/state-store.js +168 -33
  69. package/dist/core/state-store.js.map +1 -1
  70. package/dist/core/state-store.test.js +40 -0
  71. package/dist/core/state-store.test.js.map +1 -1
  72. package/dist/index.js +0 -0
  73. package/dist/providers/aws/adapter.d.ts +13 -2
  74. package/dist/providers/aws/adapter.d.ts.map +1 -1
  75. package/dist/providers/aws/adapter.js +402 -63
  76. package/dist/providers/aws/adapter.js.map +1 -1
  77. package/dist/providers/aws/adapter.test.js +300 -191
  78. package/dist/providers/aws/adapter.test.js.map +1 -1
  79. package/dist/providers/base.d.ts +1 -9
  80. package/dist/providers/base.d.ts.map +1 -1
  81. package/dist/providers/base.js.map +1 -1
  82. package/dist/providers/base.test.js +12 -2
  83. package/dist/providers/base.test.js.map +1 -1
  84. package/dist/providers/catalog.d.ts +15 -0
  85. package/dist/providers/catalog.d.ts.map +1 -0
  86. package/dist/providers/catalog.js +53 -0
  87. package/dist/providers/catalog.js.map +1 -0
  88. package/dist/providers/cloudflare/adapter.d.ts +5 -2
  89. package/dist/providers/cloudflare/adapter.d.ts.map +1 -1
  90. package/dist/providers/cloudflare/adapter.js +17 -5
  91. package/dist/providers/cloudflare/adapter.js.map +1 -1
  92. package/dist/providers/cloudflare/adapter.test.js +4 -4
  93. package/dist/providers/cloudflare/adapter.test.js.map +1 -1
  94. package/dist/providers/enable-result.d.ts +9 -0
  95. package/dist/providers/enable-result.d.ts.map +1 -0
  96. package/dist/providers/enable-result.js +26 -0
  97. package/dist/providers/enable-result.js.map +1 -0
  98. package/dist/providers/gcp/adapter.d.ts +9 -3
  99. package/dist/providers/gcp/adapter.d.ts.map +1 -1
  100. package/dist/providers/gcp/adapter.js +115 -20
  101. package/dist/providers/gcp/adapter.js.map +1 -1
  102. package/dist/providers/gcp/adapter.test.js +52 -0
  103. package/dist/providers/gcp/adapter.test.js.map +1 -1
  104. package/dist/providers/index.d.ts +5 -2
  105. package/dist/providers/index.d.ts.map +1 -1
  106. package/dist/providers/index.js +13 -0
  107. package/dist/providers/index.js.map +1 -1
  108. package/dist/providers/vercel/adapter.d.ts +5 -2
  109. package/dist/providers/vercel/adapter.d.ts.map +1 -1
  110. package/dist/providers/vercel/adapter.js +17 -5
  111. package/dist/providers/vercel/adapter.js.map +1 -1
  112. package/dist/providers/vercel/adapter.test.js +4 -4
  113. package/dist/providers/vercel/adapter.test.js.map +1 -1
  114. package/dist/types/index.d.ts +40 -1
  115. package/dist/types/index.d.ts.map +1 -1
  116. package/dist/types/index.js +4 -0
  117. package/dist/types/index.js.map +1 -1
  118. package/dist/utils/cost-estimator.d.ts +2 -0
  119. package/dist/utils/cost-estimator.d.ts.map +1 -1
  120. package/dist/utils/cost-estimator.js +23 -0
  121. package/dist/utils/cost-estimator.js.map +1 -1
  122. package/dist/utils/cost-estimator.test.js +16 -1
  123. package/dist/utils/cost-estimator.test.js.map +1 -1
  124. package/dist/utils/logger.d.ts +8 -0
  125. package/dist/utils/logger.d.ts.map +1 -0
  126. package/dist/utils/logger.js +12 -0
  127. package/dist/utils/logger.js.map +1 -0
  128. package/dist/utils/ttl.d.ts +13 -0
  129. package/dist/utils/ttl.d.ts.map +1 -0
  130. package/dist/utils/ttl.js +35 -0
  131. package/dist/utils/ttl.js.map +1 -0
  132. package/dist/utils/ttl.test.d.ts +2 -0
  133. package/dist/utils/ttl.test.d.ts.map +1 -0
  134. package/dist/utils/ttl.test.js +27 -0
  135. package/dist/utils/ttl.test.js.map +1 -0
  136. package/package.json +12 -5
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC5D,cAAc,CACZ,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/D;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ/C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOtD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKlD,CAAC"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEvE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQ/C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK/C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOtD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKlD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE,wBAAwB;IACjC,QAAQ,EAAE,oBAAoB;IAC9B,GAAG,EAAE,oBAAoB;IACzB,MAAM,EAAE,uBAAuB;IAC/B,SAAS,EAAE,0BAA0B;IACrC,gBAAgB,EAAE,iCAAiC;CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,iBAAiB,EAAE,iBAAiB;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;CACrB,CAAC"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE,wBAAwB;IACjC,QAAQ,EAAE,oBAAoB;IAC9B,GAAG,EAAE,oBAAoB;IACzB,MAAM,EAAE,uBAAuB;IAC/B,SAAS,EAAE,0BAA0B;IACrC,gBAAgB,EAAE,iCAAiC;CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAA2B;IAClD,GAAG,EAAE,KAAK;IACV,EAAE,EAAE,IAAI;IACR,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IACzD,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,IAAI;IACR,iBAAiB,EAAE,iBAAiB;CACrC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;CACrB,CAAC"}
@@ -12,7 +12,12 @@ describe('ProviderAdapter (interface contract)', () => {
12
12
  createdAt: new Date().toISOString(),
13
13
  updatedAt: new Date().toISOString(),
14
14
  }),
15
- enableServices: async () => { },
15
+ enableServices: async () => ({
16
+ mode: "cloud",
17
+ recorded: [],
18
+ provisioned: [],
19
+ localOnly: [],
20
+ }),
16
21
  connect: async () => ({}),
17
22
  destroyEnvironment: async () => { },
18
23
  getStatus: async (env) => env,
@@ -36,7 +41,12 @@ describe('ProviderAdapter (interface contract)', () => {
36
41
  createdAt: new Date().toISOString(),
37
42
  updatedAt: new Date().toISOString(),
38
43
  }),
39
- enableServices: async () => { },
44
+ enableServices: async () => ({
45
+ mode: "cloud",
46
+ recorded: [],
47
+ provisioned: [],
48
+ localOnly: [],
49
+ }),
40
50
  connect: async () => ({}),
41
51
  destroyEnvironment: async () => { },
42
52
  getStatus: async (env) => env,
@@ -1 +1 @@
1
- {"version":3,"file":"base.test.js","sourceRoot":"","sources":["../../src/providers/base.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAI9C,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAoB;YAC/B,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YACpB,iBAAiB,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI;gBACJ,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACzB,kBAAkB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YAClC,SAAS,EAAE,KAAK,EAAE,GAAsB,EAAE,EAAE,CAAC,GAAG;SACjD,CAAC;QAEF,MAAM,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,CAAC,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,CAAC,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,OAAO,GAAoB;YAC/B,IAAI,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YACpB,iBAAiB,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;gBAC1C,IAAI;gBACJ,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,QAAQ;gBAChB,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,cAAc,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YAC9B,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACzB,kBAAkB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YAClC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG;SAC9B,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"base.test.js","sourceRoot":"","sources":["../../src/providers/base.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { ProviderType } from "../types/index.js";
2
+ export type ProviderMaturity = "supported" | "experimental";
3
+ export interface ProviderInfo {
4
+ id: ProviderType;
5
+ maturity: ProviderMaturity;
6
+ services: string[];
7
+ auth: string;
8
+ notes: string;
9
+ }
10
+ export declare const PROVIDER_CATALOG: ProviderInfo[];
11
+ export declare const SERVICES_BY_PROVIDER: Record<ProviderType, string[]>;
12
+ export declare function getProviderInfo(id: string): ProviderInfo | undefined;
13
+ export declare function parseProvider(value: string): ProviderType | undefined;
14
+ export declare function experimentalWarning(id: ProviderType): string | undefined;
15
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/providers/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQjD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,cAAc,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,YAAY,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,EAAE,YAAY,EA6B1C,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAK/D,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEpE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAGrE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAMxE"}
@@ -0,0 +1,53 @@
1
+ import { ProviderType } from "../types/index.js";
2
+ import { AWS_SERVICES, CLOUDFLARE_SERVICES, GCP_SERVICES, VERCEL_SERVICES, } from "./base.js";
3
+ export const PROVIDER_CATALOG = [
4
+ {
5
+ id: "aws",
6
+ maturity: "supported",
7
+ services: Object.keys(AWS_SERVICES),
8
+ auth: "aws configure, or AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY",
9
+ notes: "Provisions sandbox resources (S3, VPC, IAM, optional EC2) in an existing AWS account.",
10
+ },
11
+ {
12
+ id: "gcp",
13
+ maturity: "supported",
14
+ services: Object.keys(GCP_SERVICES),
15
+ auth: "gcloud auth application-default login, or GOOGLE_APPLICATION_CREDENTIALS",
16
+ notes: "Creates a GCP project and links billing when a billing account can be resolved. Requires a billing account for APIs to work.",
17
+ },
18
+ {
19
+ id: "cloudflare",
20
+ maturity: "experimental",
21
+ services: Object.keys(CLOUDFLARE_SERVICES),
22
+ auth: "CLOUDFLARE_API_TOKEN (+ optional CLOUDFLARE_ACCOUNT_ID)",
23
+ notes: "Authenticates and registers a local environment. Cloud resource provisioning is not implemented yet.",
24
+ },
25
+ {
26
+ id: "vercel",
27
+ maturity: "experimental",
28
+ services: Object.keys(VERCEL_SERVICES),
29
+ auth: "VERCEL_TOKEN (+ optional VERCEL_TEAM_ID)",
30
+ notes: "Authenticates and registers a local environment. Cloud resource provisioning is not implemented yet.",
31
+ },
32
+ ];
33
+ export const SERVICES_BY_PROVIDER = {
34
+ aws: Object.keys(AWS_SERVICES),
35
+ gcp: Object.keys(GCP_SERVICES),
36
+ cloudflare: Object.keys(CLOUDFLARE_SERVICES),
37
+ vercel: Object.keys(VERCEL_SERVICES),
38
+ };
39
+ export function getProviderInfo(id) {
40
+ return PROVIDER_CATALOG.find((p) => p.id === id);
41
+ }
42
+ export function parseProvider(value) {
43
+ const parsed = ProviderType.safeParse(value);
44
+ return parsed.success ? parsed.data : undefined;
45
+ }
46
+ export function experimentalWarning(id) {
47
+ const info = getProviderInfo(id);
48
+ if (info?.maturity !== "experimental") {
49
+ return undefined;
50
+ }
51
+ return `${id} is experimental: ${info.notes}`;
52
+ }
53
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/providers/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,eAAe,GAChB,MAAM,WAAW,CAAC;AAYnB,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C;QACE,EAAE,EAAE,KAAK;QACT,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC,IAAI,EAAE,6DAA6D;QACnE,KAAK,EAAE,uFAAuF;KAC/F;IACD;QACE,EAAE,EAAE,KAAK;QACT,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACnC,IAAI,EAAE,0EAA0E;QAChF,KAAK,EAAE,8HAA8H;KACtI;IACD;QACE,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;QAC1C,IAAI,EAAE,yDAAyD;QAC/D,KAAK,EAAE,sGAAsG;KAC9G;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,QAAQ,EAAE,cAAc;QACxB,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;QACtC,IAAI,EAAE,0CAA0C;QAChD,KAAK,EAAE,sGAAsG;KAC9G;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAmC;IAClE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;CACrC,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,EAAgB;IAClD,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,IAAI,EAAE,QAAQ,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,EAAE,qBAAqB,IAAI,CAAC,KAAK,EAAE,CAAC;AAChD,CAAC"}
@@ -1,10 +1,13 @@
1
1
  import { ProviderAdapter } from "../base.js";
2
- import { EnvironmentRecord, ServiceName } from "../../types/index.js";
2
+ import { EnableResult, EnvironmentRecord, ServiceName } from "../../types/index.js";
3
3
  export declare class CloudflareAdapter implements ProviderAdapter {
4
4
  private accountId;
5
+ private region;
6
+ setRegion(region: string): void;
5
7
  init(): Promise<void>;
6
8
  createEnvironment(name: string): Promise<EnvironmentRecord>;
7
- enableServices(env: EnvironmentRecord, services: ServiceName[]): Promise<void>;
9
+ enableServices(env: EnvironmentRecord, services: ServiceName[]): Promise<EnableResult>;
10
+ whoami(): Promise<Record<string, string | null | undefined>>;
8
11
  connect(env: EnvironmentRecord): Promise<Record<string, string>>;
9
12
  destroyEnvironment(env: EnvironmentRecord): Promise<void>;
10
13
  getStatus(env: EnvironmentRecord): Promise<EnvironmentRecord>;
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/cloudflare/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEtE,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,SAAS,CAAuB;IAElC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CrB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkB3D,cAAc,CAClB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC;IAOV,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAkBhE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpE"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/cloudflare/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAClE,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAI9B,qBAAa,iBAAkB,YAAW,eAAe;IACvD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,MAAM,CAAqB;IAEnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CrB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmB3D,cAAc,CAClB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,YAAY,CAAC;IAYlB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAQ5D,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAehE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzD,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAGpE"}
@@ -1,6 +1,12 @@
1
1
  import { CLOUDFLARE_SERVICES } from "../base.js";
2
+ import { localOnlyEnable } from "../enable-result.js";
3
+ import { logger } from "../../utils/logger.js";
2
4
  export class CloudflareAdapter {
3
5
  accountId = null;
6
+ region;
7
+ setRegion(region) {
8
+ this.region = region;
9
+ }
4
10
  async init() {
5
11
  const apiToken = process.env.CLOUDFLARE_API_TOKEN;
6
12
  const accountId = process.env.CLOUDFLARE_ACCOUNT_ID;
@@ -44,6 +50,7 @@ export class CloudflareAdapter {
44
50
  name,
45
51
  provider: "cloudflare",
46
52
  accountId: process.env.CLOUDFLARE_ACCOUNT_ID || undefined,
53
+ region: this.region,
47
54
  status: "active",
48
55
  services: [],
49
56
  resources: {
@@ -57,7 +64,15 @@ export class CloudflareAdapter {
57
64
  const enabledServices = services
58
65
  .map((s) => CLOUDFLARE_SERVICES[s])
59
66
  .filter(Boolean);
60
- console.log(`Enabling Cloudflare services: ${enabledServices.join(", ")}`);
67
+ logger.info(`Enabling Cloudflare services: ${enabledServices.join(", ")}`);
68
+ return localOnlyEnable("cloudflare", services.filter((s) => CLOUDFLARE_SERVICES[s]), "cloudflare is experimental: enable records services locally and does not provision cloud resources.");
69
+ }
70
+ async whoami() {
71
+ return {
72
+ provider: "cloudflare",
73
+ accountId: this.accountId,
74
+ token: process.env.CLOUDFLARE_API_TOKEN ? "set" : "missing",
75
+ };
61
76
  }
62
77
  async connect(env) {
63
78
  const result = {
@@ -66,16 +81,13 @@ export class CloudflareAdapter {
66
81
  if (env.accountId) {
67
82
  result.CLOUDFLARE_ACCOUNT_ID = env.accountId;
68
83
  }
69
- if (process.env.CLOUDFLARE_API_TOKEN) {
70
- result.CLOUDFLARE_API_TOKEN = process.env.CLOUDFLARE_API_TOKEN;
71
- }
72
84
  if (env.resources.namespaceId) {
73
85
  result.CLOUDFLARE_NAMESPACE_ID = env.resources.namespaceId;
74
86
  }
75
87
  return result;
76
88
  }
77
89
  async destroyEnvironment(env) {
78
- console.log(`Cleaning up Cloudflare resources for environment: ${env.name}`);
90
+ logger.info(`Cleaning up Cloudflare resources for environment: ${env.name}`);
79
91
  // Future: delete KV namespaces, R2 buckets, D1 databases via API
80
92
  }
81
93
  async getStatus(env) {
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/providers/cloudflare/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/providers/cloudflare/adapter.ts"],"names":[],"mappings":"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"}
@@ -76,7 +76,7 @@ describe("CloudflareAdapter", () => {
76
76
  createdAt: new Date().toISOString(),
77
77
  updatedAt: new Date().toISOString(),
78
78
  };
79
- const consoleSpy = vi.spyOn(console, "log");
79
+ const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
80
80
  await adapter.enableServices(env, ["workers", "kv", "d1"]);
81
81
  expect(consoleSpy).toHaveBeenCalledWith("Enabling Cloudflare services: workers, kv, d1");
82
82
  consoleSpy.mockRestore();
@@ -91,7 +91,7 @@ describe("CloudflareAdapter", () => {
91
91
  createdAt: new Date().toISOString(),
92
92
  updatedAt: new Date().toISOString(),
93
93
  };
94
- const consoleSpy = vi.spyOn(console, "log");
94
+ const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
95
95
  await adapter.enableServices(env, ["invalid-service"]);
96
96
  expect(consoleSpy).toHaveBeenCalledWith("Enabling Cloudflare services: ");
97
97
  consoleSpy.mockRestore();
@@ -114,7 +114,7 @@ describe("CloudflareAdapter", () => {
114
114
  const creds = await adapter.connect(env);
115
115
  expect(creds.provider).toBe("cloudflare");
116
116
  expect(creds.CLOUDFLARE_ACCOUNT_ID).toBe("my-account");
117
- expect(creds.CLOUDFLARE_API_TOKEN).toBe("my-token");
117
+ expect(creds.CLOUDFLARE_API_TOKEN).toBeUndefined();
118
118
  expect(creds.CLOUDFLARE_NAMESPACE_ID).toBe("ns-123");
119
119
  });
120
120
  it("should work without optional fields", async () => {
@@ -143,7 +143,7 @@ describe("CloudflareAdapter", () => {
143
143
  createdAt: new Date().toISOString(),
144
144
  updatedAt: new Date().toISOString(),
145
145
  };
146
- const consoleSpy = vi.spyOn(console, "log");
146
+ const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
147
147
  await adapter.destroyEnvironment(env);
148
148
  expect(consoleSpy).toHaveBeenCalledWith("Cleaning up Cloudflare resources for environment: test");
149
149
  consoleSpy.mockRestore();
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../../src/providers/cloudflare/adapter.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../../src/providers/cloudflare/adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { EnableResult, ServiceName } from "../types/index.js";
2
+ export declare function enableResult(opts: {
3
+ recorded: ServiceName[];
4
+ provisioned: ServiceName[];
5
+ localOnly: ServiceName[];
6
+ warnings?: string[];
7
+ }): EnableResult;
8
+ export declare function localOnlyEnable(provider: string, services: ServiceName[], reason: string): EnableResult;
9
+ //# sourceMappingURL=enable-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable-result.d.ts","sourceRoot":"","sources":["../../src/providers/enable-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,YAAY,CAef;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,EAAE,MAAM,GACb,YAAY,CAOd"}
@@ -0,0 +1,26 @@
1
+ export function enableResult(opts) {
2
+ const { recorded, provisioned, localOnly, warnings } = opts;
3
+ let mode = "cloud";
4
+ if (localOnly.length > 0 && provisioned.length > 0) {
5
+ mode = "mixed";
6
+ }
7
+ else if (localOnly.length > 0) {
8
+ mode = "local-only";
9
+ }
10
+ return {
11
+ mode,
12
+ recorded,
13
+ provisioned,
14
+ localOnly,
15
+ ...(warnings?.length ? { warnings } : {}),
16
+ };
17
+ }
18
+ export function localOnlyEnable(provider, services, reason) {
19
+ return enableResult({
20
+ recorded: services,
21
+ provisioned: [],
22
+ localOnly: services,
23
+ warnings: [reason],
24
+ });
25
+ }
26
+ //# sourceMappingURL=enable-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable-result.js","sourceRoot":"","sources":["../../src/providers/enable-result.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,IAK5B;IACC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5D,IAAI,IAAI,GAAyB,OAAO,CAAC;IACzC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,IAAI,GAAG,OAAO,CAAC;IACjB,CAAC;SAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,YAAY,CAAC;IACtB,CAAC;IACD,OAAO;QACL,IAAI;QACJ,QAAQ;QACR,WAAW;QACX,SAAS;QACT,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,QAAuB,EACvB,MAAc;IAEd,OAAO,YAAY,CAAC;QAClB,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB,CAAC,CAAC;AACL,CAAC"}
@@ -1,17 +1,23 @@
1
1
  import { ProviderAdapter } from "../base.js";
2
- import { EnvironmentRecord, ServiceName } from "../../types/index.js";
2
+ import { EnableResult, EnvironmentRecord, ServiceName } from "../../types/index.js";
3
3
  export declare class GcpAdapter implements ProviderAdapter {
4
4
  private projectId;
5
5
  private projectNumber;
6
6
  private billingAccountId;
7
+ private region;
8
+ setRegion(region: string): void;
9
+ setBillingAccount(accountId: string): void;
10
+ getBillingAccount(): string | null;
7
11
  init(): Promise<void>;
12
+ discoverBillingAccount(): Promise<string | null>;
13
+ whoami(): Promise<Record<string, string | null | undefined>>;
8
14
  createEnvironment(name: string): Promise<EnvironmentRecord>;
15
+ private lookupBillingAccount;
9
16
  private linkBillingAccount;
10
- enableServices(env: EnvironmentRecord, services: ServiceName[]): Promise<void>;
17
+ enableServices(env: EnvironmentRecord, services: ServiceName[]): Promise<EnableResult>;
11
18
  connect(env: EnvironmentRecord): Promise<Record<string, string>>;
12
19
  destroyEnvironment(env: EnvironmentRecord): Promise<void>;
13
20
  getStatus(env: EnvironmentRecord): Promise<EnvironmentRecord>;
14
- setBillingAccount(accountId: string): void;
15
21
  getProjectId(): string | null;
16
22
  getProjectNumber(): string | null;
17
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/gcp/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEtE,qBAAa,UAAW,YAAW,eAAe;IAChD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAEzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CrB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YA0DnD,kBAAkB;IAuB1B,cAAc,CAClB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC;IAiCV,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAYhE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBzD,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmDnE,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,gBAAgB,IAAI,MAAM,GAAG,IAAI;CAGlC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/providers/gcp/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AAC3D,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACZ,MAAM,sBAAsB,CAAC;AAQ9B,qBAAa,UAAW,YAAW,eAAe;IAChD,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,MAAM,CAAqB;IAEnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI1C,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAI5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDrB,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAgBhD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAS5D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAuEnD,oBAAoB;YAuCpB,kBAAkB;IAsB1B,cAAc,CAClB,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,YAAY,CAAC;IA2ClB,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAYhE,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BzD,SAAS,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsDnE,YAAY,IAAI,MAAM,GAAG,IAAI;IAI7B,gBAAgB,IAAI,MAAM,GAAG,IAAI;CAGlC"}
@@ -1,8 +1,23 @@
1
1
  import { GCP_SERVICES } from "../base.js";
2
+ import { enableResult } from "../enable-result.js";
3
+ import { logger } from "../../utils/logger.js";
4
+ function normalizeBillingAccountId(raw) {
5
+ return raw.replace(/^billingAccounts\//, "");
6
+ }
2
7
  export class GcpAdapter {
3
8
  projectId = null;
4
9
  projectNumber = null;
5
10
  billingAccountId = null;
11
+ region;
12
+ setRegion(region) {
13
+ this.region = region;
14
+ }
15
+ setBillingAccount(accountId) {
16
+ this.billingAccountId = normalizeBillingAccountId(accountId);
17
+ }
18
+ getBillingAccount() {
19
+ return this.billingAccountId;
20
+ }
6
21
  async init() {
7
22
  try {
8
23
  const { ProjectsClient } = await import("@google-cloud/resource-manager");
@@ -24,6 +39,7 @@ export class GcpAdapter {
24
39
  }
25
40
  else if (projects.length > 0 && projects[0].projectId) {
26
41
  this.projectId = projects[0].projectId;
42
+ logger.warn(`No GCP_PROJECT / GOOGLE_CLOUD_PROJECT set; using first accessible project "${this.projectId}". Set GCP_PROJECT to avoid targeting the wrong project.`);
27
43
  }
28
44
  else {
29
45
  // Auth works but no projects - user needs to create one or set GCP_PROJECT
@@ -42,52 +58,120 @@ export class GcpAdapter {
42
58
  throw error;
43
59
  }
44
60
  }
61
+ async discoverBillingAccount() {
62
+ if (this.billingAccountId) {
63
+ return this.billingAccountId;
64
+ }
65
+ const fromEnv = process.env.GCP_BILLING_ACCOUNT;
66
+ if (fromEnv) {
67
+ this.billingAccountId = normalizeBillingAccountId(fromEnv);
68
+ return this.billingAccountId;
69
+ }
70
+ const discovered = await this.lookupBillingAccount(this.projectId);
71
+ if (discovered) {
72
+ this.billingAccountId = discovered;
73
+ }
74
+ return this.billingAccountId;
75
+ }
76
+ async whoami() {
77
+ return {
78
+ provider: "gcp",
79
+ projectId: this.projectId,
80
+ region: this.region,
81
+ billingAccount: this.billingAccountId,
82
+ };
83
+ }
45
84
  async createEnvironment(name) {
46
85
  if (!this.projectId) {
47
86
  throw new Error("No GCP project configured. Set GCP_PROJECT environment variable or run 'gcloud config set project PROJECT_ID'");
48
87
  }
49
- // Generate a unique project ID for the sandman environment
88
+ const parentProjectId = this.projectId;
50
89
  const timestamp = Date.now();
51
90
  const sandmanProjectId = `sandman-${name}-${timestamp}`;
52
91
  try {
53
92
  const { ProjectsClient } = await import("@google-cloud/resource-manager");
54
93
  const resourceManagerClient = new ProjectsClient();
55
- // Create the project
56
94
  const [operation] = await resourceManagerClient.createProject({
57
95
  project: {
58
96
  projectId: sandmanProjectId,
59
97
  name: `Sandman Environment: ${name}`,
60
98
  },
61
99
  });
62
- // Wait for the operation to complete
63
- const [projectOperation] = await operation.promise();
64
- // Get the project details to get the project number
100
+ await operation.promise();
65
101
  const [project] = await resourceManagerClient.getProject({
66
102
  name: `projects/${sandmanProjectId}`,
67
103
  });
68
- // Store the project ID and number
69
104
  this.projectId = sandmanProjectId;
70
105
  this.projectNumber = project.projectNumber?.toString() || null;
71
- // Link billing account if provided
106
+ const billingId = this.billingAccountId ||
107
+ (await this.lookupBillingAccount(parentProjectId));
108
+ if (billingId) {
109
+ this.billingAccountId = billingId;
110
+ }
111
+ let billingError;
72
112
  if (this.billingAccountId) {
73
- await this.linkBillingAccount(sandmanProjectId);
113
+ try {
114
+ await this.linkBillingAccount(sandmanProjectId);
115
+ }
116
+ catch (error) {
117
+ billingError = error.message ?? String(error);
118
+ }
119
+ }
120
+ else {
121
+ billingError =
122
+ "No billing account linked. Pass --billing-account, set GCP_BILLING_ACCOUNT, or enable billing on the parent project. GCP APIs cannot be enabled until billing is linked.";
74
123
  }
75
124
  const now = new Date().toISOString();
76
125
  return {
77
126
  name,
78
127
  provider: "gcp",
79
128
  projectId: sandmanProjectId,
80
- status: "active",
129
+ region: this.region,
130
+ billingAccount: this.billingAccountId || undefined,
131
+ status: billingError ? "failed" : "active",
81
132
  services: [],
82
133
  resources: {},
83
134
  createdAt: now,
84
135
  updatedAt: now,
136
+ error: billingError,
85
137
  };
86
138
  }
87
139
  catch (error) {
88
140
  throw new Error(`Failed to create GCP project: ${error.message ?? "Unknown error"}`);
89
141
  }
90
142
  }
143
+ async lookupBillingAccount(parentProjectId) {
144
+ try {
145
+ const { CloudBillingClient } = await import("@google-cloud/billing");
146
+ const billingClient = new CloudBillingClient();
147
+ if (parentProjectId) {
148
+ try {
149
+ const [info] = await billingClient.getProjectBillingInfo({
150
+ name: `projects/${parentProjectId}`,
151
+ });
152
+ const name = info?.billingAccountName;
153
+ if (info?.billingEnabled && name) {
154
+ return normalizeBillingAccountId(name);
155
+ }
156
+ }
157
+ catch {
158
+ // Parent may not have billing; fall through to account list.
159
+ }
160
+ }
161
+ const [accounts] = await billingClient.listBillingAccounts({});
162
+ const open = (accounts ?? []).filter((account) => account.open);
163
+ if (open.length === 1 && open[0].name) {
164
+ return normalizeBillingAccountId(open[0].name);
165
+ }
166
+ if (open.length > 1) {
167
+ logger.warn(`Found ${open.length} open GCP billing accounts. Pass --billing-account to choose one.`);
168
+ }
169
+ }
170
+ catch (error) {
171
+ logger.warn(`Could not discover a GCP billing account: ${error.message ?? String(error)}`);
172
+ }
173
+ return null;
174
+ }
91
175
  async linkBillingAccount(projectId) {
92
176
  if (!this.billingAccountId) {
93
177
  return;
@@ -95,7 +179,6 @@ export class GcpAdapter {
95
179
  try {
96
180
  const { CloudBillingClient } = await import("@google-cloud/billing");
97
181
  const billingClient = new CloudBillingClient();
98
- // Update project billing info to link the billing account
99
182
  await billingClient.updateProjectBillingInfo({
100
183
  name: `projects/${projectId}`,
101
184
  projectBillingInfo: {
@@ -114,18 +197,27 @@ export class GcpAdapter {
114
197
  try {
115
198
  const { ServiceUsageClient } = await import("@google-cloud/service-usage");
116
199
  const serviceUsageClient = new ServiceUsageClient();
117
- const serviceNames = services.map((s) => GCP_SERVICES[s]).filter(Boolean);
118
- if (serviceNames.length === 0) {
119
- return;
200
+ const recorded = services.filter((s) => GCP_SERVICES[s]);
201
+ if (recorded.length === 0) {
202
+ return enableResult({
203
+ recorded: [],
204
+ provisioned: [],
205
+ localOnly: [],
206
+ });
120
207
  }
121
- console.log(`Enabling GCP services: ${serviceNames.join(", ")}`);
122
- // Enable each service
208
+ const serviceNames = recorded.map((s) => GCP_SERVICES[s]);
209
+ logger.info(`Enabling GCP services: ${serviceNames.join(", ")}`);
123
210
  for (const serviceName of serviceNames) {
124
211
  const request = {
125
212
  name: `projects/${env.projectId}/services/${serviceName}`,
126
213
  };
127
214
  await serviceUsageClient.enableService(request);
128
215
  }
216
+ return enableResult({
217
+ recorded,
218
+ provisioned: recorded,
219
+ localOnly: [],
220
+ });
129
221
  }
130
222
  catch (error) {
131
223
  throw new Error(`Failed to enable GCP services: ${error.message ?? "Unknown error"}`);
@@ -144,6 +236,9 @@ export class GcpAdapter {
144
236
  if (!env.projectId) {
145
237
  throw new Error("Project ID is required to destroy environment");
146
238
  }
239
+ if (!env.projectId.startsWith("sandman-")) {
240
+ throw new Error(`Refusing to delete GCP project "${env.projectId}" because it was not created by Sandman (expected sandman- prefix).`);
241
+ }
147
242
  try {
148
243
  const { ProjectsClient } = await import("@google-cloud/resource-manager");
149
244
  const resourceManagerClient = new ProjectsClient();
@@ -153,7 +248,7 @@ export class GcpAdapter {
153
248
  });
154
249
  // Wait for the operation to complete
155
250
  await operation.promise();
156
- console.log(`Deleted GCP project: ${env.projectId}`);
251
+ logger.info(`Deleted GCP project: ${env.projectId}`);
157
252
  }
158
253
  catch (error) {
159
254
  throw new Error(`Failed to delete GCP project: ${error.message ?? "Unknown error"}`);
@@ -179,7 +274,10 @@ export class GcpAdapter {
179
274
  const lifecycleState = project.lifecycleState;
180
275
  switch (lifecycleState) {
181
276
  case "ACTIVE":
182
- status = "active";
277
+ status =
278
+ !env.billingAccount && /billing/i.test(env.error || "")
279
+ ? "failed"
280
+ : "active";
183
281
  break;
184
282
  case "DELETE_REQUESTED":
185
283
  case "DELETE_IN_PROGRESS":
@@ -206,9 +304,6 @@ export class GcpAdapter {
206
304
  };
207
305
  }
208
306
  }
209
- setBillingAccount(accountId) {
210
- this.billingAccountId = accountId;
211
- }
212
307
  getProjectId() {
213
308
  return this.projectId;
214
309
  }