@liquidmetal-ai/raindrop 0.13.0 → 0.15.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 (250) hide show
  1. package/README.md +327 -89
  2. package/bundle/build-CBEGQPJT.js +62 -0
  3. package/bundle/{chunk-IEF2XC25.js → chunk-2PH3PHH3.js} +5 -3
  4. package/bundle/{chunk-4HZ22KOV.js → chunk-3CMR7ES5.js} +4 -4
  5. package/bundle/{chunk-JSBM2JYW.js → chunk-3EYKCHIK.js} +1 -1
  6. package/bundle/chunk-5XHDP4VK.js +1697 -0
  7. package/bundle/{chunk-TSQK4HH6.js → chunk-674GMSXY.js} +1 -1
  8. package/bundle/{chunk-PS3WZBDF.js → chunk-6L4V66WZ.js} +1105 -2728
  9. package/bundle/{chunk-5245CEUM.js → chunk-AGG7JZVH.js} +2 -2
  10. package/bundle/{chunk-3GFKUF5D.js → chunk-B3IY2XS6.js} +4 -2
  11. package/bundle/{chunk-WIDI65NO.js → chunk-CBAXTRCS.js} +1 -1
  12. package/bundle/{chunk-JLVDTXO2.js → chunk-DPV5HIG7.js} +4 -4
  13. package/bundle/{chunk-36GNZK4A.js → chunk-EVXLXWP7.js} +1 -1
  14. package/bundle/{chunk-4YVU5KEQ.js → chunk-HN3AAKRY.js} +4 -2
  15. package/bundle/{chunk-NVNEQXHN.js → chunk-IGLE4Y3B.js} +7 -5
  16. package/bundle/{chunk-FGSYWVBA.js → chunk-IQ6HFRA6.js} +1 -1
  17. package/bundle/{chunk-O3QZDJ75.js → chunk-JQONDSHY.js} +2 -2
  18. package/bundle/{chunk-W4IPOFZC.js → chunk-KADMFJLN.js} +8 -6
  19. package/bundle/chunk-KG5BLUGU.js +246 -0
  20. package/bundle/{chunk-V5LHJTYS.js → chunk-KLOYSTZY.js} +13 -2
  21. package/bundle/{chunk-ETC5VU7H.js → chunk-KXHVSLAI.js} +1 -1
  22. package/bundle/{chunk-Y4WFGNPM.js → chunk-L6FRQULN.js} +1 -1
  23. package/bundle/{chunk-3QCVYSRU.js → chunk-LT3BFQ4O.js} +1 -1
  24. package/bundle/{chunk-KQZJHBNG.js → chunk-MBLKVNI5.js} +1 -1
  25. package/bundle/{chunk-6AIUQUUM.js → chunk-MFMVJZW6.js} +71 -15
  26. package/bundle/{chunk-25T7MEKO.js → chunk-MJBLNWG3.js} +1 -1
  27. package/bundle/{chunk-MSJ33O5Y.js → chunk-NRCQIE3Z.js} +95 -115
  28. package/bundle/{chunk-XKKPPSPC.js → chunk-OCYTN4IH.js} +2 -2
  29. package/bundle/{chunk-2GAMWFJE.js → chunk-QEF5D4VE.js} +1 -1
  30. package/bundle/{chunk-4B3QYXBA.js → chunk-T7MQCLXF.js} +5 -3
  31. package/bundle/{chunk-LDFYPOXJ.js → chunk-TFQY5TSY.js} +1 -1
  32. package/bundle/{chunk-BWK4MC7Y.js → chunk-USZXZZAR.js} +8 -6
  33. package/bundle/{chunk-ER2RCPCY.js → chunk-V54KHS5B.js} +2 -2
  34. package/bundle/{chunk-YSKASURB.js → chunk-V6J23FL2.js} +1 -1
  35. package/bundle/{chunk-UHSTDJ7X.js → chunk-VN2QYX4C.js} +1 -1
  36. package/bundle/{chunk-Z4OWKG7J.js → chunk-VOT5MMEY.js} +1 -1
  37. package/bundle/{chunk-W6GU26WO.js → chunk-WG6BDFPZ.js} +1 -1
  38. package/bundle/{chunk-AK77X5GL.js → chunk-XX74I5RK.js} +4 -2
  39. package/bundle/{chunk-6BT265R3.js → chunk-YQCRWPNI.js} +1 -1
  40. package/bundle/commands/annotation/get.js +3 -3
  41. package/bundle/commands/annotation/list.js +3 -3
  42. package/bundle/commands/annotation/put.js +3 -3
  43. package/bundle/commands/auth/apikey.js +2 -2
  44. package/bundle/commands/auth/list.js +2 -2
  45. package/bundle/commands/auth/login.js +2 -2
  46. package/bundle/commands/auth/logout.js +2 -2
  47. package/bundle/commands/auth/select.js +3 -3
  48. package/bundle/commands/bucket/create-credential.js +2 -2
  49. package/bundle/commands/bucket/delete-credential.js +2 -2
  50. package/bundle/commands/bucket/get-credential.js +2 -2
  51. package/bundle/commands/bucket/list-credentials.js +2 -2
  52. package/bundle/commands/build/actor/setup.js +124 -0
  53. package/bundle/commands/build/branch.js +10 -10
  54. package/bundle/commands/build/bucket-events/setup.js +146 -0
  55. package/bundle/commands/build/checkout.js +8 -8
  56. package/bundle/commands/build/clone.js +6 -6
  57. package/bundle/commands/build/delete.js +8 -8
  58. package/bundle/commands/build/deploy.js +10 -10
  59. package/bundle/commands/build/env/get.js +3 -3
  60. package/bundle/commands/build/env/list.js +2 -2
  61. package/bundle/commands/build/env/set.js +3 -3
  62. package/bundle/commands/build/env.js +2 -2
  63. package/bundle/commands/build/features.js +192 -0
  64. package/bundle/commands/build/find.js +4 -4
  65. package/bundle/commands/build/generate.js +52 -3
  66. package/bundle/commands/build/init-workspace.js +3 -3
  67. package/bundle/commands/build/init.js +15 -3
  68. package/bundle/commands/build/list.js +5 -5
  69. package/bundle/commands/build/queue/setup.js +133 -0
  70. package/bundle/commands/build/sandbox.js +6 -6
  71. package/bundle/commands/build/smartbucket/setup.js +165 -0
  72. package/bundle/commands/build/smartmemory/setup.js +171 -0
  73. package/bundle/commands/build/smartsql/setup.js +167 -0
  74. package/bundle/commands/build/start.js +2 -2
  75. package/bundle/commands/build/status.js +5 -5
  76. package/bundle/commands/build/stop.js +2 -2
  77. package/bundle/commands/build/stripe/dashboard.js +3 -3
  78. package/bundle/commands/build/stripe/onboard.js +3 -3
  79. package/bundle/commands/build/stripe/setup.js +3 -3
  80. package/bundle/commands/build/stripe/start.js +14 -14
  81. package/bundle/commands/build/stripe/status.js +3 -3
  82. package/bundle/commands/build/stripe/subscription/create.js +4 -4
  83. package/bundle/commands/build/stripe/subscription/get.js +4 -4
  84. package/bundle/commands/build/stripe/subscription/update.js +4 -4
  85. package/bundle/commands/build/tools/check.js +2 -2
  86. package/bundle/commands/build/tools/fmt.js +2 -2
  87. package/bundle/commands/build/unsandbox.js +6 -6
  88. package/bundle/commands/build/upload.js +5 -5
  89. package/bundle/commands/build/validate.js +85 -14
  90. package/bundle/commands/build/workos/delete.js +6 -6
  91. package/bundle/commands/build/workos/env/attach.js +3 -3
  92. package/bundle/commands/build/workos/env/attached.js +3 -3
  93. package/bundle/commands/build/workos/env/create.js +3 -3
  94. package/bundle/commands/build/workos/env/delete.js +3 -3
  95. package/bundle/commands/build/workos/env/detach.js +3 -3
  96. package/bundle/commands/build/workos/env/dev-login.js +3 -3
  97. package/bundle/commands/build/workos/env/get.js +3 -3
  98. package/bundle/commands/build/workos/env/list.js +3 -3
  99. package/bundle/commands/build/workos/env/set.js +3 -3
  100. package/bundle/commands/build/workos/invite.js +3 -3
  101. package/bundle/commands/build/workos/jwt.js +172 -0
  102. package/bundle/commands/build/workos/setup.js +3 -3
  103. package/bundle/commands/build/workos/status.js +3 -3
  104. package/bundle/commands/dns/create.js +2 -2
  105. package/bundle/commands/dns/delete.js +6 -6
  106. package/bundle/commands/dns/get.js +6 -6
  107. package/bundle/commands/dns/list.js +3 -3
  108. package/bundle/commands/dns/records/create.js +2 -2
  109. package/bundle/commands/dns/records/delete.js +3 -3
  110. package/bundle/commands/dns/records/get.js +2 -2
  111. package/bundle/commands/dns/records/list.js +2 -2
  112. package/bundle/commands/dns/records/update.js +2 -2
  113. package/bundle/commands/doctor.js +309 -0
  114. package/bundle/commands/logs/query.js +3 -3
  115. package/bundle/commands/logs/tail.js +3 -3
  116. package/bundle/commands/mcp/install-claude.js +2 -2
  117. package/bundle/commands/mcp/install-gemini.js +2 -2
  118. package/bundle/commands/mcp/install-goose.js +2 -2
  119. package/bundle/commands/mcp/status.js +2 -2
  120. package/bundle/commands/object/delete.js +5 -37
  121. package/bundle/commands/object/get.js +5 -37
  122. package/bundle/commands/object/list.js +7 -39
  123. package/bundle/commands/object/put.js +5 -37
  124. package/bundle/commands/query/chunk-search.js +14 -46
  125. package/bundle/commands/query/document.js +17 -55
  126. package/bundle/commands/query/events.js +2 -2
  127. package/bundle/commands/query/reindex.js +2 -2
  128. package/bundle/commands/query/search.js +14 -46
  129. package/bundle/commands/tail.js +2 -2
  130. package/bundle/index.js +1 -1
  131. package/dist/commands/build/actor/setup.d.ts +22 -0
  132. package/dist/commands/build/actor/setup.d.ts.map +1 -0
  133. package/dist/commands/build/actor/setup.js +116 -0
  134. package/dist/commands/build/bucket-events/setup.d.ts +22 -0
  135. package/dist/commands/build/bucket-events/setup.d.ts.map +1 -0
  136. package/dist/commands/build/bucket-events/setup.js +134 -0
  137. package/dist/commands/build/features.d.ts +19 -0
  138. package/dist/commands/build/features.d.ts.map +1 -0
  139. package/dist/commands/build/features.js +97 -0
  140. package/dist/commands/build/generate.d.ts +2 -0
  141. package/dist/commands/build/generate.d.ts.map +1 -1
  142. package/dist/commands/build/generate.js +52 -0
  143. package/dist/commands/build/init.d.ts.map +1 -1
  144. package/dist/commands/build/init.js +10 -0
  145. package/dist/commands/build/queue/setup.d.ts +21 -0
  146. package/dist/commands/build/queue/setup.d.ts.map +1 -0
  147. package/dist/commands/build/queue/setup.js +120 -0
  148. package/dist/commands/build/smartbucket/setup.d.ts +23 -0
  149. package/dist/commands/build/smartbucket/setup.d.ts.map +1 -0
  150. package/dist/commands/build/smartbucket/setup.js +167 -0
  151. package/dist/commands/build/smartmemory/setup.d.ts +23 -0
  152. package/dist/commands/build/smartmemory/setup.d.ts.map +1 -0
  153. package/dist/commands/build/smartmemory/setup.js +172 -0
  154. package/dist/commands/build/smartsql/setup.d.ts +23 -0
  155. package/dist/commands/build/smartsql/setup.d.ts.map +1 -0
  156. package/dist/commands/build/smartsql/setup.js +169 -0
  157. package/dist/commands/build/validate.d.ts +2 -0
  158. package/dist/commands/build/validate.d.ts.map +1 -1
  159. package/dist/commands/build/validate.js +80 -8
  160. package/dist/commands/build/workos/jwt.d.ts +23 -0
  161. package/dist/commands/build/workos/jwt.d.ts.map +1 -0
  162. package/dist/commands/build/workos/jwt.js +172 -0
  163. package/dist/commands/doctor.d.ts +27 -0
  164. package/dist/commands/doctor.d.ts.map +1 -0
  165. package/dist/commands/doctor.js +328 -0
  166. package/dist/commands/object/delete.d.ts +0 -2
  167. package/dist/commands/object/delete.d.ts.map +1 -1
  168. package/dist/commands/object/delete.js +3 -38
  169. package/dist/commands/object/get.d.ts +0 -2
  170. package/dist/commands/object/get.d.ts.map +1 -1
  171. package/dist/commands/object/get.js +3 -38
  172. package/dist/commands/object/list.d.ts +0 -2
  173. package/dist/commands/object/list.d.ts.map +1 -1
  174. package/dist/commands/object/list.js +5 -40
  175. package/dist/commands/object/put.d.ts +0 -2
  176. package/dist/commands/object/put.d.ts.map +1 -1
  177. package/dist/commands/object/put.js +3 -38
  178. package/dist/commands/query/chunk-search.d.ts +0 -2
  179. package/dist/commands/query/chunk-search.d.ts.map +1 -1
  180. package/dist/commands/query/chunk-search.js +12 -46
  181. package/dist/commands/query/document.d.ts +1 -3
  182. package/dist/commands/query/document.d.ts.map +1 -1
  183. package/dist/commands/query/document.js +16 -60
  184. package/dist/commands/query/search.d.ts +0 -2
  185. package/dist/commands/query/search.d.ts.map +1 -1
  186. package/dist/commands/query/search.js +12 -46
  187. package/dist/feature-catalog.d.ts +28 -0
  188. package/dist/feature-catalog.d.ts.map +1 -0
  189. package/dist/feature-catalog.js +104 -0
  190. package/dist/index.d.ts.map +1 -1
  191. package/dist/index.js +16 -2
  192. package/oclif.manifest.json +4811 -3433
  193. package/package.json +3 -3
  194. package/templates/examples/smartbucket-minimal.ts.hbs +87 -0
  195. package/templates/examples/smartmemory-minimal.ts.hbs +82 -0
  196. package/templates/examples/smartsql-minimal.ts.hbs +69 -0
  197. package/templates/handlers/actor/index.test.ts.hbs +48 -85
  198. package/templates/handlers/actor/index.ts.hbs +16 -316
  199. package/templates/handlers/bucket-event-notification/index.ts.hbs +32 -235
  200. package/templates/handlers/bucket-event-observer.ts.hbs +79 -0
  201. package/templates/handlers/http-service/index.test.ts.hbs +3 -0
  202. package/templates/handlers/http-service/index.ts.hbs +43 -15
  203. package/templates/handlers/queue-consumer-setup.ts.hbs +45 -0
  204. package/templates/handlers/task/index.test.ts.hbs +30 -112
  205. package/templates/handlers/task/index.ts.hbs +19 -58
  206. package/templates/init/RAINDROP.md.hbs +97 -1
  207. package/templates/init/eslint.config.js +43 -0
  208. package/templates/init/package.json.hbs +4 -1
  209. package/templates/init/tsconfig.json +3 -3
  210. package/bundle/chunk-23UBI7BN.js +0 -48
  211. package/bundle/chunk-2QWMBNE3.js +0 -384
  212. package/bundle/chunk-45IYWQDC.js +0 -384
  213. package/bundle/chunk-5YUO23QU.js +0 -4585
  214. package/bundle/chunk-6MIGCNUO.js +0 -75
  215. package/bundle/chunk-7ZJWA6HP.js +0 -805
  216. package/bundle/chunk-AIYVX2M7.js +0 -44
  217. package/bundle/chunk-BB5TNIEM.js +0 -48
  218. package/bundle/chunk-BUR3HFKH.js +0 -488
  219. package/bundle/chunk-BYSBS7KT.js +0 -488
  220. package/bundle/chunk-CX3RWI62.js +0 -28658
  221. package/bundle/chunk-DLH7MI57.js +0 -305
  222. package/bundle/chunk-E3WJIYJZ.js +0 -12148
  223. package/bundle/chunk-EX7NOPRF.js +0 -12148
  224. package/bundle/chunk-F76JQS2J.js +0 -231
  225. package/bundle/chunk-FBOXMVKD.js +0 -28679
  226. package/bundle/chunk-FTPZ6SQW.js +0 -238909
  227. package/bundle/chunk-H3CFZ7ZH.js +0 -74
  228. package/bundle/chunk-HXOILVWA.js +0 -384
  229. package/bundle/chunk-IMP7O5AC.js +0 -22452
  230. package/bundle/chunk-IPYOAKRE.js +0 -231
  231. package/bundle/chunk-J7HN6XF2.js +0 -4461
  232. package/bundle/chunk-JOLOAALA.js +0 -231
  233. package/bundle/chunk-JZ2G4Q35.js +0 -4585
  234. package/bundle/chunk-KVAWPWF7.js +0 -231
  235. package/bundle/chunk-MEUAAIXV.js +0 -28657
  236. package/bundle/chunk-QBWFE57Z.js +0 -384
  237. package/bundle/chunk-SP3LOXPC.js +0 -46
  238. package/bundle/chunk-T7C564PR.js +0 -28678
  239. package/bundle/chunk-UFH545WJ.js +0 -22452
  240. package/bundle/chunk-UHVMPWM5.js +0 -315
  241. package/bundle/chunk-VB7ZTSZV.js +0 -1089
  242. package/bundle/chunk-VBIJDFMJ.js +0 -384
  243. package/bundle/chunk-VR7RLTE3.js +0 -231
  244. package/bundle/chunk-WFZUJLEC.js +0 -231
  245. package/bundle/chunk-YDGJTLVZ.js +0 -133
  246. package/bundle/chunk-YPNQ7UFK.js +0 -502
  247. package/bundle/chunk-YXFDRMSN.js +0 -384
  248. package/dist/lib/dns-utils.d.ts +0 -7
  249. package/dist/lib/dns-utils.d.ts.map +0 -1
  250. package/dist/lib/dns-utils.js +0 -44
