@withbuddi/buddi 0.1.0-pre.23 → 0.1.0-pre.24

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 (165) hide show
  1. package/README.md +4 -3
  2. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  4. package/node_modules/@buddi/cli/dist/commands.js +12 -2
  5. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  6. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  7. package/node_modules/@buddi/cli/dist/main.js +2 -1
  8. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  9. package/node_modules/@buddi/cli/dist/plugins-toggle.d.ts +9 -0
  10. package/node_modules/@buddi/cli/dist/plugins-toggle.d.ts.map +1 -0
  11. package/node_modules/@buddi/cli/dist/plugins-toggle.js +20 -0
  12. package/node_modules/@buddi/cli/dist/plugins-toggle.js.map +1 -0
  13. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  14. package/node_modules/@buddi/core/dist/host/build.d.ts +7 -0
  15. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  16. package/node_modules/@buddi/core/dist/host/build.js +14 -1
  17. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  18. package/node_modules/@buddi/core/dist/registry.d.ts +9 -0
  19. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  20. package/node_modules/@buddi/core/dist/registry.js +32 -2
  21. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  22. package/node_modules/@buddi/core/dist/secrets/destinations.d.ts +2 -0
  23. package/node_modules/@buddi/core/dist/secrets/destinations.d.ts.map +1 -1
  24. package/node_modules/@buddi/core/dist/secrets/destinations.js +6 -0
  25. package/node_modules/@buddi/core/dist/secrets/destinations.js.map +1 -1
  26. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  27. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts +3 -2
  28. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
  29. package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -2
  30. package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
  31. package/node_modules/@buddi/gateway/dist/index.d.ts +1 -1
  32. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  33. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  34. package/node_modules/@buddi/gateway/dist/plugins/live.d.ts +42 -0
  35. package/node_modules/@buddi/gateway/dist/plugins/live.d.ts.map +1 -0
  36. package/node_modules/@buddi/gateway/dist/plugins/live.js +81 -0
  37. package/node_modules/@buddi/gateway/dist/plugins/live.js.map +1 -0
  38. package/node_modules/@buddi/gateway/dist/plugins/toggle.d.ts +18 -2
  39. package/node_modules/@buddi/gateway/dist/plugins/toggle.d.ts.map +1 -1
  40. package/node_modules/@buddi/gateway/dist/plugins/toggle.js +36 -12
  41. package/node_modules/@buddi/gateway/dist/plugins/toggle.js.map +1 -1
  42. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +44 -5
  43. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
  44. package/node_modules/@buddi/gateway/dist/plugins-cli.js +177 -20
  45. package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
  46. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts +2 -0
  47. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
  48. package/node_modules/@buddi/gateway/dist/tips/rules.js +10 -0
  49. package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
  50. package/node_modules/@buddi/gateway/dist/web/folders.d.ts +23 -0
  51. package/node_modules/@buddi/gateway/dist/web/folders.d.ts.map +1 -0
  52. package/node_modules/@buddi/gateway/dist/web/folders.js +100 -0
  53. package/node_modules/@buddi/gateway/dist/web/folders.js.map +1 -0
  54. package/node_modules/@buddi/gateway/dist/web/market.d.ts +111 -0
  55. package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -0
  56. package/node_modules/@buddi/gateway/dist/web/market.js +347 -0
  57. package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -0
  58. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts +37 -7
  59. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/web/plugins.js +43 -13
  61. package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  63. package/node_modules/@buddi/gateway/dist/web/server.js +32 -0
  64. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  65. package/node_modules/@buddi/gateway/dist/web/svg.d.ts +23 -0
  66. package/node_modules/@buddi/gateway/dist/web/svg.d.ts.map +1 -0
  67. package/node_modules/@buddi/gateway/dist/web/svg.js +125 -0
  68. package/node_modules/@buddi/gateway/dist/web/svg.js.map +1 -0
  69. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  70. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  71. package/node_modules/@hono/node-server/README.md +21 -10
  72. package/node_modules/@hono/node-server/dist/early-hints.cjs +1 -1
  73. package/node_modules/@hono/node-server/dist/early-hints.mjs +1 -1
  74. package/node_modules/@hono/node-server/dist/index.cjs +41 -19
  75. package/node_modules/@hono/node-server/dist/index.mjs +42 -20
  76. package/node_modules/@hono/node-server/dist/serve-static.cjs +1 -0
  77. package/node_modules/@hono/node-server/dist/serve-static.d.cts +2 -1
  78. package/node_modules/@hono/node-server/dist/serve-static.d.mts +2 -1
  79. package/node_modules/@hono/node-server/dist/serve-static.mjs +1 -0
  80. package/node_modules/@hono/node-server/package.json +3 -2
  81. package/node_modules/hono/dist/cjs/adapter/bun/websocket.js +1 -1
  82. package/node_modules/hono/dist/cjs/middleware/language/language.js +1 -1
  83. package/node_modules/hono/dist/cjs/middleware/serve-static/index.js +1 -0
  84. package/node_modules/hono/dist/middleware/language/language.js +1 -1
  85. package/node_modules/hono/dist/middleware/serve-static/index.js +1 -0
  86. package/node_modules/hono/dist/types/middleware/serve-static/index.d.ts +2 -0
  87. package/node_modules/hono/package.json +1 -1
  88. package/package.json +2 -2
  89. package/packages/cli/dist/.tsbuildinfo +1 -1
  90. package/packages/cli/dist/commands.d.ts.map +1 -1
  91. package/packages/cli/dist/commands.js +12 -2
  92. package/packages/cli/dist/commands.js.map +1 -1
  93. package/packages/cli/dist/main.d.ts.map +1 -1
  94. package/packages/cli/dist/main.js +2 -1
  95. package/packages/cli/dist/main.js.map +1 -1
  96. package/packages/cli/dist/plugins-toggle.d.ts +9 -0
  97. package/packages/cli/dist/plugins-toggle.d.ts.map +1 -0
  98. package/packages/cli/dist/plugins-toggle.js +20 -0
  99. package/packages/cli/dist/plugins-toggle.js.map +1 -0
  100. package/packages/core/dist/.tsbuildinfo +1 -1
  101. package/packages/core/dist/host/build.d.ts +7 -0
  102. package/packages/core/dist/host/build.d.ts.map +1 -1
  103. package/packages/core/dist/host/build.js +14 -1
  104. package/packages/core/dist/host/build.js.map +1 -1
  105. package/packages/core/dist/registry.d.ts +9 -0
  106. package/packages/core/dist/registry.d.ts.map +1 -1
  107. package/packages/core/dist/registry.js +32 -2
  108. package/packages/core/dist/registry.js.map +1 -1
  109. package/packages/core/dist/secrets/destinations.d.ts +2 -0
  110. package/packages/core/dist/secrets/destinations.d.ts.map +1 -1
  111. package/packages/core/dist/secrets/destinations.js +6 -0
  112. package/packages/core/dist/secrets/destinations.js.map +1 -1
  113. package/packages/gateway/dist/.tsbuildinfo +1 -1
  114. package/packages/gateway/dist/agents/catalog.d.ts +3 -2
  115. package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
  116. package/packages/gateway/dist/agents/catalog.js +3 -2
  117. package/packages/gateway/dist/agents/catalog.js.map +1 -1
  118. package/packages/gateway/dist/index.d.ts +1 -1
  119. package/packages/gateway/dist/index.d.ts.map +1 -1
  120. package/packages/gateway/dist/index.js.map +1 -1
  121. package/packages/gateway/dist/plugins/live.d.ts +42 -0
  122. package/packages/gateway/dist/plugins/live.d.ts.map +1 -0
  123. package/packages/gateway/dist/plugins/live.js +81 -0
  124. package/packages/gateway/dist/plugins/live.js.map +1 -0
  125. package/packages/gateway/dist/plugins/toggle.d.ts +18 -2
  126. package/packages/gateway/dist/plugins/toggle.d.ts.map +1 -1
  127. package/packages/gateway/dist/plugins/toggle.js +36 -12
  128. package/packages/gateway/dist/plugins/toggle.js.map +1 -1
  129. package/packages/gateway/dist/plugins-cli.d.ts +44 -5
  130. package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
  131. package/packages/gateway/dist/plugins-cli.js +177 -20
  132. package/packages/gateway/dist/plugins-cli.js.map +1 -1
  133. package/packages/gateway/dist/tips/rules.d.ts +2 -0
  134. package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
  135. package/packages/gateway/dist/tips/rules.js +10 -0
  136. package/packages/gateway/dist/tips/rules.js.map +1 -1
  137. package/packages/gateway/dist/web/folders.d.ts +23 -0
  138. package/packages/gateway/dist/web/folders.d.ts.map +1 -0
  139. package/packages/gateway/dist/web/folders.js +100 -0
  140. package/packages/gateway/dist/web/folders.js.map +1 -0
  141. package/packages/gateway/dist/web/market.d.ts +111 -0
  142. package/packages/gateway/dist/web/market.d.ts.map +1 -0
  143. package/packages/gateway/dist/web/market.js +347 -0
  144. package/packages/gateway/dist/web/market.js.map +1 -0
  145. package/packages/gateway/dist/web/plugins.d.ts +37 -7
  146. package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
  147. package/packages/gateway/dist/web/plugins.js +43 -13
  148. package/packages/gateway/dist/web/plugins.js.map +1 -1
  149. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  150. package/packages/gateway/dist/web/server.js +32 -0
  151. package/packages/gateway/dist/web/server.js.map +1 -1
  152. package/packages/gateway/dist/web/svg.d.ts +23 -0
  153. package/packages/gateway/dist/web/svg.d.ts.map +1 -0
  154. package/packages/gateway/dist/web/svg.js +125 -0
  155. package/packages/gateway/dist/web/svg.js.map +1 -0
  156. package/packages/install/dist/.tsbuildinfo +1 -1
  157. package/packages/runtime/dist/.tsbuildinfo +1 -1
  158. package/packages/web/dist/assets/index-C-NAQ_MT.css +1 -0
  159. package/packages/web/dist/assets/index-DzFS39N3.js +125 -0
  160. package/packages/web/dist/assets/{lottie_light-e1djomjW.js → lottie_light-D7STH9tF.js} +1 -1
  161. package/packages/web/dist/build.json +1 -1
  162. package/packages/web/dist/index.html +2 -2
  163. package/packages/web/dist/precache.json +4 -4
  164. package/packages/web/dist/assets/index-4hpqlMjL.css +0 -1
  165. package/packages/web/dist/assets/index-B8crjABB.js +0 -125
