@better-openclaw/core 1.0.24 → 1.0.26

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 (226) hide show
  1. package/dist/addon-stack.cjs +725 -0
  2. package/dist/addon-stack.cjs.map +1 -0
  3. package/dist/addon-stack.d.cts +23 -0
  4. package/dist/addon-stack.d.cts.map +1 -0
  5. package/dist/addon-stack.d.mts +23 -0
  6. package/dist/addon-stack.d.mts.map +1 -0
  7. package/dist/addon-stack.mjs +723 -0
  8. package/dist/addon-stack.mjs.map +1 -0
  9. package/dist/addon-stack.test.cjs +461 -0
  10. package/dist/addon-stack.test.cjs.map +1 -0
  11. package/dist/addon-stack.test.d.cts +1 -0
  12. package/dist/addon-stack.test.d.mts +1 -0
  13. package/dist/addon-stack.test.mjs +461 -0
  14. package/dist/addon-stack.test.mjs.map +1 -0
  15. package/dist/bare-metal-partition.test.cjs +20 -20
  16. package/dist/bare-metal-partition.test.cjs.map +1 -1
  17. package/dist/bare-metal-partition.test.mjs +2 -2
  18. package/dist/compose-validation.test.cjs +1 -1
  19. package/dist/composer.cjs +5 -1
  20. package/dist/composer.cjs.map +1 -1
  21. package/dist/composer.d.cts +24 -1
  22. package/dist/composer.d.cts.map +1 -1
  23. package/dist/composer.d.mts +24 -1
  24. package/dist/composer.d.mts.map +1 -1
  25. package/dist/composer.mjs +1 -1
  26. package/dist/composer.mjs.map +1 -1
  27. package/dist/composer.snapshot.test.cjs +20 -20
  28. package/dist/composer.snapshot.test.cjs.map +1 -1
  29. package/dist/composer.snapshot.test.mjs +2 -2
  30. package/dist/composer.test.cjs +54 -54
  31. package/dist/composer.test.cjs.map +1 -1
  32. package/dist/composer.test.mjs +2 -2
  33. package/dist/deployers/strip-host-ports.cjs +1 -1
  34. package/dist/deployers/strip-host-ports.test.cjs +26 -26
  35. package/dist/deployers/strip-host-ports.test.cjs.map +1 -1
  36. package/dist/deployers/strip-host-ports.test.mjs +1 -1
  37. package/dist/generate.cjs +3 -3
  38. package/dist/generate.mjs +3 -3
  39. package/dist/generate.test.cjs +56 -56
  40. package/dist/generate.test.cjs.map +1 -1
  41. package/dist/generate.test.mjs +1 -1
  42. package/dist/generators/bare-metal-install.test.cjs +18 -18
  43. package/dist/generators/bare-metal-install.test.cjs.map +1 -1
  44. package/dist/generators/bare-metal-install.test.mjs +1 -1
  45. package/dist/generators/caddy.test.cjs +13 -13
  46. package/dist/generators/caddy.test.cjs.map +1 -1
  47. package/dist/generators/caddy.test.mjs +1 -1
  48. package/dist/generators/clone-repos.test.cjs +27 -27
  49. package/dist/generators/clone-repos.test.cjs.map +1 -1
  50. package/dist/generators/clone-repos.test.mjs +1 -1
  51. package/dist/generators/env.cjs +1 -1
  52. package/dist/generators/env.test.cjs +17 -17
  53. package/dist/generators/env.test.cjs.map +1 -1
  54. package/dist/generators/env.test.mjs +1 -1
  55. package/dist/generators/health-check.test.cjs +39 -39
  56. package/dist/generators/health-check.test.cjs.map +1 -1
  57. package/dist/generators/health-check.test.mjs +1 -1
  58. package/dist/generators/postgres-init.cjs +5 -0
  59. package/dist/generators/postgres-init.cjs.map +1 -1
  60. package/dist/generators/postgres-init.d.cts.map +1 -1
  61. package/dist/generators/postgres-init.d.mts.map +1 -1
  62. package/dist/generators/postgres-init.mjs +5 -0
  63. package/dist/generators/postgres-init.mjs.map +1 -1
  64. package/dist/generators/scripts.test.cjs +39 -39
  65. package/dist/generators/scripts.test.cjs.map +1 -1
  66. package/dist/generators/scripts.test.mjs +1 -1
  67. package/dist/generators/skills.cjs +1 -1
  68. package/dist/generators/skills.d.cts.map +1 -1
  69. package/dist/generators/skills.d.mts.map +1 -1
  70. package/dist/generators/skills.mjs +141 -0
  71. package/dist/generators/skills.mjs.map +1 -1
  72. package/dist/generators/traefik.test.cjs +32 -32
  73. package/dist/generators/traefik.test.cjs.map +1 -1
  74. package/dist/generators/traefik.test.mjs +1 -1
  75. package/dist/index.cjs +21 -5
  76. package/dist/index.d.cts +5 -4
  77. package/dist/index.d.mts +5 -4
  78. package/dist/index.mjs +7 -6
  79. package/dist/migrations.test.cjs +16 -16
  80. package/dist/migrations.test.cjs.map +1 -1
  81. package/dist/migrations.test.mjs +1 -1
  82. package/dist/presets/presets.test.cjs +1 -1
  83. package/dist/presets/registry.test.cjs +14 -14
  84. package/dist/presets/registry.test.cjs.map +1 -1
  85. package/dist/presets/registry.test.mjs +1 -1
  86. package/dist/resolver.test.cjs +95 -95
  87. package/dist/resolver.test.cjs.map +1 -1
  88. package/dist/resolver.test.mjs +1 -1
  89. package/dist/{schema-eX44HhRp.d.mts → schema-BQnZrcw8.d.cts} +300 -2
  90. package/dist/schema-BQnZrcw8.d.cts.map +1 -0
  91. package/dist/{schema-tn5RK8CM.d.cts → schema-SBpL0bdI.d.mts} +300 -2
  92. package/dist/schema-SBpL0bdI.d.mts.map +1 -0
  93. package/dist/schema.cjs +148 -2
  94. package/dist/schema.cjs.map +1 -1
  95. package/dist/schema.d.cts +2 -2
  96. package/dist/schema.d.mts +2 -2
  97. package/dist/schema.mjs +139 -2
  98. package/dist/schema.mjs.map +1 -1
  99. package/dist/schema.test.cjs +86 -86
  100. package/dist/schema.test.cjs.map +1 -1
  101. package/dist/schema.test.mjs +1 -1
  102. package/dist/services/definitions/browserless.cjs +4 -1
  103. package/dist/services/definitions/browserless.cjs.map +1 -1
  104. package/dist/services/definitions/browserless.mjs +4 -1
  105. package/dist/services/definitions/browserless.mjs.map +1 -1
  106. package/dist/services/definitions/burnlink.cjs +142 -0
  107. package/dist/services/definitions/burnlink.cjs.map +1 -0
  108. package/dist/services/definitions/burnlink.d.cts +7 -0
  109. package/dist/services/definitions/burnlink.d.cts.map +1 -0
  110. package/dist/services/definitions/burnlink.d.mts +7 -0
  111. package/dist/services/definitions/burnlink.d.mts.map +1 -0
  112. package/dist/services/definitions/burnlink.mjs +141 -0
  113. package/dist/services/definitions/burnlink.mjs.map +1 -0
  114. package/dist/services/definitions/convex.cjs +43 -1
  115. package/dist/services/definitions/convex.cjs.map +1 -1
  116. package/dist/services/definitions/convex.mjs +43 -1
  117. package/dist/services/definitions/convex.mjs.map +1 -1
  118. package/dist/services/definitions/grafana.cjs +11 -1
  119. package/dist/services/definitions/grafana.cjs.map +1 -1
  120. package/dist/services/definitions/grafana.mjs +11 -1
  121. package/dist/services/definitions/grafana.mjs.map +1 -1
  122. package/dist/services/definitions/hindsight.cjs +130 -0
  123. package/dist/services/definitions/hindsight.cjs.map +1 -0
  124. package/dist/services/definitions/hindsight.d.cts +7 -0
  125. package/dist/services/definitions/hindsight.d.cts.map +1 -0
  126. package/dist/services/definitions/hindsight.d.mts +7 -0
  127. package/dist/services/definitions/hindsight.d.mts.map +1 -0
  128. package/dist/services/definitions/hindsight.mjs +129 -0
  129. package/dist/services/definitions/hindsight.mjs.map +1 -0
  130. package/dist/services/definitions/index.cjs +9 -0
  131. package/dist/services/definitions/index.cjs.map +1 -1
  132. package/dist/services/definitions/index.d.cts +4 -1
  133. package/dist/services/definitions/index.d.cts.map +1 -1
  134. package/dist/services/definitions/index.d.mts +4 -1
  135. package/dist/services/definitions/index.d.mts.map +1 -1
  136. package/dist/services/definitions/index.mjs +7 -1
  137. package/dist/services/definitions/index.mjs.map +1 -1
  138. package/dist/services/definitions/meilisearch.cjs +11 -1
  139. package/dist/services/definitions/meilisearch.cjs.map +1 -1
  140. package/dist/services/definitions/meilisearch.mjs +11 -1
  141. package/dist/services/definitions/meilisearch.mjs.map +1 -1
  142. package/dist/services/definitions/minio.cjs +3 -1
  143. package/dist/services/definitions/minio.cjs.map +1 -1
  144. package/dist/services/definitions/minio.mjs +3 -1
  145. package/dist/services/definitions/minio.mjs.map +1 -1
  146. package/dist/services/definitions/n8n.cjs +11 -1
  147. package/dist/services/definitions/n8n.cjs.map +1 -1
  148. package/dist/services/definitions/n8n.mjs +11 -1
  149. package/dist/services/definitions/n8n.mjs.map +1 -1
  150. package/dist/services/definitions/ollama.cjs +3 -1
  151. package/dist/services/definitions/ollama.cjs.map +1 -1
  152. package/dist/services/definitions/ollama.mjs +3 -1
  153. package/dist/services/definitions/ollama.mjs.map +1 -1
  154. package/dist/services/definitions/opensandbox.cjs +149 -0
  155. package/dist/services/definitions/opensandbox.cjs.map +1 -0
  156. package/dist/services/definitions/opensandbox.d.cts +7 -0
  157. package/dist/services/definitions/opensandbox.d.cts.map +1 -0
  158. package/dist/services/definitions/opensandbox.d.mts +7 -0
  159. package/dist/services/definitions/opensandbox.d.mts.map +1 -0
  160. package/dist/services/definitions/opensandbox.mjs +148 -0
  161. package/dist/services/definitions/opensandbox.mjs.map +1 -0
  162. package/dist/services/definitions/qdrant.cjs +3 -1
  163. package/dist/services/definitions/qdrant.cjs.map +1 -1
  164. package/dist/services/definitions/qdrant.mjs +3 -1
  165. package/dist/services/definitions/qdrant.mjs.map +1 -1
  166. package/dist/services/definitions/searxng.cjs +8 -1
  167. package/dist/services/definitions/searxng.cjs.map +1 -1
  168. package/dist/services/definitions/searxng.mjs +8 -1
  169. package/dist/services/definitions/searxng.mjs.map +1 -1
  170. package/dist/services/definitions/uptime-kuma.cjs +8 -1
  171. package/dist/services/definitions/uptime-kuma.cjs.map +1 -1
  172. package/dist/services/definitions/uptime-kuma.mjs +8 -1
  173. package/dist/services/definitions/uptime-kuma.mjs.map +1 -1
  174. package/dist/services/registry.test.cjs +36 -36
  175. package/dist/services/registry.test.cjs.map +1 -1
  176. package/dist/services/registry.test.mjs +1 -1
  177. package/dist/{skills-BlzpHmpH.cjs → skills-BSF7iNa4.cjs} +142 -1
  178. package/dist/{skills-BlzpHmpH.cjs.map → skills-BSF7iNa4.cjs.map} +1 -1
  179. package/dist/{vi.2VT5v0um-C_jmO7m2.mjs → test.CTcmp4Su-ClCHJ3FA.mjs} +6793 -6403
  180. package/dist/test.CTcmp4Su-ClCHJ3FA.mjs.map +1 -0
  181. package/dist/{vi.2VT5v0um-iVBt6Fyq.cjs → test.CTcmp4Su-DlzTarwH.cjs} +6793 -6403
  182. package/dist/test.CTcmp4Su-DlzTarwH.cjs.map +1 -0
  183. package/dist/track-analytics.test.cjs +28 -28
  184. package/dist/track-analytics.test.cjs.map +1 -1
  185. package/dist/track-analytics.test.mjs +1 -1
  186. package/dist/types.cjs.map +1 -1
  187. package/dist/types.d.cts +10 -2
  188. package/dist/types.d.cts.map +1 -1
  189. package/dist/types.d.mts +10 -2
  190. package/dist/types.d.mts.map +1 -1
  191. package/dist/types.mjs.map +1 -1
  192. package/dist/validator.cjs +1 -1
  193. package/dist/validator.test.cjs +15 -15
  194. package/dist/validator.test.cjs.map +1 -1
  195. package/dist/validator.test.mjs +2 -2
  196. package/dist/version-manager.test.cjs +37 -37
  197. package/dist/version-manager.test.cjs.map +1 -1
  198. package/dist/version-manager.test.mjs +1 -1
  199. package/package.json +4 -4
  200. package/src/__snapshots__/composer.snapshot.test.ts.snap +5 -0
  201. package/src/addon-stack.test.ts +648 -0
  202. package/src/addon-stack.ts +1046 -0
  203. package/src/composer.ts +4 -4
  204. package/src/generators/postgres-init.ts +2 -0
  205. package/src/generators/skills.ts +142 -0
  206. package/src/index.ts +20 -2
  207. package/src/schema.ts +190 -0
  208. package/src/services/definitions/browserless.ts +3 -0
  209. package/src/services/definitions/burnlink.ts +142 -0
  210. package/src/services/definitions/convex.ts +31 -0
  211. package/src/services/definitions/grafana.ts +9 -0
  212. package/src/services/definitions/hindsight.ts +131 -0
  213. package/src/services/definitions/index.ts +10 -0
  214. package/src/services/definitions/meilisearch.ts +9 -0
  215. package/src/services/definitions/minio.ts +2 -0
  216. package/src/services/definitions/n8n.ts +9 -0
  217. package/src/services/definitions/ollama.ts +2 -0
  218. package/src/services/definitions/opensandbox.ts +156 -0
  219. package/src/services/definitions/qdrant.ts +2 -0
  220. package/src/services/definitions/searxng.ts +3 -0
  221. package/src/services/definitions/uptime-kuma.ts +3 -0
  222. package/src/types.ts +18 -0
  223. package/dist/schema-eX44HhRp.d.mts.map +0 -1
  224. package/dist/schema-tn5RK8CM.d.cts.map +0 -1
  225. package/dist/vi.2VT5v0um-C_jmO7m2.mjs.map +0 -1
  226. package/dist/vi.2VT5v0um-iVBt6Fyq.cjs.map +0 -1