@@ -0,0 +1,43 @@
1
+ import js from '@eslint/js';
2
+ import typescript from '@typescript-eslint/eslint-plugin';
3
+ import typescriptParser from '@typescript-eslint/parser';
4
+
5
+ export default [
6
+ js.configs.recommended,
7
+ {
8
+ files: ['**/*.ts', '**/*.tsx'],
9
+ languageOptions: {
10
+ parser: typescriptParser,
11
+ parserOptions: {
12
+ ecmaVersion: 2022,
13
+ sourceType: 'module',
14
+ },
15
+ globals: {
16
+ Request: 'readonly',
17
+ Response: 'readonly',
18
+ console: 'readonly',
19
+ TextEncoder: 'readonly',
20
+ TextDecoder: 'readonly',
21
+ },
22
+ },
23
+ plugins: {
24
+ '@typescript-eslint': typescript,
25
+ },
26
+ rules: {
27
+ ...typescript.configs.recommended.rules,
28
+ '@typescript-eslint/no-unused-vars': [
29
+ 'error',
30
+ {
31
+ argsIgnorePattern: '^_',
32
+ varsIgnorePattern: '^_',
33
+ },
34
+ ],
35
+ '@typescript-eslint/no-explicit-any': 'warn',
36
+ 'no-undef': 'off',
37
+ 'no-console': 'off',
38
+ },
39
+ },
40
+ {
41
+ ignores: ['dist/', 'node_modules/', 'reference/', 'db/'],
42
+ },
43
+ ];
@@ -22,9 +22,12 @@
22
22
  "zod": "^3"