@@ -0,0 +1 @@
1
+ {"version":3,"file":"folders.js","sourceRoot":"","sources":["../../src/web/folders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ import { z } from 'zod';
2
+ import { type InstalledPlugin } from '@buddi/core';
3
+ import { type RouteReply } from './plugins.js';
4
+ export declare const MARKET_ORIGIN = "https://withbuddi.com";
5
+ /** How long a fetched list is trusted before Browse asks again. The pictures keep a day. */
6
+ export declare const MARKET_TTL_MS: number;
7
+ export declare const MARKET_ASSET_TTL_MS: number;
8
+ export declare const MARKET_TIMEOUT_MS = 10000;
9
+ export declare const MARKET_CATEGORIES: readonly ["days", "money", "home", "voice", "work", "other"];
10
+ /**
11
+ * One listing. Only what Browse relies on is checked; every other field the
12
+ * site writes is kept as it came, so a newer index still reaches the page.
13
+ */
14
+ declare const entrySchema: z.ZodObject<{
15
+ name: z.ZodString;
16
+ npm: z.ZodString;
17
+ version: z.ZodString;
18
+ title: z.ZodString;
19
+ summary: z.ZodString;
20
+ category: z.ZodCatch<z.ZodEnum<["days", "money", "home", "voice", "work", "other"]>>;
21
+ trust: z.ZodEnum<["by-buddi", "reviewed"]>;
22
+ pricing: z.ZodCatch<z.ZodObject<{
23
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
24
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
25
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
26
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
27
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
28
+ }, z.ZodTypeAny, "passthrough">>>;
29
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
30
+ name: z.ZodString;
31
+ npm: z.ZodString;
32
+ version: z.ZodString;
33
+ title: z.ZodString;
34
+ summary: z.ZodString;
35
+ category: z.ZodCatch<z.ZodEnum<["days", "money", "home", "voice", "work", "other"]>>;
36
+ trust: z.ZodEnum<["by-buddi", "reviewed"]>;
37
+ pricing: z.ZodCatch<z.ZodObject<{
38
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
39
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
40
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
41
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
42
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
43
+ }, z.ZodTypeAny, "passthrough">>>;
44
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
45
+ name: z.ZodString;
46
+ npm: z.ZodString;
47
+ version: z.ZodString;
48
+ title: z.ZodString;
49
+ summary: z.ZodString;
50
+ category: z.ZodCatch<z.ZodEnum<["days", "money", "home", "voice", "work", "other"]>>;
51
+ trust: z.ZodEnum<["by-buddi", "reviewed"]>;
52
+ pricing: z.ZodCatch<z.ZodObject<{
53
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
54
+ }, "passthrough", z.ZodTypeAny, z.objectOutputType<{
55
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
56
+ }, z.ZodTypeAny, "passthrough">, z.objectInputType<{
57
+ kind: z.ZodEnum<["free", "paid", "subscription"]>;
58
+ }, z.ZodTypeAny, "passthrough">>>;
59
+ }, z.ZodTypeAny, "passthrough">>;
60
+ export type MarketEntry = z.infer<typeof entrySchema>;
61
+ export interface MarketIndex {
62
+ generatedAt?: string;
63
+ plugins: MarketEntry[];
64
+ }
65
+ export interface MarketDeps {
66
+ env: NodeJS.ProcessEnv;
67
+ log: (line: string) => void;
68
+ /** Injected by tests that want no socket at all; the gateway uses the global. */
69
+ fetch?: typeof fetch;
70
+ now?: () => Date;
71
+ }
72
+ /** For tests: forget the in-memory copies. */
73
+ export declare function resetMarketCache(): void;
74
+ export declare function marketFile(env: NodeJS.ProcessEnv): string;
75
+ export declare function marketUrl(env: NodeJS.ProcessEnv): string;
76
+ /** The index as buddi keeps it: shape checked, bad entries left out and said so. */
77
+ export declare function parseMarketIndex(value: unknown, log?: (line: string) => void): MarketIndex;
78
+ export declare function annotateMarket(plugins: readonly MarketEntry[], record: readonly InstalledPlugin[]): Array<Record<string, unknown>>;
79
+ /** Where every listing's files live; nothing outside it is fetched for the page. */
80
+ export declare const MARKET_ASSET_PREFIX = "https://withbuddi.com/plugins/";
81
+ /** A screenshot is a few hundred kilobytes; this is room and no more. */
82
+ export declare const MAX_ASSET_BYTES: number;
83
+ /** The URL, when it is a listing's file; `undefined` for anything else. */
84
+ export declare function marketAssetUrl(env: NodeJS.ProcessEnv, raw: string | null | undefined): URL | undefined;
85
+ interface Asset {
86
+ bytes: Buffer;
87
+ type: string;
88
+ fetchedAt: string;
89
+ }
90
+ /**
91
+ * One listing's file: from the copy beside the index while it is under a day
92
+ * old, else fetched and kept. A fetch that fails with a copy on hand answers
93
+ * the copy; with none, it throws.
94
+ */
95
+ export declare function marketAsset(deps: MarketDeps, url: URL): Promise<Asset>;
96
+ /** A reply that is a file rather than JSON. */
97
+ export interface AssetReply {
98
+ status: number;
99
+ body?: unknown;
100
+ bytes?: Buffer;
101
+ type?: string;
102
+ }
103
+ /**
104
+ * `GET /api/market/asset?url=<a listing's file>` — a screenshot for the
105
+ * detail sheet. An SVG goes out only as the sanitiser re-wrote it.
106
+ */
107
+ export declare function marketAssetRoute(deps: MarketDeps, url: URL): Promise<AssetReply>;
108
+ /** `GET /api/market[?refresh=1]`. */
109
+ export declare function marketRoute(deps: MarketDeps, url: URL): Promise<RouteReply>;
110
+ export {};
111
+ //# sourceMappingURL=market.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../src/web/market.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAmC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAG3E,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,4FAA4F;AAC5F,eAAO,MAAM,aAAa,QAAiB,CAAC;AAC5C,eAAO,MAAM,mBAAmB,QAAsB,CAAC;AACvD,eAAO,MAAM,iBAAiB,QAAS,CAAC;AAExC,eAAO,MAAM,iBAAiB,8DAA+D,CAAC;AAE9F;;;GAGG;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAcD,CAAC;AASjB,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAOD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAKD,8CAA8C;AAC9C,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAEzD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAGxD;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe,GAAG,WAAW,CAYpG;AA2DD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,MAAM,EAAE,SAAS,eAAe,EAAE,GACjC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWhC;AAMD,oFAAoF;AACpF,eAAO,MAAM,mBAAmB,mCAA8B,CAAC;AAC/D,yEAAyE;AACzE,eAAO,MAAM,eAAe,QAAkB,CAAC;AAgB/C,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,CAatG;AAED,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AA6CD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAY5E;AAED,+CAA+C;AAC/C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBtF;AAgBD,qCAAqC;AACrC,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAwCjF"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * `GET /api/market` — the plugin list from withbuddi.com, for Browse.
3
+ *
4
+ * The page never reaches the internet itself: it asks this route, and this
5
+ * route fetches `<origin>/plugins/index.json` only when it is asked — which is
6
+ * when the owner opens the Browse tab. Nothing fetches it at start or on a
7
+ * timer. It is one of the few things that leave the machine, and the docs list
8
+ * it as that: "the plugin list from withbuddi.com, when you open Browse".
9
+ *
10
+ * The answer is kept a day, in memory and on disk under the data directory, so
11
+ * opening Browse twice does not ask twice. A fetch that fails with a copy on
12
+ * hand answers the copy, marked `stale`; one that fails with nothing answers
13
+ * an empty list and the sentence, still with a 200, because "withbuddi.com did
14
+ * not answer" is something the page shows, not an error in the gateway.
15
+ *
16
+ * Each entry is annotated against the installed record: `installed` when a
17
+ * plugin of that npm name (or buddi name) is here, `update` when the listed
18
+ * version is newer, and `usesWords` in the same words the staged card uses.
19
+ * Nothing about installing changes: Install on the page stages the spec, and
20
+ * the staged card and its approvals are the ones every install goes through.
21
+ *
22
+ * The listings' pictures come through here too: `GET /api/market/asset?url=`
23
+ * fetches a file under `https://withbuddi.com/plugins/` (a screenshot) and
24
+ * keeps it beside the index, so the page never reaches the internet itself.
25
+ * Each listing's icon is read the same way while the list is answered and
26
+ * passed on as `iconSvg`, sanitised to plain shapes (`svg.ts`), so the page can
27
+ * draw it inline in the colour of its tile. Both happen only on the way to
28
+ * Browse, which is already the one time the market is asked anything.
29
+ */
30
+ import { createHash } from 'node:crypto';
31
+ import { mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
32
+ import path from 'node:path';
33
+ import { z } from 'zod';
34
+ import { compareVersions, resolveDataDir } from '@buddi/core';
35
+ import { installedRecord, usesWords } from './plugins.js';
36
+ import { sanitizeIconSvg } from './svg.js';
37
+ export const MARKET_ORIGIN = 'https://withbuddi.com';
38
+ /** How long a fetched list is trusted before Browse asks again. The pictures keep a day. */
39
+ export const MARKET_TTL_MS = 60 * 60 * 1000;
40
+ export const MARKET_ASSET_TTL_MS = 24 * 60 * 60 * 1000;
41
+ export const MARKET_TIMEOUT_MS = 10_000;
42
+ export const MARKET_CATEGORIES = ['days', 'money', 'home', 'voice', 'work', 'other'];
43
+ /**
44
+ * One listing. Only what Browse relies on is checked; every other field the
45
+ * site writes is kept as it came, so a newer index still reaches the page.
46
+ */
47
+ const entrySchema = z
48
+ .object({
49
+ name: z.string().min(1),
50
+ npm: z.string().min(1),
51
+ version: z.string().min(1),
52
+ title: z.string().min(1),
53
+ summary: z.string(),
54
+ category: z.enum(MARKET_CATEGORIES).catch('other'),
55
+ trust: z.enum(['by-buddi', 'reviewed']),
56
+ pricing: z
57
+ .object({ kind: z.enum(['free', 'paid', 'subscription']) })
58
+ .passthrough()
59
+ .catch({ kind: 'free' }),
60
+ })
61
+ .passthrough();
62
+ const indexSchema = z
63
+ .object({
64
+ generatedAt: z.string().optional(),
65
+ plugins: z.array(z.unknown()),
66
+ })
67
+ .passthrough();
68
+ /** Keyed by the file on disk, so two data directories never share a copy. */
69
+ const memory = new Map();
70
+ /** For tests: forget the in-memory copies. */
71
+ export function resetMarketCache() {
72
+ memory.clear();
73
+ }
74
+ export function marketFile(env) {
75
+ return path.join(resolveDataDir(env), 'market', 'index.json');
76
+ }
77
+ export function marketUrl(env) {
78
+ const origin = env.BUDDI_MARKET_URL?.trim() || MARKET_ORIGIN;
79
+ return `${origin.replace(/\/+$/, '')}/plugins/index.json`;
80
+ }
81
+ /** The index as buddi keeps it: shape checked, bad entries left out and said so. */
82
+ export function parseMarketIndex(value, log = () => { }) {
83
+ const index = indexSchema.parse(value);
84
+ const plugins = [];
85
+ for (const raw of index.plugins) {
86
+ const parsed = entrySchema.safeParse(raw);
87
+ if (parsed.success)
88
+ plugins.push(parsed.data);
89
+ else {
90
+ const name = typeof raw?.name === 'string' ? raw.name : '?';
91
+ log(`market: left out the listing "${name}": ${parsed.error.issues[0]?.message ?? 'not a listing'}`);
92
+ }
93
+ }
94
+ return { ...index, plugins };
95
+ }
96
+ function readDisk(file) {
97
+ try {
98
+ const parsed = JSON.parse(readFileSync(file, 'utf8'));
99
+ if (typeof parsed.fetchedAt !== 'string')
100
+ return undefined;
101
+ return { fetchedAt: parsed.fetchedAt, index: parseMarketIndex(parsed.index) };
102
+ }
103
+ catch {
104
+ return undefined;
105
+ }
106
+ }
107
+ function writeDisk(file, cached, log) {
108
+ try {
109
+ mkdirSync(path.dirname(file), { recursive: true });
110
+ const tmp = `${file}.${process.pid}.tmp`;
111
+ writeFileSync(tmp, `${JSON.stringify(cached, null, 2)}\n`);
112
+ renameSync(tmp, file);
113
+ }
114
+ catch (err) {
115
+ // The copy in memory still answers; a day's cache on disk is a convenience.
116
+ log(`market: could not keep the list on disk: ${err instanceof Error ? err.message : String(err)}`);
117
+ }
118
+ }
119
+ async function fetchIndex(deps) {
120
+ const doFetch = deps.fetch ?? fetch;
121
+ const url = marketUrl(deps.env);
122
+ const response = await doFetch(url, {
123
+ signal: AbortSignal.timeout(MARKET_TIMEOUT_MS),
124
+ headers: { accept: 'application/json' },
125
+ });
126
+ if (!response.ok)
127
+ throw new Error(`${url} answered ${response.status}`);
128
+ return parseMarketIndex(await response.json(), deps.log);
129
+ }
130
+ function reason(err) {
131
+ if (err instanceof Error && (err.name === 'TimeoutError' || err.name === 'AbortError')) {
132
+ return `it did not answer within ${MARKET_TIMEOUT_MS / 1000} seconds`;
133
+ }
134
+ if (err instanceof z.ZodError)
135
+ return 'what it answered is not a plugin list';
136
+ const cause = err instanceof Error && err.cause instanceof Error ? `: ${err.cause.message}` : '';
137
+ return `${err instanceof Error ? err.message : String(err)}${cause}`;
138
+ }
139
+ /** Which installed record, if any, is this listing. */
140
+ function installedAs(entry, record) {
141
+ return record.find((plugin) => plugin.name === entry.name || (plugin.source.kind === 'registry' && plugin.source.name === entry.npm));
142
+ }
143
+ /** The areas a listing reaches, from its claims, in the staged card's words. */
144
+ function listedUses(entry) {
145
+ const claims = entry.claims;
146
+ const uses = claims?.package?.uses ?? claims?.manifest?.uses;
147
+ return Array.isArray(uses) ? uses : [];
148
+ }
149
+ export function annotateMarket(plugins, record) {
150
+ return plugins.map((entry) => {
151
+ const here = installedAs(entry, record);
152
+ const newer = here !== undefined && (compareVersions(entry.version, here.version) ?? 0) > 0;
153
+ return {
154
+ ...entry,
155
+ usesWords: usesWords(listedUses(entry)),
156
+ ...(here === undefined ? {} : { installed: { version: here.version, name: here.name } }),
157
+ ...(newer ? { update: entry.version } : {}),
158
+ };
159
+ });
160
+ }
161
+ /* ------------------------------------------------------------------ *
162
+ * The listings' files: icons and screenshots
163
+ * ------------------------------------------------------------------ */
164
+ /** Where every listing's files live; nothing outside it is fetched for the page. */
165
+ export const MARKET_ASSET_PREFIX = `${MARKET_ORIGIN}/plugins/`;
166
+ /** A screenshot is a few hundred kilobytes; this is room and no more. */
167
+ export const MAX_ASSET_BYTES = 5 * 1024 * 1024;
168
+ /** What a listing's file may be. Anything else is not passed on. */
169
+ const ASSET_TYPES = new Set(['image/webp', 'image/png', 'image/jpeg', 'image/gif', 'image/svg+xml']);
170
+ /**
171
+ * The prefixes a file may be fetched from: withbuddi.com's, and the origin
172
+ * `BUDDI_MARKET_URL` names when set (a staging copy of the site), whose own
173
+ * files sit at the same place under it.
174
+ */
175
+ function assetPrefixes(env) {
176
+ const configured = env.BUDDI_MARKET_URL?.trim();
177
+ const prefixes = [MARKET_ASSET_PREFIX];
178
+ if (configured)
179
+ prefixes.push(`${configured.replace(/\/+$/, '')}/plugins/`);
180
+ return [...new Set(prefixes)];
181
+ }
182
+ /** The URL, when it is a listing's file; `undefined` for anything else. */
183
+ export function marketAssetUrl(env, raw) {
184
+ if (!raw)
185
+ return undefined;
186
+ let url;
187
+ try {
188
+ url = new URL(raw);
189
+ }
190
+ catch {
191
+ return undefined;
192
+ }
193
+ // Parsed, so `..` and encoded dots are resolved before the prefix is checked.
194
+ if (url.username || url.password || url.search || url.hash)
195
+ return undefined;
196
+ return assetPrefixes(env).some((prefix) => url.href.startsWith(prefix)) && url.href.length > url.origin.length + '/plugins/'.length
197
+ ? url
198
+ : undefined;
199
+ }
200
+ function assetPaths(env, url) {
201
+ const key = createHash('sha256').update(url.href).digest('hex');
202
+ const dir = path.join(path.dirname(marketFile(env)), 'assets');
203
+ return { bytes: path.join(dir, key), meta: path.join(dir, `${key}.json`) };
204
+ }
205
+ function readAsset(env, url) {
206
+ try {
207
+ const files = assetPaths(env, url);
208
+ const meta = JSON.parse(readFileSync(files.meta, 'utf8'));
209
+ if (meta.url !== url.href || typeof meta.type !== 'string' || typeof meta.fetchedAt !== 'string')
210
+ return undefined;
211
+ return { bytes: readFileSync(files.bytes), type: meta.type, fetchedAt: meta.fetchedAt };
212
+ }
213
+ catch {
214
+ return undefined;
215
+ }
216
+ }
217
+ function writeAsset(env, url, asset, log) {
218
+ try {
219
+ const files = assetPaths(env, url);
220
+ mkdirSync(path.dirname(files.bytes), { recursive: true });
221
+ const tmp = `${files.bytes}.${process.pid}.tmp`;
222
+ writeFileSync(tmp, asset.bytes);
223
+ renameSync(tmp, files.bytes);
224
+ writeFileSync(files.meta, `${JSON.stringify({ url: url.href, type: asset.type, fetchedAt: asset.fetchedAt })}\n`);
225
+ }
226
+ catch (err) {
227
+ log(`market: could not keep ${url.href} on disk: ${err instanceof Error ? err.message : String(err)}`);
228
+ }
229
+ }
230
+ async function fetchAsset(deps, url) {
231
+ const doFetch = deps.fetch ?? fetch;
232
+ const response = await doFetch(url.href, { signal: AbortSignal.timeout(MARKET_TIMEOUT_MS), redirect: 'error' });
233
+ if (!response.ok)
234
+ throw new Error(`${url.href} answered ${response.status}`);
235
+ const type = (response.headers.get('content-type') ?? '').split(';')[0]?.trim().toLowerCase() ?? '';
236
+ if (!ASSET_TYPES.has(type))
237
+ throw new Error(`${url.href} is not a picture (${type || 'no type'})`);
238
+ const declared = Number(response.headers.get('content-length') ?? '0');
239
+ if (declared > MAX_ASSET_BYTES)
240
+ throw new Error(`${url.href} is larger than a listing's picture should be`);
241
+ const bytes = Buffer.from(await response.arrayBuffer());
242
+ if (bytes.length > MAX_ASSET_BYTES)
243
+ throw new Error(`${url.href} is larger than a listing's picture should be`);
244
+ return { bytes, type };
245
+ }
246
+ /**
247
+ * One listing's file: from the copy beside the index while it is under a day
248
+ * old, else fetched and kept. A fetch that fails with a copy on hand answers
249
+ * the copy; with none, it throws.
250
+ */
251
+ export async function marketAsset(deps, url) {
252
+ const now = deps.now ?? (() => new Date());
253
+ const kept = readAsset(deps.env, url);
254
+ if (kept && now().getTime() - Date.parse(kept.fetchedAt) < MARKET_ASSET_TTL_MS)
255
+ return kept;
256
+ try {
257
+ const asset = { ...(await fetchAsset(deps, url)), fetchedAt: now().toISOString() };
258
+ writeAsset(deps.env, url, asset, deps.log);
259
+ return asset;
260
+ }
261
+ catch (err) {
262
+ if (kept)
263
+ return kept;
264
+ throw err;
265
+ }
266
+ }
267
+ /**
268
+ * `GET /api/market/asset?url=<a listing's file>` — a screenshot for the
269
+ * detail sheet. An SVG goes out only as the sanitiser re-wrote it.
270
+ */
271
+ export async function marketAssetRoute(deps, url) {
272
+ const target = marketAssetUrl(deps.env, url.searchParams.get('url'));
273
+ if (!target)
274
+ return { status: 400, body: { error: `Only a listing's own files, under ${MARKET_ASSET_PREFIX}, come through here.` } };
275
+ let asset;
276
+ try {
277
+ asset = await marketAsset(deps, target);
278
+ }
279
+ catch (err) {
280
+ deps.log(`market: fetching ${target.href} failed: ${reason(err)}`);
281
+ return { status: 502, body: { error: `buddi could not fetch that picture from withbuddi.com: ${reason(err)}` } };
282
+ }
283
+ if (asset.type === 'image/svg+xml') {
284
+ const svg = sanitizeIconSvg(asset.bytes.toString('utf8'));
285
+ if (svg === undefined)
286
+ return { status: 415, body: { error: 'That picture is not one buddi will draw.' } };
287
+ return { status: 200, bytes: Buffer.from(svg), type: asset.type };
288
+ }
289
+ return { status: 200, bytes: asset.bytes, type: asset.type };
290
+ }
291
+ /** A listing's icon, as markup the page may draw inline; `undefined` when there is none it will draw. */
292
+ async function iconSvgOf(deps, entry) {
293
+ const icon = entry.icon;
294
+ const url = typeof icon === 'string' ? marketAssetUrl(deps.env, icon) : undefined;
295
+ if (!url)
296
+ return undefined;
297
+ try {
298
+ const asset = await marketAsset(deps, url);
299
+ return asset.type === 'image/svg+xml' ? sanitizeIconSvg(asset.bytes.toString('utf8')) : undefined;
300
+ }
301
+ catch (err) {
302
+ deps.log(`market: the icon of "${entry.name}" was left out: ${reason(err)}`);
303
+ return undefined;
304
+ }
305
+ }
306
+ /** `GET /api/market[?refresh=1]`. */
307
+ export async function marketRoute(deps, url) {
308
+ const now = deps.now ?? (() => new Date());
309
+ const file = marketFile(deps.env);
310
+ const refresh = url.searchParams.get('refresh') === '1';
311
+ let cached = memory.get(file) ?? readDisk(file);
312
+ if (cached !== undefined)
313
+ memory.set(file, cached);
314
+ const fresh = cached !== undefined && now().getTime() - Date.parse(cached.fetchedAt) < MARKET_TTL_MS;
315
+ let stale = false;
316
+ if (refresh || !fresh) {
317
+ try {
318
+ const index = await fetchIndex(deps);
319
+ cached = { fetchedAt: now().toISOString(), index };
320
+ memory.set(file, cached);
321
+ writeDisk(file, cached, deps.log);
322
+ }
323
+ catch (err) {
324
+ const why = reason(err);
325
+ deps.log(`market: fetching the plugin list failed: ${why}`);
326
+ if (cached === undefined) {
327
+ return {
328
+ status: 200,
329
+ body: { plugins: [], unavailable: `buddi could not reach withbuddi.com: ${why}` },
330
+ };
331
+ }
332
+ stale = true;
333
+ }
334
+ }
335
+ const { plugins: record } = installedRecord(deps.env);
336
+ const listed = cached.index.plugins;
337
+ const icons = await Promise.all(listed.map((entry) => iconSvgOf(deps, entry)));
338
+ return {
339
+ status: 200,
340
+ body: {
341
+ fetchedAt: cached.fetchedAt,
342
+ ...(stale ? { stale: true } : {}),
343
+ plugins: annotateMarket(listed, record).map((entry, i) => icons[i] === undefined ? entry : { ...entry, iconSvg: icons[i] }),
344
+ },
345
+ };
346
+ }
347
+ //# sourceMappingURL=market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/web/market.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import type { IncomingMessage } from 'node:http';
2
2
  import type { Pool } from 'pg';
3
+ import { type InstalledPlugin } from '@buddi/core';
3
4
  import * as engine from '../plugins/index.js';
4
5
  import type { StagePhase } from '../plugins/index.js';
6
+ import type { LiveRegistry } from '../plugins/live.js';
5
7
  import type { PagesDeps } from './pages.js';
6
8
  import type { DecideResult, WriteResult } from './write.js';
7
9
  /** A refusal in the shape the router sends. Same contract as `backups.ts`. */
@@ -31,14 +33,29 @@ export interface PluginsDeps {
31
33
  * runs (`ctx.buddi.network`): Connections' services. Without one, the
32
34
  * manifest's `network` is all there is.
33
35
  */
34
- registry?: {
36
+ registry?: ({
35
37
  networkOf(plugin: string): Array<{
36
38
  host: string;
37
39
  why: string;
38
40
  runtime: boolean;
39
41
  }> | undefined;
40
- } | undefined;
42
+ } & Partial<LiveRegistry>) | undefined;
41
43
  }
44
+ /**
45
+ * The staged record, minus the disk.
46
+ *
47
+ * `dir` and `packageDir` are where this installation put the package, and the
48
+ * page has no use for either. They stay here.
49
+ */
50
+ /**
51
+ * The words the staged card uses for each area a plugin reaches, from a list
52
+ * that may come from somewhere else (a market entry): anything not an area
53
+ * buddi knows is left out rather than guessed at.
54
+ */
55
+ export declare function usesWords(uses: readonly unknown[]): Array<{
56
+ use: string;
57
+ words: string;
58
+ }>;
42
59
  export interface StageJob {
43
60
  id: string;
44
61
  kind: 'stage' | 'update';
@@ -49,6 +66,18 @@ export interface StageJob {
49
66
  finishedAt?: string;
50
67
  }
51
68
  export declare function pluginJobRoute(_deps: PluginsDeps, id: string): RouteReply;
69
+ /**
70
+ * The record, or the reason there is none.
71
+ *
72
+ * A record that cannot be parsed is not "nothing installed": everything the
73
+ * owner installed is still on disk and still in their agents' grants, and a
74
+ * page that drew an empty list would be saying the opposite of what happened.
75
+ * So the sentence comes back with it and the page shows that instead.
76
+ */
77
+ export declare function installedRecord(env: NodeJS.ProcessEnv): {
78
+ plugins: InstalledPlugin[];
79
+ unavailable?: string;
80
+ };
52
81
  /** Everything the Plugins section draws, in one read. */
53
82
  export declare function listPlugins(deps: PluginsDeps): Promise<RouteReply>;
54
83
  export declare function stageRoute(deps: PluginsDeps, body: Record<string, unknown>): RouteReply;
@@ -111,6 +140,12 @@ export declare function uploadRoute(deps: PluginsDeps, upload: {
111
140
  export declare function approveRoute(deps: PluginsDeps, id: string, body: Record<string, unknown>): Promise<RouteReply>;
112
141
  export declare function rejectRoute(deps: PluginsDeps, id: string): RouteReply;
113
142
  export declare function updateRoute(deps: PluginsDeps, name: string, body: Record<string, unknown>): RouteReply;
143
+ /**
144
+ * Disable or enable an installed plugin, in this running gateway at once: its
145
+ * tools, pages, glances and watchers leave (or come back) with the registry,
146
+ * and the rail drops the entry on its next read of `GET /api/pages`.
147
+ */
148
+ export declare function toggleRoute(deps: PluginsDeps, name: string, enabled: boolean): Promise<RouteReply>;
114
149
  /**
115
150
  * Remove a plugin, and decide what happens to its data.
116
151
  *
@@ -120,11 +155,6 @@ export declare function updateRoute(deps: PluginsDeps, name: string, body: Recor
120
155
  * here as well as in the engine, because a guard only a browser applies is not
121
156
  * a guard.
122
157
  */
123
- /**
124
- * Disable or enable an installed plugin. The record changes now; loading or
125
- * not loading it is the next start's, exactly as for an install.
126
- */
127
- export declare function toggleRoute(deps: PluginsDeps, name: string, enabled: boolean): Promise<RouteReply>;
128
158
  export declare function uninstallRoute(deps: PluginsDeps, name: string, body: Record<string, unknown>): Promise<RouteReply>;
129
159
  /** What the accept route needs beyond a page: the roster, and the owner's yes. */
130
160
  export interface AcceptAgentDeps extends PagesDeps {
@@ -1 +1 @@
1
- {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/web/plugins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/web/plugins.ts"],"names":[],"mappings":"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"}