@@ -1,65 +1,65 @@
1
- const require_vi_2VT5v0um = require("./vi.2VT5v0um-iVBt6Fyq.cjs");
1
+ const require_test_CTcmp4Su = require("./test.CTcmp4Su-DlzTarwH.cjs");
2
2
  const require_schema = require("./schema.cjs");
3
3
  //#region src/schema.test.ts
4
- require_vi_2VT5v0um.describe("ServiceCategorySchema", () => {
5
- require_vi_2VT5v0um.it("accepts valid categories", () => {
6
- require_vi_2VT5v0um.globalExpect(require_schema.ServiceCategorySchema.parse("automation")).toBe("automation");
7
- require_vi_2VT5v0um.globalExpect(require_schema.ServiceCategorySchema.parse("vector-db")).toBe("vector-db");
8
- require_vi_2VT5v0um.globalExpect(require_schema.ServiceCategorySchema.parse("ai")).toBe("ai");
4
+ require_test_CTcmp4Su.describe("ServiceCategorySchema", () => {
5
+ require_test_CTcmp4Su.it("accepts valid categories", () => {
6
+ require_test_CTcmp4Su.globalExpect(require_schema.ServiceCategorySchema.parse("automation")).toBe("automation");
7
+ require_test_CTcmp4Su.globalExpect(require_schema.ServiceCategorySchema.parse("vector-db")).toBe("vector-db");
8
+ require_test_CTcmp4Su.globalExpect(require_schema.ServiceCategorySchema.parse("ai")).toBe("ai");
9
9
  });
10
- require_vi_2VT5v0um.it("rejects invalid categories", () => {
11
- require_vi_2VT5v0um.globalExpect(() => require_schema.ServiceCategorySchema.parse("invalid")).toThrow();
12
- require_vi_2VT5v0um.globalExpect(() => require_schema.ServiceCategorySchema.parse("")).toThrow();
10
+ require_test_CTcmp4Su.it("rejects invalid categories", () => {
11
+ require_test_CTcmp4Su.globalExpect(() => require_schema.ServiceCategorySchema.parse("invalid")).toThrow();
12
+ require_test_CTcmp4Su.globalExpect(() => require_schema.ServiceCategorySchema.parse("")).toThrow();
13
13
  });
14
14
  });
15
- require_vi_2VT5v0um.describe("PortMappingSchema", () => {
16
- require_vi_2VT5v0um.it("accepts valid port mapping", () => {
17
- require_vi_2VT5v0um.globalExpect(require_schema.PortMappingSchema.parse({
15
+ require_test_CTcmp4Su.describe("PortMappingSchema", () => {
16
+ require_test_CTcmp4Su.it("accepts valid port mapping", () => {
17
+ require_test_CTcmp4Su.globalExpect(require_schema.PortMappingSchema.parse({
18
18
  host: 6379,
19
19
  container: 6379,
20
20
  description: "Redis port",
21
21
  exposed: true
22
22
  }).host).toBe(6379);
23
23
  });
24
- require_vi_2VT5v0um.it("defaults exposed to true", () => {
25
- require_vi_2VT5v0um.globalExpect(require_schema.PortMappingSchema.parse({
24
+ require_test_CTcmp4Su.it("defaults exposed to true", () => {
25
+ require_test_CTcmp4Su.globalExpect(require_schema.PortMappingSchema.parse({
26
26
  host: 6379,
27
27
  container: 6379,
28
28
  description: "Redis port"
29
29
  }).exposed).toBe(true);
30
30
  });
31
- require_vi_2VT5v0um.it("rejects invalid port numbers", () => {
32
- require_vi_2VT5v0um.globalExpect(() => require_schema.PortMappingSchema.parse({
31
+ require_test_CTcmp4Su.it("rejects invalid port numbers", () => {
32
+ require_test_CTcmp4Su.globalExpect(() => require_schema.PortMappingSchema.parse({
33
33
  host: 0,
34
34
  container: 6379,
35
35
  description: "bad"
36
36
  })).toThrow();
37
- require_vi_2VT5v0um.globalExpect(() => require_schema.PortMappingSchema.parse({
37
+ require_test_CTcmp4Su.globalExpect(() => require_schema.PortMappingSchema.parse({
38
38
  host: 7e4,
39
39
  container: 6379,
40
40
  description: "bad"
41
41
  })).toThrow();
42
42
  });
43
43
  });
44
- require_vi_2VT5v0um.describe("VolumeMappingSchema", () => {
45
- require_vi_2VT5v0um.it("accepts valid volume mapping", () => {
46
- require_vi_2VT5v0um.globalExpect(require_schema.VolumeMappingSchema.parse({
44
+ require_test_CTcmp4Su.describe("VolumeMappingSchema", () => {
45
+ require_test_CTcmp4Su.it("accepts valid volume mapping", () => {
46
+ require_test_CTcmp4Su.globalExpect(require_schema.VolumeMappingSchema.parse({
47
47
  name: "redis-data",
48
48
  containerPath: "/data",
49
49
  description: "Redis persistent data"
50
50
  }).name).toBe("redis-data");
51
51
  });
52
- require_vi_2VT5v0um.it("rejects empty name", () => {
53
- require_vi_2VT5v0um.globalExpect(() => require_schema.VolumeMappingSchema.parse({
52
+ require_test_CTcmp4Su.it("rejects empty name", () => {
53
+ require_test_CTcmp4Su.globalExpect(() => require_schema.VolumeMappingSchema.parse({
54
54
  name: "",
55
55
  containerPath: "/data",
56
56
  description: "bad"
57
57
  })).toThrow();
58
58
  });
59
59
  });
60
- require_vi_2VT5v0um.describe("EnvVariableSchema", () => {
61
- require_vi_2VT5v0um.it("accepts valid env variable", () => {
62
- require_vi_2VT5v0um.globalExpect(require_schema.EnvVariableSchema.parse({
60
+ require_test_CTcmp4Su.describe("EnvVariableSchema", () => {
61
+ require_test_CTcmp4Su.it("accepts valid env variable", () => {
62
+ require_test_CTcmp4Su.globalExpect(require_schema.EnvVariableSchema.parse({
63
63
  key: "REDIS_PASSWORD",
64
64
  defaultValue: "changeme",
65
65
  secret: true,
@@ -67,26 +67,26 @@ require_vi_2VT5v0um.describe("EnvVariableSchema", () => {
67
67
  required: true
68
68
  }).secret).toBe(true);
69
69
  });
70
- require_vi_2VT5v0um.it("defaults secret to false", () => {
70
+ require_test_CTcmp4Su.it("defaults secret to false", () => {
71
71
  const result = require_schema.EnvVariableSchema.parse({
72
72
  key: "REDIS_HOST",
73
73
  defaultValue: "redis",
74
74
  description: "Redis host"
75
75
  });
76
- require_vi_2VT5v0um.globalExpect(result.secret).toBe(false);
77
- require_vi_2VT5v0um.globalExpect(result.required).toBe(true);
76
+ require_test_CTcmp4Su.globalExpect(result.secret).toBe(false);
77
+ require_test_CTcmp4Su.globalExpect(result.required).toBe(true);
78
78
  });
79
79
  });
80
- require_vi_2VT5v0um.describe("HealthCheckSchema", () => {
81
- require_vi_2VT5v0um.it("accepts valid healthcheck with defaults", () => {
80
+ require_test_CTcmp4Su.describe("HealthCheckSchema", () => {
81
+ require_test_CTcmp4Su.it("accepts valid healthcheck with defaults", () => {
82
82
  const result = require_schema.HealthCheckSchema.parse({ test: "redis-cli ping" });
83
- require_vi_2VT5v0um.globalExpect(result.interval).toBe("30s");
84
- require_vi_2VT5v0um.globalExpect(result.timeout).toBe("10s");
85
- require_vi_2VT5v0um.globalExpect(result.retries).toBe(3);
83
+ require_test_CTcmp4Su.globalExpect(result.interval).toBe("30s");
84
+ require_test_CTcmp4Su.globalExpect(result.timeout).toBe("10s");
85
+ require_test_CTcmp4Su.globalExpect(result.retries).toBe(3);
86
86
  });
87
87
  });
88
- require_vi_2VT5v0um.describe("GenerationInputSchema", () => {
89
- require_vi_2VT5v0um.it("accepts valid generation input", () => {
88
+ require_test_CTcmp4Su.describe("GenerationInputSchema", () => {
89
+ require_test_CTcmp4Su.it("accepts valid generation input", () => {
90
90
  const result = require_schema.GenerationInputSchema.parse({
91
91
  projectName: "my-openclaw-stack",
92
92
  services: ["redis", "qdrant"],
@@ -94,47 +94,47 @@ require_vi_2VT5v0um.describe("GenerationInputSchema", () => {
94
94
  proxy: "caddy",
95
95
  domain: "openclaw.example.com"
96
96
  });
97
- require_vi_2VT5v0um.globalExpect(result.projectName).toBe("my-openclaw-stack");
98
- require_vi_2VT5v0um.globalExpect(result.gpu).toBe(false);
97
+ require_test_CTcmp4Su.globalExpect(result.projectName).toBe("my-openclaw-stack");
98
+ require_test_CTcmp4Su.globalExpect(result.gpu).toBe(false);
99
99
  });
100
- require_vi_2VT5v0um.it("rejects invalid project names", () => {
101
- require_vi_2VT5v0um.globalExpect(() => require_schema.GenerationInputSchema.parse({ projectName: "-bad-name" })).toThrow();
102
- require_vi_2VT5v0um.globalExpect(() => require_schema.GenerationInputSchema.parse({ projectName: "Bad Name" })).toThrow();
103
- require_vi_2VT5v0um.globalExpect(() => require_schema.GenerationInputSchema.parse({ projectName: "has spaces" })).toThrow();
100
+ require_test_CTcmp4Su.it("rejects invalid project names", () => {
101
+ require_test_CTcmp4Su.globalExpect(() => require_schema.GenerationInputSchema.parse({ projectName: "-bad-name" })).toThrow();
102
+ require_test_CTcmp4Su.globalExpect(() => require_schema.GenerationInputSchema.parse({ projectName: "Bad Name" })).toThrow();
103
+ require_test_CTcmp4Su.globalExpect(() => require_schema.GenerationInputSchema.parse({ projectName: "has spaces" })).toThrow();
104
104
  });
105
- require_vi_2VT5v0um.it("accepts single-char project name", () => {
106
- require_vi_2VT5v0um.globalExpect(require_schema.GenerationInputSchema.parse({ projectName: "a" }).projectName).toBe("a");
105
+ require_test_CTcmp4Su.it("accepts single-char project name", () => {
106
+ require_test_CTcmp4Su.globalExpect(require_schema.GenerationInputSchema.parse({ projectName: "a" }).projectName).toBe("a");
107
107
  });
108
- require_vi_2VT5v0um.it("applies defaults", () => {
108
+ require_test_CTcmp4Su.it("applies defaults", () => {
109
109
  const result = require_schema.GenerationInputSchema.parse({ projectName: "test" });
110
- require_vi_2VT5v0um.globalExpect(result.services).toEqual([]);
111
- require_vi_2VT5v0um.globalExpect(result.skillPacks).toEqual([]);
112
- require_vi_2VT5v0um.globalExpect(result.proxy).toBe("none");
113
- require_vi_2VT5v0um.globalExpect(result.gpu).toBe(false);
114
- require_vi_2VT5v0um.globalExpect(result.platform).toBe("linux/amd64");
115
- require_vi_2VT5v0um.globalExpect(result.deployment).toBe("local");
116
- require_vi_2VT5v0um.globalExpect(result.deploymentType).toBe("docker");
117
- require_vi_2VT5v0um.globalExpect(result.generateSecrets).toBe(true);
118
- require_vi_2VT5v0um.globalExpect(result.openclawVersion).toBe("latest");
110
+ require_test_CTcmp4Su.globalExpect(result.services).toEqual([]);
111
+ require_test_CTcmp4Su.globalExpect(result.skillPacks).toEqual([]);
112
+ require_test_CTcmp4Su.globalExpect(result.proxy).toBe("none");
113
+ require_test_CTcmp4Su.globalExpect(result.gpu).toBe(false);
114
+ require_test_CTcmp4Su.globalExpect(result.platform).toBe("linux/amd64");
115
+ require_test_CTcmp4Su.globalExpect(result.deployment).toBe("local");
116
+ require_test_CTcmp4Su.globalExpect(result.deploymentType).toBe("docker");
117
+ require_test_CTcmp4Su.globalExpect(result.generateSecrets).toBe(true);
118
+ require_test_CTcmp4Su.globalExpect(result.openclawVersion).toBe("latest");
119
119
  });
120
- require_vi_2VT5v0um.it("accepts deploymentType bare-metal and extended platform", () => {
120
+ require_test_CTcmp4Su.it("accepts deploymentType bare-metal and extended platform", () => {
121
121
  const result = require_schema.GenerationInputSchema.parse({
122
122
  projectName: "my-stack",
123
123
  services: ["redis"],
124
124
  deploymentType: "bare-metal",
125
125
  platform: "windows/amd64"
126
126
  });
127
- require_vi_2VT5v0um.globalExpect(result.deploymentType).toBe("bare-metal");
128
- require_vi_2VT5v0um.globalExpect(result.platform).toBe("windows/amd64");
127
+ require_test_CTcmp4Su.globalExpect(result.deploymentType).toBe("bare-metal");
128
+ require_test_CTcmp4Su.globalExpect(result.platform).toBe("windows/amd64");
129
129
  });
130
- require_vi_2VT5v0um.it("accepts platform macos/arm64", () => {
131
- require_vi_2VT5v0um.globalExpect(require_schema.GenerationInputSchema.parse({
130
+ require_test_CTcmp4Su.it("accepts platform macos/arm64", () => {
131
+ require_test_CTcmp4Su.globalExpect(require_schema.GenerationInputSchema.parse({
132
132
  projectName: "my-stack",
133
133
  platform: "macos/arm64"
134
134
  }).platform).toBe("macos/arm64");
135
135
  });
136
136
  });
137
- require_vi_2VT5v0um.describe("ServiceDefinitionSchema", () => {
137
+ require_test_CTcmp4Su.describe("ServiceDefinitionSchema", () => {
138
138
  const validDef = {
139
139
  id: "redis",
140
140
  name: "Redis",
@@ -163,16 +163,16 @@ require_vi_2VT5v0um.describe("ServiceDefinitionSchema", () => {
163
163
  tags: ["cache", "database"],
164
164
  maturity: "stable"
165
165
  };
166
- require_vi_2VT5v0um.it("accepts valid service definition", () => {
167
- require_vi_2VT5v0um.globalExpect(require_schema.ServiceDefinitionSchema.parse(validDef).id).toBe("redis");
166
+ require_test_CTcmp4Su.it("accepts valid service definition", () => {
167
+ require_test_CTcmp4Su.globalExpect(require_schema.ServiceDefinitionSchema.parse(validDef).id).toBe("redis");
168
168
  });
169
- require_vi_2VT5v0um.it("rejects invalid id format", () => {
170
- require_vi_2VT5v0um.globalExpect(() => require_schema.ServiceDefinitionSchema.parse({
169
+ require_test_CTcmp4Su.it("rejects invalid id format", () => {
170
+ require_test_CTcmp4Su.globalExpect(() => require_schema.ServiceDefinitionSchema.parse({
171
171
  ...validDef,
172
172
  id: "Bad_Id"
173
173
  })).toThrow();
174
174
  });
175
- require_vi_2VT5v0um.it("defaults arrays and booleans correctly", () => {
175
+ require_test_CTcmp4Su.it("defaults arrays and booleans correctly", () => {
176
176
  const result = require_schema.ServiceDefinitionSchema.parse({
177
177
  id: "test",
178
178
  name: "Test",
@@ -183,23 +183,23 @@ require_vi_2VT5v0um.describe("ServiceDefinitionSchema", () => {
183
183
  imageTag: "latest",
184
184
  docsUrl: "https://example.com"
185
185
  });
186
- require_vi_2VT5v0um.globalExpect(result.ports).toEqual([]);
187
- require_vi_2VT5v0um.globalExpect(result.volumes).toEqual([]);
188
- require_vi_2VT5v0um.globalExpect(result.requires).toEqual([]);
189
- require_vi_2VT5v0um.globalExpect(result.conflictsWith).toEqual([]);
190
- require_vi_2VT5v0um.globalExpect(result.gpuRequired).toBe(false);
186
+ require_test_CTcmp4Su.globalExpect(result.ports).toEqual([]);
187
+ require_test_CTcmp4Su.globalExpect(result.volumes).toEqual([]);
188
+ require_test_CTcmp4Su.globalExpect(result.requires).toEqual([]);
189
+ require_test_CTcmp4Su.globalExpect(result.conflictsWith).toEqual([]);
190
+ require_test_CTcmp4Su.globalExpect(result.gpuRequired).toBe(false);
191
191
  });
192
- require_vi_2VT5v0um.it("accepts optional mandatory field and defaults to false when omitted", () => {
192
+ require_test_CTcmp4Su.it("accepts optional mandatory field and defaults to false when omitted", () => {
193
193
  const withMandatory = {
194
194
  ...validDef,
195
195
  mandatory: true
196
196
  };
197
- require_vi_2VT5v0um.globalExpect(require_schema.ServiceDefinitionSchema.parse(withMandatory).mandatory).toBe(true);
197
+ require_test_CTcmp4Su.globalExpect(require_schema.ServiceDefinitionSchema.parse(withMandatory).mandatory).toBe(true);
198
198
  });
199
- require_vi_2VT5v0um.it("omitting mandatory leaves it undefined or false (schema default false)", () => {
200
- require_vi_2VT5v0um.globalExpect(require_schema.ServiceDefinitionSchema.parse(validDef).mandatory !== true).toBe(true);
199
+ require_test_CTcmp4Su.it("omitting mandatory leaves it undefined or false (schema default false)", () => {
200
+ require_test_CTcmp4Su.globalExpect(require_schema.ServiceDefinitionSchema.parse(validDef).mandatory !== true).toBe(true);
201
201
  });
202
- require_vi_2VT5v0um.it("accepts nativeSupported and nativeRecipes for bare-metal", () => {
202
+ require_test_CTcmp4Su.it("accepts nativeSupported and nativeRecipes for bare-metal", () => {
203
203
  const withNative = {
204
204
  ...validDef,
205
205
  nativeSupported: true,
@@ -212,15 +212,15 @@ require_vi_2VT5v0um.describe("ServiceDefinitionSchema", () => {
212
212
  }]
213
213
  };
214
214
  const result = require_schema.ServiceDefinitionSchema.parse(withNative);
215
- require_vi_2VT5v0um.globalExpect(result.nativeSupported).toBe(true);
216
- require_vi_2VT5v0um.globalExpect(result.nativeRecipes).toHaveLength(1);
217
- require_vi_2VT5v0um.globalExpect(result.nativeRecipes[0].platform).toBe("linux");
218
- require_vi_2VT5v0um.globalExpect(result.nativeRecipes[0].startCommand).toBe("systemctl start redis-server");
215
+ require_test_CTcmp4Su.globalExpect(result.nativeSupported).toBe(true);
216
+ require_test_CTcmp4Su.globalExpect(result.nativeRecipes).toHaveLength(1);
217
+ require_test_CTcmp4Su.globalExpect(result.nativeRecipes[0].platform).toBe("linux");
218
+ require_test_CTcmp4Su.globalExpect(result.nativeRecipes[0].startCommand).toBe("systemctl start redis-server");
219
219
  });
220
220
  });
221
- require_vi_2VT5v0um.describe("SkillPackSchema", () => {
222
- require_vi_2VT5v0um.it("accepts valid skill pack", () => {
223
- require_vi_2VT5v0um.globalExpect(require_schema.SkillPackSchema.parse({
221
+ require_test_CTcmp4Su.describe("SkillPackSchema", () => {
222
+ require_test_CTcmp4Su.it("accepts valid skill pack", () => {
223
+ require_test_CTcmp4Su.globalExpect(require_schema.SkillPackSchema.parse({
224
224
  id: "research-agent",
225
225
  name: "Research Agent",
226
226
  description: "Research agent pack",
@@ -236,8 +236,8 @@ require_vi_2VT5v0um.describe("SkillPackSchema", () => {
236
236
  ]
237
237
  }).requiredServices).toHaveLength(3);
238
238
  });
239
- require_vi_2VT5v0um.it("rejects empty required services", () => {
240
- require_vi_2VT5v0um.globalExpect(() => require_schema.SkillPackSchema.parse({
239
+ require_test_CTcmp4Su.it("rejects empty required services", () => {
240
+ require_test_CTcmp4Su.globalExpect(() => require_schema.SkillPackSchema.parse({
241
241
  id: "empty",
242
242
  name: "Empty",
243
243
  description: "Bad",
@@ -246,9 +246,9 @@ require_vi_2VT5v0um.describe("SkillPackSchema", () => {
246
246
  })).toThrow();
247
247
  });
248
248
  });
249
- require_vi_2VT5v0um.describe("PresetSchema", () => {
250
- require_vi_2VT5v0um.it("accepts valid preset", () => {
251
- require_vi_2VT5v0um.globalExpect(require_schema.PresetSchema.parse({
249
+ require_test_CTcmp4Su.describe("PresetSchema", () => {
250
+ require_test_CTcmp4Su.it("accepts valid preset", () => {
251
+ require_test_CTcmp4Su.globalExpect(require_schema.PresetSchema.parse({
252
252
  id: "minimal",
253
253
  name: "Minimal",
254
254
  description: "OpenClaw + Redis",
@@ -1 +1 @@
1
- {"version":3,"file":"schema.test.cjs","names":["describe","ServiceCategorySchema","PortMappingSchema","VolumeMappingSchema","EnvVariableSchema","HealthCheckSchema","GenerationInputSchema","ServiceDefinitionSchema","SkillPackSchema","PresetSchema"],"sources":["../src/schema.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tEnvVariableSchema,\n\tGenerationInputSchema,\n\tHealthCheckSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillPackSchema,\n\tVolumeMappingSchema,\n} from \"./schema.js\";\n\ndescribe(\"ServiceCategorySchema\", () => {\n\tit(\"accepts valid categories\", () => {\n\t\texpect(ServiceCategorySchema.parse(\"automation\")).toBe(\"automation\");\n\t\texpect(ServiceCategorySchema.parse(\"vector-db\")).toBe(\"vector-db\");\n\t\texpect(ServiceCategorySchema.parse(\"ai\")).toBe(\"ai\");\n\t});\n\n\tit(\"rejects invalid categories\", () => {\n\t\texpect(() => ServiceCategorySchema.parse(\"invalid\")).toThrow();\n\t\texpect(() => ServiceCategorySchema.parse(\"\")).toThrow();\n\t});\n});\n\ndescribe(\"PortMappingSchema\", () => {\n\tit(\"accepts valid port mapping\", () => {\n\t\tconst result = PortMappingSchema.parse({\n\t\t\thost: 6379,\n\t\t\tcontainer: 6379,\n\t\t\tdescription: \"Redis port\",\n\t\t\texposed: true,\n\t\t});\n\t\texpect(result.host).toBe(6379);\n\t});\n\n\tit(\"defaults exposed to true\", () => {\n\t\tconst result = PortMappingSchema.parse({\n\t\t\thost: 6379,\n\t\t\tcontainer: 6379,\n\t\t\tdescription: \"Redis port\",\n\t\t});\n\t\texpect(result.exposed).toBe(true);\n\t});\n\n\tit(\"rejects invalid port numbers\", () => {\n\t\texpect(() =>\n\t\t\tPortMappingSchema.parse({\n\t\t\t\thost: 0,\n\t\t\t\tcontainer: 6379,\n\t\t\t\tdescription: \"bad\",\n\t\t\t}),\n\t\t).toThrow();\n\t\texpect(() =>\n\t\t\tPortMappingSchema.parse({\n\t\t\t\thost: 70000,\n\t\t\t\tcontainer: 6379,\n\t\t\t\tdescription: \"bad\",\n\t\t\t}),\n\t\t).toThrow();\n\t});\n});\n\ndescribe(\"VolumeMappingSchema\", () => {\n\tit(\"accepts valid volume mapping\", () => {\n\t\tconst result = VolumeMappingSchema.parse({\n\t\t\tname: \"redis-data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Redis persistent data\",\n\t\t});\n\t\texpect(result.name).toBe(\"redis-data\");\n\t});\n\n\tit(\"rejects empty name\", () => {\n\t\texpect(() =>\n\t\t\tVolumeMappingSchema.parse({\n\t\t\t\tname: \"\",\n\t\t\t\tcontainerPath: \"/data\",\n\t\t\t\tdescription: \"bad\",\n\t\t\t}),\n\t\t).toThrow();\n\t});\n});\n\ndescribe(\"EnvVariableSchema\", () => {\n\tit(\"accepts valid env variable\", () => {\n\t\tconst result = EnvVariableSchema.parse({\n\t\t\tkey: \"REDIS_PASSWORD\",\n\t\t\tdefaultValue: \"changeme\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Redis password\",\n\t\t\trequired: true,\n\t\t});\n\t\texpect(result.secret).toBe(true);\n\t});\n\n\tit(\"defaults secret to false\", () => {\n\t\tconst result = EnvVariableSchema.parse({\n\t\t\tkey: \"REDIS_HOST\",\n\t\t\tdefaultValue: \"redis\",\n\t\t\tdescription: \"Redis host\",\n\t\t});\n\t\texpect(result.secret).toBe(false);\n\t\texpect(result.required).toBe(true);\n\t});\n});\n\ndescribe(\"HealthCheckSchema\", () => {\n\tit(\"accepts valid healthcheck with defaults\", () => {\n\t\tconst result = HealthCheckSchema.parse({\n\t\t\ttest: \"redis-cli ping\",\n\t\t});\n\t\texpect(result.interval).toBe(\"30s\");\n\t\texpect(result.timeout).toBe(\"10s\");\n\t\texpect(result.retries).toBe(3);\n\t});\n});\n\ndescribe(\"GenerationInputSchema\", () => {\n\tit(\"accepts valid generation input\", () => {\n\t\tconst result = GenerationInputSchema.parse({\n\t\t\tprojectName: \"my-openclaw-stack\",\n\t\t\tservices: [\"redis\", \"qdrant\"],\n\t\t\tskillPacks: [\"research-agent\"],\n\t\t\tproxy: \"caddy\",\n\t\t\tdomain: \"openclaw.example.com\",\n\t\t});\n\t\texpect(result.projectName).toBe(\"my-openclaw-stack\");\n\t\texpect(result.gpu).toBe(false);\n\t});\n\n\tit(\"rejects invalid project names\", () => {\n\t\texpect(() => GenerationInputSchema.parse({ projectName: \"-bad-name\" })).toThrow();\n\t\texpect(() => GenerationInputSchema.parse({ projectName: \"Bad Name\" })).toThrow();\n\t\texpect(() => GenerationInputSchema.parse({ projectName: \"has spaces\" })).toThrow();\n\t});\n\n\tit(\"accepts single-char project name\", () => {\n\t\tconst result = GenerationInputSchema.parse({ projectName: \"a\" });\n\t\texpect(result.projectName).toBe(\"a\");\n\t});\n\n\tit(\"applies defaults\", () => {\n\t\tconst result = GenerationInputSchema.parse({ projectName: \"test\" });\n\t\texpect(result.services).toEqual([]);\n\t\texpect(result.skillPacks).toEqual([]);\n\t\texpect(result.proxy).toBe(\"none\");\n\t\texpect(result.gpu).toBe(false);\n\t\texpect(result.platform).toBe(\"linux/amd64\");\n\t\texpect(result.deployment).toBe(\"local\");\n\t\texpect(result.deploymentType).toBe(\"docker\");\n\t\texpect(result.generateSecrets).toBe(true);\n\t\texpect(result.openclawVersion).toBe(\"latest\");\n\t});\n\n\tit(\"accepts deploymentType bare-metal and extended platform\", () => {\n\t\tconst result = GenerationInputSchema.parse({\n\t\t\tprojectName: \"my-stack\",\n\t\t\tservices: [\"redis\"],\n\t\t\tdeploymentType: \"bare-metal\",\n\t\t\tplatform: \"windows/amd64\",\n\t\t});\n\t\texpect(result.deploymentType).toBe(\"bare-metal\");\n\t\texpect(result.platform).toBe(\"windows/amd64\");\n\t});\n\n\tit(\"accepts platform macos/arm64\", () => {\n\t\tconst result = GenerationInputSchema.parse({\n\t\t\tprojectName: \"my-stack\",\n\t\t\tplatform: \"macos/arm64\",\n\t\t});\n\t\texpect(result.platform).toBe(\"macos/arm64\");\n\t});\n});\n\ndescribe(\"ServiceDefinitionSchema\", () => {\n\tconst validDef = {\n\t\tid: \"redis\",\n\t\tname: \"Redis\",\n\t\tdescription: \"In-memory data store\",\n\t\tcategory: \"database\",\n\t\ticon: \"🔴\",\n\t\timage: \"redis\",\n\t\timageTag: \"7-alpine\",\n\t\tports: [{ host: 6379, container: 6379, description: \"Redis port\", exposed: true }],\n\t\tvolumes: [{ name: \"redis-data\", containerPath: \"/data\", description: \"Data\" }],\n\t\tenvironment: [],\n\t\trestartPolicy: \"unless-stopped\",\n\t\tnetworks: [\"openclaw-network\"],\n\t\tskills: [],\n\t\topenclawEnvVars: [],\n\t\tdocsUrl: \"https://redis.io/docs\",\n\t\ttags: [\"cache\", \"database\"],\n\t\tmaturity: \"stable\",\n\t};\n\n\tit(\"accepts valid service definition\", () => {\n\t\tconst result = ServiceDefinitionSchema.parse(validDef);\n\t\texpect(result.id).toBe(\"redis\");\n\t});\n\n\tit(\"rejects invalid id format\", () => {\n\t\texpect(() => ServiceDefinitionSchema.parse({ ...validDef, id: \"Bad_Id\" })).toThrow();\n\t});\n\n\tit(\"defaults arrays and booleans correctly\", () => {\n\t\tconst minimal = {\n\t\t\tid: \"test\",\n\t\t\tname: \"Test\",\n\t\t\tdescription: \"Test service\",\n\t\t\tcategory: \"database\",\n\t\t\ticon: \"🧪\",\n\t\t\timage: \"test\",\n\t\t\timageTag: \"latest\",\n\t\t\tdocsUrl: \"https://example.com\",\n\t\t};\n\t\tconst result = ServiceDefinitionSchema.parse(minimal);\n\t\texpect(result.ports).toEqual([]);\n\t\texpect(result.volumes).toEqual([]);\n\t\texpect(result.requires).toEqual([]);\n\t\texpect(result.conflictsWith).toEqual([]);\n\t\texpect(result.gpuRequired).toBe(false);\n\t});\n\n\tit(\"accepts optional mandatory field and defaults to false when omitted\", () => {\n\t\tconst withMandatory = { ...validDef, mandatory: true };\n\t\tconst result = ServiceDefinitionSchema.parse(withMandatory);\n\t\texpect(result.mandatory).toBe(true);\n\t});\n\n\tit(\"omitting mandatory leaves it undefined or false (schema default false)\", () => {\n\t\tconst result = ServiceDefinitionSchema.parse(validDef);\n\t\texpect(result.mandatory !== true).toBe(true); // false or undefined both mean not mandatory\n\t});\n\n\tit(\"accepts nativeSupported and nativeRecipes for bare-metal\", () => {\n\t\tconst withNative = {\n\t\t\t...validDef,\n\t\t\tnativeSupported: true,\n\t\t\tnativeRecipes: [\n\t\t\t\t{\n\t\t\t\t\tplatform: \"linux\",\n\t\t\t\t\tinstallSteps: [\"apt-get install -y redis-server\"],\n\t\t\t\t\tstartCommand: \"systemctl start redis-server\",\n\t\t\t\t\tstopCommand: \"systemctl stop redis-server\",\n\t\t\t\t\tsystemdUnit: \"redis-server\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\tconst result = ServiceDefinitionSchema.parse(withNative);\n\t\texpect(result.nativeSupported).toBe(true);\n\t\texpect(result.nativeRecipes).toHaveLength(1);\n\t\texpect(result.nativeRecipes![0].platform).toBe(\"linux\");\n\t\texpect(result.nativeRecipes![0].startCommand).toBe(\"systemctl start redis-server\");\n\t});\n});\n\ndescribe(\"SkillPackSchema\", () => {\n\tit(\"accepts valid skill pack\", () => {\n\t\tconst result = SkillPackSchema.parse({\n\t\t\tid: \"research-agent\",\n\t\t\tname: \"Research Agent\",\n\t\t\tdescription: \"Research agent pack\",\n\t\t\trequiredServices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\t\tskills: [\"qdrant-memory\", \"searxng-search\", \"browserless-browse\"],\n\t\t});\n\t\texpect(result.requiredServices).toHaveLength(3);\n\t});\n\n\tit(\"rejects empty required services\", () => {\n\t\texpect(() =>\n\t\t\tSkillPackSchema.parse({\n\t\t\t\tid: \"empty\",\n\t\t\t\tname: \"Empty\",\n\t\t\t\tdescription: \"Bad\",\n\t\t\t\trequiredServices: [],\n\t\t\t\tskills: [],\n\t\t\t}),\n\t\t).toThrow();\n\t});\n});\n\ndescribe(\"PresetSchema\", () => {\n\tit(\"accepts valid preset\", () => {\n\t\tconst result = PresetSchema.parse({\n\t\t\tid: \"minimal\",\n\t\t\tname: \"Minimal\",\n\t\t\tdescription: \"OpenClaw + Redis\",\n\t\t\tservices: [\"redis\"],\n\t\t\testimatedMemoryMB: 1024,\n\t\t});\n\t\texpect(result.skillPacks).toEqual([]);\n\t});\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"schema.test.cjs","names":["describe","ServiceCategorySchema","PortMappingSchema","VolumeMappingSchema","EnvVariableSchema","HealthCheckSchema","GenerationInputSchema","ServiceDefinitionSchema","SkillPackSchema","PresetSchema"],"sources":["../src/schema.test.ts"],"sourcesContent":["import { describe, expect, it } from \"vitest\";\nimport {\n\tEnvVariableSchema,\n\tGenerationInputSchema,\n\tHealthCheckSchema,\n\tPortMappingSchema,\n\tPresetSchema,\n\tServiceCategorySchema,\n\tServiceDefinitionSchema,\n\tSkillPackSchema,\n\tVolumeMappingSchema,\n} from \"./schema.js\";\n\ndescribe(\"ServiceCategorySchema\", () => {\n\tit(\"accepts valid categories\", () => {\n\t\texpect(ServiceCategorySchema.parse(\"automation\")).toBe(\"automation\");\n\t\texpect(ServiceCategorySchema.parse(\"vector-db\")).toBe(\"vector-db\");\n\t\texpect(ServiceCategorySchema.parse(\"ai\")).toBe(\"ai\");\n\t});\n\n\tit(\"rejects invalid categories\", () => {\n\t\texpect(() => ServiceCategorySchema.parse(\"invalid\")).toThrow();\n\t\texpect(() => ServiceCategorySchema.parse(\"\")).toThrow();\n\t});\n});\n\ndescribe(\"PortMappingSchema\", () => {\n\tit(\"accepts valid port mapping\", () => {\n\t\tconst result = PortMappingSchema.parse({\n\t\t\thost: 6379,\n\t\t\tcontainer: 6379,\n\t\t\tdescription: \"Redis port\",\n\t\t\texposed: true,\n\t\t});\n\t\texpect(result.host).toBe(6379);\n\t});\n\n\tit(\"defaults exposed to true\", () => {\n\t\tconst result = PortMappingSchema.parse({\n\t\t\thost: 6379,\n\t\t\tcontainer: 6379,\n\t\t\tdescription: \"Redis port\",\n\t\t});\n\t\texpect(result.exposed).toBe(true);\n\t});\n\n\tit(\"rejects invalid port numbers\", () => {\n\t\texpect(() =>\n\t\t\tPortMappingSchema.parse({\n\t\t\t\thost: 0,\n\t\t\t\tcontainer: 6379,\n\t\t\t\tdescription: \"bad\",\n\t\t\t}),\n\t\t).toThrow();\n\t\texpect(() =>\n\t\t\tPortMappingSchema.parse({\n\t\t\t\thost: 70000,\n\t\t\t\tcontainer: 6379,\n\t\t\t\tdescription: \"bad\",\n\t\t\t}),\n\t\t).toThrow();\n\t});\n});\n\ndescribe(\"VolumeMappingSchema\", () => {\n\tit(\"accepts valid volume mapping\", () => {\n\t\tconst result = VolumeMappingSchema.parse({\n\t\t\tname: \"redis-data\",\n\t\t\tcontainerPath: \"/data\",\n\t\t\tdescription: \"Redis persistent data\",\n\t\t});\n\t\texpect(result.name).toBe(\"redis-data\");\n\t});\n\n\tit(\"rejects empty name\", () => {\n\t\texpect(() =>\n\t\t\tVolumeMappingSchema.parse({\n\t\t\t\tname: \"\",\n\t\t\t\tcontainerPath: \"/data\",\n\t\t\t\tdescription: \"bad\",\n\t\t\t}),\n\t\t).toThrow();\n\t});\n});\n\ndescribe(\"EnvVariableSchema\", () => {\n\tit(\"accepts valid env variable\", () => {\n\t\tconst result = EnvVariableSchema.parse({\n\t\t\tkey: \"REDIS_PASSWORD\",\n\t\t\tdefaultValue: \"changeme\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Redis password\",\n\t\t\trequired: true,\n\t\t});\n\t\texpect(result.secret).toBe(true);\n\t});\n\n\tit(\"defaults secret to false\", () => {\n\t\tconst result = EnvVariableSchema.parse({\n\t\t\tkey: \"REDIS_HOST\",\n\t\t\tdefaultValue: \"redis\",\n\t\t\tdescription: \"Redis host\",\n\t\t});\n\t\texpect(result.secret).toBe(false);\n\t\texpect(result.required).toBe(true);\n\t});\n});\n\ndescribe(\"HealthCheckSchema\", () => {\n\tit(\"accepts valid healthcheck with defaults\", () => {\n\t\tconst result = HealthCheckSchema.parse({\n\t\t\ttest: \"redis-cli ping\",\n\t\t});\n\t\texpect(result.interval).toBe(\"30s\");\n\t\texpect(result.timeout).toBe(\"10s\");\n\t\texpect(result.retries).toBe(3);\n\t});\n});\n\ndescribe(\"GenerationInputSchema\", () => {\n\tit(\"accepts valid generation input\", () => {\n\t\tconst result = GenerationInputSchema.parse({\n\t\t\tprojectName: \"my-openclaw-stack\",\n\t\t\tservices: [\"redis\", \"qdrant\"],\n\t\t\tskillPacks: [\"research-agent\"],\n\t\t\tproxy: \"caddy\",\n\t\t\tdomain: \"openclaw.example.com\",\n\t\t});\n\t\texpect(result.projectName).toBe(\"my-openclaw-stack\");\n\t\texpect(result.gpu).toBe(false);\n\t});\n\n\tit(\"rejects invalid project names\", () => {\n\t\texpect(() => GenerationInputSchema.parse({ projectName: \"-bad-name\" })).toThrow();\n\t\texpect(() => GenerationInputSchema.parse({ projectName: \"Bad Name\" })).toThrow();\n\t\texpect(() => GenerationInputSchema.parse({ projectName: \"has spaces\" })).toThrow();\n\t});\n\n\tit(\"accepts single-char project name\", () => {\n\t\tconst result = GenerationInputSchema.parse({ projectName: \"a\" });\n\t\texpect(result.projectName).toBe(\"a\");\n\t});\n\n\tit(\"applies defaults\", () => {\n\t\tconst result = GenerationInputSchema.parse({ projectName: \"test\" });\n\t\texpect(result.services).toEqual([]);\n\t\texpect(result.skillPacks).toEqual([]);\n\t\texpect(result.proxy).toBe(\"none\");\n\t\texpect(result.gpu).toBe(false);\n\t\texpect(result.platform).toBe(\"linux/amd64\");\n\t\texpect(result.deployment).toBe(\"local\");\n\t\texpect(result.deploymentType).toBe(\"docker\");\n\t\texpect(result.generateSecrets).toBe(true);\n\t\texpect(result.openclawVersion).toBe(\"latest\");\n\t});\n\n\tit(\"accepts deploymentType bare-metal and extended platform\", () => {\n\t\tconst result = GenerationInputSchema.parse({\n\t\t\tprojectName: \"my-stack\",\n\t\t\tservices: [\"redis\"],\n\t\t\tdeploymentType: \"bare-metal\",\n\t\t\tplatform: \"windows/amd64\",\n\t\t});\n\t\texpect(result.deploymentType).toBe(\"bare-metal\");\n\t\texpect(result.platform).toBe(\"windows/amd64\");\n\t});\n\n\tit(\"accepts platform macos/arm64\", () => {\n\t\tconst result = GenerationInputSchema.parse({\n\t\t\tprojectName: \"my-stack\",\n\t\t\tplatform: \"macos/arm64\",\n\t\t});\n\t\texpect(result.platform).toBe(\"macos/arm64\");\n\t});\n});\n\ndescribe(\"ServiceDefinitionSchema\", () => {\n\tconst validDef = {\n\t\tid: \"redis\",\n\t\tname: \"Redis\",\n\t\tdescription: \"In-memory data store\",\n\t\tcategory: \"database\",\n\t\ticon: \"🔴\",\n\t\timage: \"redis\",\n\t\timageTag: \"7-alpine\",\n\t\tports: [{ host: 6379, container: 6379, description: \"Redis port\", exposed: true }],\n\t\tvolumes: [{ name: \"redis-data\", containerPath: \"/data\", description: \"Data\" }],\n\t\tenvironment: [],\n\t\trestartPolicy: \"unless-stopped\",\n\t\tnetworks: [\"openclaw-network\"],\n\t\tskills: [],\n\t\topenclawEnvVars: [],\n\t\tdocsUrl: \"https://redis.io/docs\",\n\t\ttags: [\"cache\", \"database\"],\n\t\tmaturity: \"stable\",\n\t};\n\n\tit(\"accepts valid service definition\", () => {\n\t\tconst result = ServiceDefinitionSchema.parse(validDef);\n\t\texpect(result.id).toBe(\"redis\");\n\t});\n\n\tit(\"rejects invalid id format\", () => {\n\t\texpect(() => ServiceDefinitionSchema.parse({ ...validDef, id: \"Bad_Id\" })).toThrow();\n\t});\n\n\tit(\"defaults arrays and booleans correctly\", () => {\n\t\tconst minimal = {\n\t\t\tid: \"test\",\n\t\t\tname: \"Test\",\n\t\t\tdescription: \"Test service\",\n\t\t\tcategory: \"database\",\n\t\t\ticon: \"🧪\",\n\t\t\timage: \"test\",\n\t\t\timageTag: \"latest\",\n\t\t\tdocsUrl: \"https://example.com\",\n\t\t};\n\t\tconst result = ServiceDefinitionSchema.parse(minimal);\n\t\texpect(result.ports).toEqual([]);\n\t\texpect(result.volumes).toEqual([]);\n\t\texpect(result.requires).toEqual([]);\n\t\texpect(result.conflictsWith).toEqual([]);\n\t\texpect(result.gpuRequired).toBe(false);\n\t});\n\n\tit(\"accepts optional mandatory field and defaults to false when omitted\", () => {\n\t\tconst withMandatory = { ...validDef, mandatory: true };\n\t\tconst result = ServiceDefinitionSchema.parse(withMandatory);\n\t\texpect(result.mandatory).toBe(true);\n\t});\n\n\tit(\"omitting mandatory leaves it undefined or false (schema default false)\", () => {\n\t\tconst result = ServiceDefinitionSchema.parse(validDef);\n\t\texpect(result.mandatory !== true).toBe(true); // false or undefined both mean not mandatory\n\t});\n\n\tit(\"accepts nativeSupported and nativeRecipes for bare-metal\", () => {\n\t\tconst withNative = {\n\t\t\t...validDef,\n\t\t\tnativeSupported: true,\n\t\t\tnativeRecipes: [\n\t\t\t\t{\n\t\t\t\t\tplatform: \"linux\",\n\t\t\t\t\tinstallSteps: [\"apt-get install -y redis-server\"],\n\t\t\t\t\tstartCommand: \"systemctl start redis-server\",\n\t\t\t\t\tstopCommand: \"systemctl stop redis-server\",\n\t\t\t\t\tsystemdUnit: \"redis-server\",\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\tconst result = ServiceDefinitionSchema.parse(withNative);\n\t\texpect(result.nativeSupported).toBe(true);\n\t\texpect(result.nativeRecipes).toHaveLength(1);\n\t\texpect(result.nativeRecipes![0].platform).toBe(\"linux\");\n\t\texpect(result.nativeRecipes![0].startCommand).toBe(\"systemctl start redis-server\");\n\t});\n});\n\ndescribe(\"SkillPackSchema\", () => {\n\tit(\"accepts valid skill pack\", () => {\n\t\tconst result = SkillPackSchema.parse({\n\t\t\tid: \"research-agent\",\n\t\t\tname: \"Research Agent\",\n\t\t\tdescription: \"Research agent pack\",\n\t\t\trequiredServices: [\"qdrant\", \"searxng\", \"browserless\"],\n\t\t\tskills: [\"qdrant-memory\", \"searxng-search\", \"browserless-browse\"],\n\t\t});\n\t\texpect(result.requiredServices).toHaveLength(3);\n\t});\n\n\tit(\"rejects empty required services\", () => {\n\t\texpect(() =>\n\t\t\tSkillPackSchema.parse({\n\t\t\t\tid: \"empty\",\n\t\t\t\tname: \"Empty\",\n\t\t\t\tdescription: \"Bad\",\n\t\t\t\trequiredServices: [],\n\t\t\t\tskills: [],\n\t\t\t}),\n\t\t).toThrow();\n\t});\n});\n\ndescribe(\"PresetSchema\", () => {\n\tit(\"accepts valid preset\", () => {\n\t\tconst result = PresetSchema.parse({\n\t\t\tid: \"minimal\",\n\t\t\tname: \"Minimal\",\n\t\t\tdescription: \"OpenClaw + Redis\",\n\t\t\tservices: [\"redis\"],\n\t\t\testimatedMemoryMB: 1024,\n\t\t});\n\t\texpect(result.skillPacks).toEqual([]);\n\t});\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { n as describe, r as it, t as globalExpect } from "./vi.2VT5v0um-C_jmO7m2.mjs";
1
+ import { n as describe, r as it, t as globalExpect } from "./test.CTcmp4Su-ClCHJ3FA.mjs";
2
2
  import { EnvVariableSchema, GenerationInputSchema, HealthCheckSchema, PortMappingSchema, PresetSchema, ServiceCategorySchema, ServiceDefinitionSchema, SkillPackSchema, VolumeMappingSchema } from "./schema.mjs";
3
3
  //#region src/schema.test.ts
4
4
  describe("ServiceCategorySchema", () => {
@@ -78,7 +78,10 @@ const browserlessDefinition = {
78
78
  recommends: [],
79
79
  conflictsWith: [],
80
80
  minMemoryMB: 512,
81
- gpuRequired: false
81
+ gpuRequired: false,
82
+ capDropCompatible: false,
83
+ proxyPath: "/browserless",
84
+ firstBootCapabilities: ["SYS_ADMIN"]
82
85
  };
83
86
  //#endregion
84
87
  exports.browserlessDefinition = browserlessDefinition;
@@ -1 +1 @@
1
- {"version":3,"file":"browserless.cjs","names":[],"sources":["../../../src/services/definitions/browserless.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const browserlessDefinition: ServiceDefinition = {\n\tid: \"browserless\",\n\tname: \"Browserless\",\n\tdescription:\n\t\t\"Headless Chrome browser-as-a-service for web scraping, PDF generation, screenshots, and browser automation at scale.\",\n\tcategory: \"browser\",\n\ticon: \"🌐\",\n\n\timage: \"browserless/chrome\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3010,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Browserless HTTP and WebSocket API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"TOKEN\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Authentication token for Browserless API access\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"MAX_CONCURRENT_SESSIONS\",\n\t\t\tdefaultValue: \"5\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Maximum number of concurrent browser sessions\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3000/?token=$TOKEN || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"browserless-browse\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"BROWSERLESS_HOST\",\n\t\t\tdefaultValue: \"browserless\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_TOKEN\",\n\t\t\tdefaultValue: \"${TOKEN}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Browserless API token for OpenClaw (references service token)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://www.browserless.io/docs/\",\n\ttags: [\"browser\", \"scraping\", \"pdf\", \"screenshots\", \"automation\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n};\n"],"mappings":";;AAEA,MAAa,wBAA2C;CACvD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,EAAE;CACX,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAsB,aAAa;EAAM,CAAC;CAC9D,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EAAC;EAAW;EAAY;EAAO;EAAe;EAAa;CACjE,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
1
+ {"version":3,"file":"browserless.cjs","names":[],"sources":["../../../src/services/definitions/browserless.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const browserlessDefinition: ServiceDefinition = {\n\tid: \"browserless\",\n\tname: \"Browserless\",\n\tdescription:\n\t\t\"Headless Chrome browser-as-a-service for web scraping, PDF generation, screenshots, and browser automation at scale.\",\n\tcategory: \"browser\",\n\ticon: \"🌐\",\n\n\timage: \"browserless/chrome\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3010,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Browserless HTTP and WebSocket API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"TOKEN\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Authentication token for Browserless API access\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"MAX_CONCURRENT_SESSIONS\",\n\t\t\tdefaultValue: \"5\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Maximum number of concurrent browser sessions\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3000/?token=$TOKEN || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"browserless-browse\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"BROWSERLESS_HOST\",\n\t\t\tdefaultValue: \"browserless\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_TOKEN\",\n\t\t\tdefaultValue: \"${TOKEN}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Browserless API token for OpenClaw (references service token)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://www.browserless.io/docs/\",\n\ttags: [\"browser\", \"scraping\", \"pdf\", \"screenshots\", \"automation\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\tcapDropCompatible: false,\n\tproxyPath: \"/browserless\",\n\tfirstBootCapabilities: [\"SYS_ADMIN\"],\n};\n"],"mappings":";;AAEA,MAAa,wBAA2C;CACvD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,EAAE;CACX,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAsB,aAAa;EAAM,CAAC;CAC9D,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EAAC;EAAW;EAAY;EAAO;EAAe;EAAa;CACjE,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,uBAAuB,CAAC,YAAY;CACpC"}
@@ -77,7 +77,10 @@ const browserlessDefinition = {
77
77
  recommends: [],
78
78
  conflictsWith: [],
79
79
  minMemoryMB: 512,
80
- gpuRequired: false
80
+ gpuRequired: false,
81
+ capDropCompatible: false,
82
+ proxyPath: "/browserless",
83
+ firstBootCapabilities: ["SYS_ADMIN"]
81
84
  };
82
85
  //#endregion
83
86
  export { browserlessDefinition };
@@ -1 +1 @@
1
- {"version":3,"file":"browserless.mjs","names":[],"sources":["../../../src/services/definitions/browserless.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const browserlessDefinition: ServiceDefinition = {\n\tid: \"browserless\",\n\tname: \"Browserless\",\n\tdescription:\n\t\t\"Headless Chrome browser-as-a-service for web scraping, PDF generation, screenshots, and browser automation at scale.\",\n\tcategory: \"browser\",\n\ticon: \"🌐\",\n\n\timage: \"browserless/chrome\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3010,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Browserless HTTP and WebSocket API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"TOKEN\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Authentication token for Browserless API access\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"MAX_CONCURRENT_SESSIONS\",\n\t\t\tdefaultValue: \"5\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Maximum number of concurrent browser sessions\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3000/?token=$TOKEN || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"browserless-browse\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"BROWSERLESS_HOST\",\n\t\t\tdefaultValue: \"browserless\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_TOKEN\",\n\t\t\tdefaultValue: \"${TOKEN}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Browserless API token for OpenClaw (references service token)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://www.browserless.io/docs/\",\n\ttags: [\"browser\", \"scraping\", \"pdf\", \"screenshots\", \"automation\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n};\n"],"mappings":";AAEA,MAAa,wBAA2C;CACvD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,EAAE;CACX,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAsB,aAAa;EAAM,CAAC;CAC9D,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EAAC;EAAW;EAAY;EAAO;EAAe;EAAa;CACjE,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb"}
1
+ {"version":3,"file":"browserless.mjs","names":[],"sources":["../../../src/services/definitions/browserless.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const browserlessDefinition: ServiceDefinition = {\n\tid: \"browserless\",\n\tname: \"Browserless\",\n\tdescription:\n\t\t\"Headless Chrome browser-as-a-service for web scraping, PDF generation, screenshots, and browser automation at scale.\",\n\tcategory: \"browser\",\n\ticon: \"🌐\",\n\n\timage: \"browserless/chrome\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3010,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"Browserless HTTP and WebSocket API\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"TOKEN\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Authentication token for Browserless API access\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"MAX_CONCURRENT_SESSIONS\",\n\t\t\tdefaultValue: \"5\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Maximum number of concurrent browser sessions\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"curl -sf http://localhost:3000/?token=$TOKEN || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [{ skillId: \"browserless-browse\", autoInstall: true }],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"BROWSERLESS_HOST\",\n\t\t\tdefaultValue: \"browserless\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless hostname for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Browserless port for OpenClaw\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"BROWSERLESS_TOKEN\",\n\t\t\tdefaultValue: \"${TOKEN}\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Browserless API token for OpenClaw (references service token)\",\n\t\t\trequired: true,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://www.browserless.io/docs/\",\n\ttags: [\"browser\", \"scraping\", \"pdf\", \"screenshots\", \"automation\"],\n\tmaturity: \"stable\",\n\n\trequires: [],\n\trecommends: [],\n\tconflictsWith: [],\n\n\tminMemoryMB: 512,\n\tgpuRequired: false,\n\tcapDropCompatible: false,\n\tproxyPath: \"/browserless\",\n\tfirstBootCapabilities: [\"SYS_ADMIN\"],\n};\n"],"mappings":";AAEA,MAAa,wBAA2C;CACvD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,EAAE;CACX,aAAa,CACZ;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,CAAC;EAAE,SAAS;EAAsB,aAAa;EAAM,CAAC;CAC9D,iBAAiB;EAChB;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CAED,SAAS;CACT,MAAM;EAAC;EAAW;EAAY;EAAO;EAAe;EAAa;CACjE,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,EAAE;CACd,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,uBAAuB,CAAC,YAAY;CACpC"}
@@ -0,0 +1,142 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ //#region src/services/definitions/burnlink.ts
3
+ const burnlinkDefinition = {
4
+ id: "burnlink",
5
+ name: "BurnLink",
6
+ description: "Privacy-first, zero-knowledge file sharing with end-to-end browser-side AES-256-GCM encryption, one-time downloads, view-once mode, and brute-force protection.",
7
+ category: "storage",
8
+ icon: "🔥",
9
+ image: "diopisemou/burnlink",
10
+ imageTag: "latest",
11
+ ports: [{
12
+ host: 3250,
13
+ container: 3e3,
14
+ description: "BurnLink web interface",
15
+ exposed: true
16
+ }],
17
+ volumes: [],
18
+ environment: [
19
+ {
20
+ key: "PORT",
21
+ defaultValue: "3000",
22
+ secret: false,
23
+ description: "Server listen port",
24
+ required: false
25
+ },
26
+ {
27
+ key: "SUPABASE_URL",
28
+ defaultValue: "",
29
+ secret: false,
30
+ description: "Supabase project URL for metadata storage",
31
+ required: true
32
+ },
33
+ {
34
+ key: "SUPABASE_SERVICE_ROLE_KEY",
35
+ defaultValue: "",
36
+ secret: true,
37
+ description: "Supabase service role key",
38
+ required: true
39
+ },
40
+ {
41
+ key: "R2_ACCOUNT_ID",
42
+ defaultValue: "",
43
+ secret: false,
44
+ description: "Cloudflare R2 account ID (or MinIO endpoint for self-hosted)",
45
+ required: true
46
+ },
47
+ {
48
+ key: "R2_ACCESS_KEY_ID",
49
+ defaultValue: "",
50
+ secret: true,
51
+ description: "S3-compatible storage access key",
52
+ required: true
53
+ },
54
+ {
55
+ key: "R2_SECRET_ACCESS_KEY",
56
+ defaultValue: "",
57
+ secret: true,
58
+ description: "S3-compatible storage secret key",
59
+ required: true
60
+ },
61
+ {
62
+ key: "R2_BUCKET_NAME",
63
+ defaultValue: "burnlink",
64
+ secret: false,
65
+ description: "Storage bucket name for encrypted files",
66
+ required: true
67
+ },
68
+ {
69
+ key: "CANONICAL_BASE_URL",
70
+ defaultValue: "",
71
+ secret: false,
72
+ description: "Public URL for share links (e.g., https://burn.example.com)",
73
+ required: false
74
+ },
75
+ {
76
+ key: "MAX_UPLOAD_BYTES",
77
+ defaultValue: "1073741824",
78
+ secret: false,
79
+ description: "Max file upload size in bytes (default 1 GB)",
80
+ required: false
81
+ },
82
+ {
83
+ key: "NODE_ENV",
84
+ defaultValue: "production",
85
+ secret: false,
86
+ description: "Node environment (production enables rate limiting)",
87
+ required: false
88
+ }
89
+ ],
90
+ healthcheck: {
91
+ test: "wget -q --spider http://localhost:3000/ || exit 1",
92
+ interval: "30s",
93
+ timeout: "10s",
94
+ retries: 3,
95
+ startPeriod: "15s"
96
+ },
97
+ dependsOn: [],
98
+ restartPolicy: "unless-stopped",
99
+ networks: ["openclaw-network"],
100
+ skills: [],
101
+ openclawEnvVars: [{
102
+ key: "BURNLINK_HOST",
103
+ defaultValue: "burnlink",
104
+ secret: false,
105
+ description: "BurnLink hostname",
106
+ required: false
107
+ }, {
108
+ key: "BURNLINK_PORT",
109
+ defaultValue: "3000",
110
+ secret: false,
111
+ description: "BurnLink internal port",
112
+ required: false
113
+ }],
114
+ docsUrl: "https://github.com/diopisemou/BurnLink",
115
+ tags: [
116
+ "file-sharing",
117
+ "encryption",
118
+ "privacy",
119
+ "zero-knowledge",
120
+ "self-destruct"
121
+ ],
122
+ maturity: "beta",
123
+ requires: [],
124
+ recommends: ["supabase", "minio"],
125
+ conflictsWith: [],
126
+ minMemoryMB: 128,
127
+ gpuRequired: false,
128
+ capDropCompatible: true,
129
+ proxyPath: "/burnlink",
130
+ envQuirks: [{
131
+ key: "R2_SECRET_ACCESS_KEY",
132
+ issue: "min_length",
133
+ fix: {
134
+ type: "generate_base64url",
135
+ minBytes: 24
136
+ }
137
+ }]
138
+ };
139
+ //#endregion
140
+ exports.burnlinkDefinition = burnlinkDefinition;
141
+
142
+ //# sourceMappingURL=burnlink.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"burnlink.cjs","names":[],"sources":["../../../src/services/definitions/burnlink.ts"],"sourcesContent":["import type { ServiceDefinition } from \"../../types.js\";\n\nexport const burnlinkDefinition: ServiceDefinition = {\n\tid: \"burnlink\",\n\tname: \"BurnLink\",\n\tdescription:\n\t\t\"Privacy-first, zero-knowledge file sharing with end-to-end browser-side AES-256-GCM encryption, one-time downloads, view-once mode, and brute-force protection.\",\n\tcategory: \"storage\",\n\ticon: \"🔥\",\n\n\timage: \"diopisemou/burnlink\",\n\timageTag: \"latest\",\n\tports: [\n\t\t{\n\t\t\thost: 3250,\n\t\t\tcontainer: 3000,\n\t\t\tdescription: \"BurnLink web interface\",\n\t\t\texposed: true,\n\t\t},\n\t],\n\tvolumes: [],\n\tenvironment: [\n\t\t{\n\t\t\tkey: \"PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Server listen port\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"SUPABASE_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Supabase project URL for metadata storage\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"SUPABASE_SERVICE_ROLE_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"Supabase service role key\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"R2_ACCOUNT_ID\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Cloudflare R2 account ID (or MinIO endpoint for self-hosted)\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"R2_ACCESS_KEY_ID\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"S3-compatible storage access key\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"R2_SECRET_ACCESS_KEY\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: true,\n\t\t\tdescription: \"S3-compatible storage secret key\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"R2_BUCKET_NAME\",\n\t\t\tdefaultValue: \"burnlink\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Storage bucket name for encrypted files\",\n\t\t\trequired: true,\n\t\t},\n\t\t{\n\t\t\tkey: \"CANONICAL_BASE_URL\",\n\t\t\tdefaultValue: \"\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Public URL for share links (e.g., https://burn.example.com)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"MAX_UPLOAD_BYTES\",\n\t\t\tdefaultValue: \"1073741824\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Max file upload size in bytes (default 1 GB)\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"NODE_ENV\",\n\t\t\tdefaultValue: \"production\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"Node environment (production enables rate limiting)\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\thealthcheck: {\n\t\ttest: \"wget -q --spider http://localhost:3000/ || exit 1\",\n\t\tinterval: \"30s\",\n\t\ttimeout: \"10s\",\n\t\tretries: 3,\n\t\tstartPeriod: \"15s\",\n\t},\n\tdependsOn: [],\n\trestartPolicy: \"unless-stopped\",\n\tnetworks: [\"openclaw-network\"],\n\n\tskills: [],\n\topenclawEnvVars: [\n\t\t{\n\t\t\tkey: \"BURNLINK_HOST\",\n\t\t\tdefaultValue: \"burnlink\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"BurnLink hostname\",\n\t\t\trequired: false,\n\t\t},\n\t\t{\n\t\t\tkey: \"BURNLINK_PORT\",\n\t\t\tdefaultValue: \"3000\",\n\t\t\tsecret: false,\n\t\t\tdescription: \"BurnLink internal port\",\n\t\t\trequired: false,\n\t\t},\n\t],\n\n\tdocsUrl: \"https://github.com/diopisemou/BurnLink\",\n\ttags: [\"file-sharing\", \"encryption\", \"privacy\", \"zero-knowledge\", \"self-destruct\"],\n\tmaturity: \"beta\",\n\n\trequires: [],\n\trecommends: [\"supabase\", \"minio\"],\n\tconflictsWith: [],\n\n\tminMemoryMB: 128,\n\tgpuRequired: false,\n\tcapDropCompatible: true,\n\tproxyPath: \"/burnlink\",\n\tenvQuirks: [\n\t\t{\n\t\t\tkey: \"R2_SECRET_ACCESS_KEY\",\n\t\t\tissue: \"min_length\" as const,\n\t\t\tfix: { type: \"generate_base64url\" as const, minBytes: 24 },\n\t\t},\n\t],\n};\n"],"mappings":";;AAEA,MAAa,qBAAwC;CACpD,IAAI;CACJ,MAAM;CACN,aACC;CACD,UAAU;CACV,MAAM;CAEN,OAAO;CACP,UAAU;CACV,OAAO,CACN;EACC,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;EACT,CACD;CACD,SAAS,EAAE;CACX,aAAa;EACZ;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;GACC,KAAK;GACL,cAAc;GACd,QAAQ;GACR,aAAa;GACb,UAAU;GACV;EACD;CACD,aAAa;EACZ,MAAM;EACN,UAAU;EACV,SAAS;EACT,SAAS;EACT,aAAa;EACb;CACD,WAAW,EAAE;CACb,eAAe;CACf,UAAU,CAAC,mBAAmB;CAE9B,QAAQ,EAAE;CACV,iBAAiB,CAChB;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,EACD;EACC,KAAK;EACL,cAAc;EACd,QAAQ;EACR,aAAa;EACb,UAAU;EACV,CACD;CAED,SAAS;CACT,MAAM;EAAC;EAAgB;EAAc;EAAW;EAAkB;EAAgB;CAClF,UAAU;CAEV,UAAU,EAAE;CACZ,YAAY,CAAC,YAAY,QAAQ;CACjC,eAAe,EAAE;CAEjB,aAAa;CACb,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,WAAW,CACV;EACC,KAAK;EACL,OAAO;EACP,KAAK;GAAE,MAAM;GAA+B,UAAU;GAAI;EAC1D,CACD;CACD"}
@@ -0,0 +1,7 @@
1
+ import { ServiceDefinition } from "../../types.cjs";
2
+
3
+ //#region src/services/definitions/burnlink.d.ts
4
+ declare const burnlinkDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { burnlinkDefinition };
7
+ //# sourceMappingURL=burnlink.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"burnlink.d.cts","names":[],"sources":["../../../src/services/definitions/burnlink.ts"],"mappings":";;;cAEa,kBAAA,EAAoB,iBAAA"}
@@ -0,0 +1,7 @@
1
+ import { ServiceDefinition } from "../../types.mjs";
2
+
3
+ //#region src/services/definitions/burnlink.d.ts
4
+ declare const burnlinkDefinition: ServiceDefinition;
5
+ //#endregion
6
+ export { burnlinkDefinition };
7
+ //# sourceMappingURL=burnlink.d.mts.map