23
23
  },
24
24
  "devDependencies": {
25
+ "@eslint/js": "^9.15.0",
26
+ "@typescript-eslint/eslint-plugin": "^8.7.0",
27
+ "@typescript-eslint/parser": "^8.7.0",
28
+ "eslint": "^9.15.0",
25
29
  "shx": "^0.4.0",
26
30
  "ts-node": "^10",
27
- "typescript-eslint": "^8.7.0",
28
31
  "typescript": "^5.0.4",
29
32
  "vitest": "^3.1.3"
30
33
  }
@@ -12,7 +12,7 @@
12
12
  "incremental": false,
13
13
  "isolatedModules": true,
14
14
  "jsx": "react",
15
- "lib": ["es2021"],
15
+ "lib": ["es2021", "dom"],
16
16
  "module": "es2022",
17
17
  "moduleDetection": "force",
18
18
  "moduleResolution": "Bundler",
@@ -21,8 +21,8 @@
21
21
  "outDir": "dist",
22
22
  "resolveJsonModule": true,
23
23
  "skipLibCheck": true,
24
- "strict": true,
24
+ "strict": false,
25
25
  "target": "es2021"
26
26
  },
27
- "exclude": ["test"]
27
+ "exclude": ["test", "eslint.config.js"]
28
28
  }
@@ -1,48 +0,0 @@
1
- import {
2
- init_cjs_shims
3
- } from "./chunk-FTPZ6SQW.js";
4
-
5
- // src/lib/dns-utils.ts
6
- init_cjs_shims();
7
- async function resolveDnsNameToZoneId(dnsClient, organizationId, userId, dnsName) {
8
- try {
9
- const normalizedDnsName = dnsName.endsWith(".") ? dnsName.slice(0, -1) : dnsName;
10
- let pageToken;
11
- do {
12
- const response = await dnsClient.listDNSZones({
13
- organizationId,
14
- userId,
15
- pageSize: 100,
16
- // Use a larger page size for efficiency
17
- pageToken
18
- });
19
- if (response.zones) {
20
- const exactMatch = response.zones.find(
21
- (zone) => zone.fullyQualifiedDomainName === normalizedDnsName
22
- );
23
- if (exactMatch?.zoneId) {
24
- return exactMatch.zoneId;
25
- }
26
- const parentZone = response.zones.find((zone) => {
27
- if (!zone.fullyQualifiedDomainName) return false;
28
- const zoneFqdn = zone.fullyQualifiedDomainName;
29
- return normalizedDnsName.endsWith(`.${zoneFqdn}`) || normalizedDnsName === zoneFqdn;
30
- });
31
- if (parentZone?.zoneId) {
32
- return parentZone.zoneId;
33
- }
34
- }
35
- pageToken = response.nextPageToken;
36
- } while (pageToken);
37
- throw new Error(`No DNS zone found for domain name: ${dnsName}`);
38
- } catch (error) {
39
- if (error instanceof Error) {
40
- throw error;
41
- }
42
- throw new Error(`Failed to resolve DNS name to zone ID: ${error}`);
43
- }
44
- }
45
-
46
- export {
47
- resolveDnsNameToZoneId
48
- };
@@ -1,384 +0,0 @@
1
- import {
2
- checkAndDisplayKillswitchStatus
3
- } from "./chunk-ER2RCPCY.js";
4
- import {
5
- source_default
6
- } from "./chunk-36GNZK4A.js";
7
- import {
8
- BaseCommand
9
- } from "./chunk-LDFYPOXJ.js";
10
- import {
11
- ApplicationsResponseSchema,
12
- EPOCH_TS,
13
- UnitState,
14
- __toESM,
15
- init_cjs_shims,
16
- require_lib,
17
- timestampDate,
18
- toJsonString
19
- } from "./chunk-V5LHJTYS.js";
20
-
21
- // src/commands/build/list.ts
22
- init_cjs_shims();
23
- var import_core = __toESM(require_lib(), 1);
24
- var statusString = {
25
- [UnitState.UNSPECIFIED]: "<unknown>",
26
- [UnitState.PENDING]: "pending...",
27
- [UnitState.STARTING]: "starting...",
28
- [UnitState.RUNNING]: "running",
29
- [UnitState.STOPPING]: "stopping...",
30
- [UnitState.STOPPED]: "stopped",
31
- [UnitState.DELETING]: "deleting...",
32
- [UnitState.DELETED]: "deleted"
33
- };
34
- var List = class extends BaseCommand {
35
- static args = {};
36
- static description = "list Raindrop catalog resources";
37
- static examples = [
38
- `<%= config.bin %> <%= command.id %>
39
- List applications in compact view (default).
40
-
41
- <%= config.bin %> <%= command.id %> -o tree
42
- Show applications in tree view with version hierarchy.
43
-
44
- <%= config.bin %> <%= command.id %> -o log
45
- Show git-log style view with branch visualization.
46
-
47
- <%= config.bin %> <%= command.id %> --app demo-fts --limit 5
48
- Show only demo-fts application, limited to 5 versions.
49
-
50
- <%= config.bin %> <%= command.id %> --active
51
- Show only running/active versions.
52
- `
53
- ];
54
- static flags = {
55
- ...BaseCommand.HIDDEN_FLAGS,
56
- all: import_core.Flags.boolean({ char: "a", description: "show deleted resources", default: false }),
57
- output: import_core.Flags.string({
58
- char: "o",
59
- description: "output format",
60
- default: "compact",
61
- options: ["text", "table", "json", "log", "compact", "tree"]
62
- }),
63
- app: import_core.Flags.string({
64
- description: "filter by application name",
65
- required: false
66
- }),
67
- limit: import_core.Flags.integer({
68
- char: "n",
69
- description: "limit number of versions shown per application",
70
- required: false
71
- }),
72
- active: import_core.Flags.boolean({
73
- description: "show only running/active versions",
74
- default: false
75
- }),
76
- impersonate: import_core.Flags.string({
77
- char: "i",
78
- description: "impersonate organization",
79
- required: false,
80
- hidden: true
81
- }),
82
- manifest: import_core.Flags.string({
83
- char: "m",
84
- description: "project manifest",
85
- required: false,
86
- default: "raindrop.manifest",
87
- hidden: true
88
- })
89
- };
90
- // Build a version tree from applications
91
- buildVersionTree(applications) {
92
- const nodesMap = /* @__PURE__ */ new Map();
93
- const rootNodes = [];
94
- applications.forEach((app) => {
95
- const node = {
96
- versionId: app.versionId,
97
- previousVersionId: app.previousVersionId || null,
98
- application: app,
99
- children: [],
100
- branch: app.branch
101
- };
102
- nodesMap.set(app.versionId, node);
103
- });
104
- for (const node of nodesMap.values()) {
105
- if (node.previousVersionId && nodesMap.has(node.previousVersionId)) {
106
- nodesMap.get(node.previousVersionId).children.push(node);
107
- } else {
108
- rootNodes.push(node);
109
- }
110
- }
111
- return { rootNodes, nodesMap };
112
- }
113
- // Render the version tree in git-log style with branch lines
114
- renderGitLogStyle(applications) {
115
- const groups = this.groupApplicationsByName(applications);
116
- const result = [];
117
- for (const [_appName, appVersions] of groups) {
118
- result.push("");
119
- const firstApp = appVersions[0];
120
- if (!firstApp) continue;
121
- const formattedAppName = this.formatAppName(firstApp);
122
- result.push(source_default.bold.underline(`=== ${formattedAppName} ===`));
123
- result.push("");
124
- const { rootNodes } = this.buildVersionTree(appVersions);
125
- const columnMap = /* @__PURE__ */ new Map();
126
- let maxColumn = 0;
127
- const assignColumns = (node, parentColumn) => {
128
- if (columnMap.has(node.versionId)) return;
129
- if (parentColumn !== void 0) {
130
- columnMap.set(node.versionId, parentColumn);
131
- } else {
132
- columnMap.set(node.versionId, maxColumn++);
133
- }
134
- node.children.forEach((child) => {
135
- assignColumns(child, columnMap.get(node.versionId));
136
- });
137
- };
138
- rootNodes.forEach((root) => assignColumns(root));
139
- const flattenedNodes = [];
140
- const flatten = (node) => {
141
- flattenedNodes.push(node);
142
- node.children.forEach((child) => flatten(child));
143
- };
144
- rootNodes.forEach((root) => flatten(root));
145
- flattenedNodes.sort((a, b) => {
146
- const aTime = timestampDate(a.application.createdAt || EPOCH_TS).getTime() || 0;
147
- const bTime = timestampDate(b.application.createdAt || EPOCH_TS).getTime() || 0;
148
- return bTime - aTime;
149
- });
150
- const processed = /* @__PURE__ */ new Set();
151
- const linesInUse = /* @__PURE__ */ new Set();
152
- for (const node of flattenedNodes) {
153
- if (processed.has(node.versionId)) continue;
154
- processed.add(node.versionId);
155
- const app = node.application;
156
- const column = columnMap.get(node.versionId) || 0;
157
- linesInUse.add(column);
158
- const date = timestampDate(app.createdAt || EPOCH_TS);
159
- const timestamp = date.toLocaleString("en-US", {
160
- weekday: "short",
161
- month: "short",
162
- day: "numeric",
163
- year: "numeric",
164
- hour: "numeric",
165
- minute: "numeric",
166
- second: "numeric",
167
- hour12: false,
168
- timeZoneName: "short"
169
- });
170
- let graphLine = "";
171
- for (let i = 0; i <= maxColumn; i++) {
172
- if (i === column) {
173
- graphLine += "*";
174
- } else if (linesInUse.has(i)) {
175
- graphLine += "|";
176
- } else {
177
- graphLine += " ";
178
- }
179
- }
180
- let branchInfo = "";
181
- if (app.branch) {
182
- branchInfo = ` (${app.branch})`;
183
- }
184
- let parentInfo = "";
185
- if (app.previousVersionId) {
186
- parentInfo = ` [parent: ${app.previousVersionId}]`;
187
- }
188
- const versionLine = `${graphLine} ${source_default.yellow("version")} ${source_default.yellow(app.versionId)}${source_default.cyan(branchInfo)}${source_default.dim(parentInfo)}`;
189
- result.push(versionLine);
190
- graphLine = graphLine.replace("*", "|");
191
- let statusColor;
192
- if (app.state === UnitState.RUNNING) {
193
- statusColor = source_default.green;
194
- } else if (app.state === UnitState.DELETING) {
195
- statusColor = source_default.yellow;
196
- } else if (app.state === UnitState.DELETED) {
197
- statusColor = source_default.red;
198
- } else {
199
- statusColor = source_default.gray;
200
- }
201
- result.push(`${graphLine} ${source_default.bold("Status:")} ${statusColor(statusString[app.state])}`);
202
- result.push(`${graphLine} ${source_default.bold("Date:")} ${source_default.dim(timestamp)}`);
203
- result.push(`${graphLine} `);
204
- result.push(`${graphLine} ${source_default.bold(this.formatAppName(app))}`);
205
- result.push(`${graphLine}`);
206
- }
207
- }
208
- return result.join("\n");
209
- }
210
- // Helper function to format app name with privileged indicator
211
- formatAppName(app) {
212
- const privilegedIcon = app.privileged ? source_default.magenta("\u{1F512} ") : "";
213
- return `${privilegedIcon}${app.name}`;
214
- }
215
- // Group applications by name
216
- groupApplicationsByName(applications) {
217
- const groups = /* @__PURE__ */ new Map();
218
- for (const app of applications) {
219
- const name = app.name;
220
- if (!groups.has(name)) {
221
- groups.set(name, []);
222
- }
223
- groups.get(name).push(app);
224
- }
225
- for (const apps of groups.values()) {
226
- apps.sort((a, b) => {
227
- const aTime = timestampDate(a.createdAt || EPOCH_TS).getTime();
228
- const bTime = timestampDate(b.createdAt || EPOCH_TS).getTime();
229
- return bTime - aTime;
230
- });
231
- }
232
- return groups;
233
- }
234
- // Render compact view
235
- renderCompactView(applications) {
236
- const groups = this.groupApplicationsByName(applications);
237
- const result = [];
238
- const sortedGroups = Array.from(groups.entries()).sort((a, b) => {
239
- const aLatest = a[1][0];
240
- const bLatest = b[1][0];
241
- if (!aLatest || !bLatest) return 0;
242
- const aTime = timestampDate(aLatest.createdAt || EPOCH_TS).getTime();
243
- const bTime = timestampDate(bLatest.createdAt || EPOCH_TS).getTime();
244
- return bTime - aTime;
245
- });
246
- for (const [_appName, versions] of sortedGroups) {
247
- const activeVersions2 = versions.filter((v) => v.state === UnitState.RUNNING);
248
- const deletedVersions = versions.filter((v) => v.state === UnitState.DELETED || v.state === UnitState.DELETING);
249
- const firstVersion = versions[0];
250
- if (!firstVersion) continue;
251
- const formattedAppName = this.formatAppName(firstVersion);
252
- result.push(`
253
- ${source_default.bold(formattedAppName)} ${source_default.dim(`(${versions.length} version${versions.length !== 1 ? "s" : ""})`)}`);
254
- let shown = 0;
255
- for (const version of activeVersions2) {
256
- if (this.flags.limit && shown >= this.flags.limit) break;
257
- const date = timestampDate(version.createdAt || EPOCH_TS).toLocaleDateString();
258
- const branch = version.branch ? source_default.cyan(` (${version.branch})`) : "";
259
- const status = source_default.green(statusString[version.state]);
260
- result.push(` \u2514\u2500 ${source_default.yellow(version.versionId)}...${branch} - ${status} - ${source_default.dim(date)}`);
261
- shown++;
262
- }
263
- if (!this.flags.active && deletedVersions.length > 0) {
264
- const remaining = this.flags.limit ? Math.max(0, this.flags.limit - shown) : deletedVersions.length;
265
- const toShow = Math.min(remaining, deletedVersions.length);
266
- for (let i = 0; i < toShow && i < 3; i++) {
267
- const version = deletedVersions[i];
268
- if (!version) continue;
269
- const date = timestampDate(version.createdAt || EPOCH_TS).toLocaleDateString();
270
- const status = version.state === UnitState.DELETING ? source_default.yellow(statusString[version.state]) : source_default.red(statusString[version.state]);
271
- result.push(` \u2514\u2500 ${source_default.gray(version.versionId)}... - ${status} - ${source_default.dim(date)}`);
272
- }
273
- if (deletedVersions.length > toShow) {
274
- result.push(source_default.dim(` ... ${deletedVersions.length - toShow} more deleted versions`));
275
- }
276
- }
277
- }
278
- const totalApps = sortedGroups.length;
279
- const totalVersions = applications.length;
280
- const activeVersions = applications.filter((app) => app.state === UnitState.RUNNING).length;
281
- result.push("");
282
- result.push(source_default.dim("\u2500".repeat(50)));
283
- result.push(source_default.dim(`Total: ${totalApps} applications, ${totalVersions} versions (${activeVersions} active)`));
284
- return result.join("\n");
285
- }
286
- // Render tree view for a specific application
287
- renderTreeView(applications) {
288
- const groups = this.groupApplicationsByName(applications);
289
- const result = [];
290
- for (const [_appName, versions] of groups) {
291
- const firstVersion = versions[0];
292
- if (!firstVersion) continue;
293
- const formattedAppName = this.formatAppName(firstVersion);
294
- result.push(`
295
- ${source_default.bold.underline(`=== ${formattedAppName} ===`)}`);
296
- const { rootNodes } = this.buildVersionTree(versions);
297
- const renderNode = (node, prefix = "", isLast = true) => {
298
- const app = node.application;
299
- const date = timestampDate(app.createdAt || EPOCH_TS).toLocaleDateString();
300
- const branch = app.branch ? source_default.cyan(` (${app.branch})`) : "";
301
- let status;
302
- if (app.state === UnitState.RUNNING) {
303
- status = source_default.green(statusString[app.state]);
304
- } else if (app.state === UnitState.DELETING) {
305
- status = source_default.yellow(statusString[app.state]);
306
- } else if (app.state === UnitState.DELETED) {
307
- status = source_default.red(statusString[app.state]);
308
- } else {
309
- status = source_default.gray(statusString[app.state]);
310
- }
311
- const current = app.state === UnitState.RUNNING && app.branch === "main" ? source_default.bold.green(" \u2190 current") : "";
312
- const connector = isLast ? "\u2514\u2500" : "\u251C\u2500";
313
- const shortId = source_default.yellow(app.versionId);
314
- result.push(`${prefix}${connector} ${shortId}...${branch} - ${status} - ${source_default.dim(date)}${current}`);
315
- const childPrefix = prefix + (isLast ? " " : "\u2502 ");
316
- node.children.forEach((child, index) => {
317
- renderNode(child, childPrefix, index === node.children.length - 1);
318
- });
319
- };
320
- rootNodes.forEach((root, index) => {
321
- renderNode(root, "", index === rootNodes.length - 1);
322
- });
323
- }
324
- return result.join("\n");
325
- }
326
- async listApplications() {
327
- const { client: catalogService, organizationId: defaultOrganizationId, userId } = await this.catalogService();
328
- const organizationId = this.flags.impersonate ?? defaultOrganizationId;
329
- if (this.flags.output === "log" || this.flags.output === "table") {
330
- this.log(source_default.dim(`Listing applications for organization ${organizationId}`));
331
- }
332
- const resp = await catalogService.applications({
333
- userId,
334
- organizationId,
335
- showDeleted: this.flags.all
336
- });
337
- let applications = resp.applications;
338
- if (this.flags.app) {
339
- applications = applications.filter((app) => app.name === this.flags.app);
340
- }
341
- if (this.flags.active) {
342
- applications = applications.filter((app) => app.state === UnitState.RUNNING);
343
- }
344
- if (this.flags.output === "log") {
345
- this.log(this.renderGitLogStyle(applications));
346
- } else if (this.flags.output === "compact") {
347
- this.log(this.renderCompactView(applications));
348
- } else if (this.flags.output === "tree") {
349
- this.log(this.renderTreeView(applications));
350
- } else if (this.flags.output === "table") {
351
- console.table(
352
- applications.reduce(
353
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
354
- (acc, a) => {
355
- const dateStr = a.createdAt ? timestampDate(a.createdAt).toISOString() : "";
356
- acc[dateStr] = {
357
- ...a,
358
- status: statusString[a.state],
359
- locked: a.lock ? "locked" : "",
360
- privileged: a.privileged ? "system" : "user"
361
- };
362
- return acc;
363
- },
364
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
365
- {}
366
- ),
367
- ["organizationId", "name", "versionId", "branch", "status", "locked", "privileged", ...this.flags.all ? ["deletedAt"] : []]
368
- );
369
- } else if (this.flags.output === "json") {
370
- console.log(toJsonString(ApplicationsResponseSchema, resp, { prettySpaces: 2 }));
371
- } else {
372
- this.log(this.renderCompactView(applications));
373
- }
374
- }
375
- async run() {
376
- await checkAndDisplayKillswitchStatus(this);
377
- await this.listApplications();
378
- }
379
- };
380
-
381
- export {
382
- statusString,
383
- List
384
- };