@collage-dam/mcp-server 0.1.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 (306) hide show
  1. package/.env.example +56 -0
  2. package/CHANGELOG.md +90 -0
  3. package/LICENSE +21 -0
  4. package/README.md +512 -0
  5. package/dist/client.d.ts +497 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +1162 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/conventions/confirmation.d.ts +89 -0
  10. package/dist/conventions/confirmation.d.ts.map +1 -0
  11. package/dist/conventions/confirmation.js +132 -0
  12. package/dist/conventions/confirmation.js.map +1 -0
  13. package/dist/conventions/dry-run/batch-executor.d.ts +36 -0
  14. package/dist/conventions/dry-run/batch-executor.d.ts.map +1 -0
  15. package/dist/conventions/dry-run/batch-executor.js +89 -0
  16. package/dist/conventions/dry-run/batch-executor.js.map +1 -0
  17. package/dist/conventions/dry-run/diff-renderer.d.ts +34 -0
  18. package/dist/conventions/dry-run/diff-renderer.d.ts.map +1 -0
  19. package/dist/conventions/dry-run/diff-renderer.js +158 -0
  20. package/dist/conventions/dry-run/diff-renderer.js.map +1 -0
  21. package/dist/conventions/dry-run/index.d.ts +13 -0
  22. package/dist/conventions/dry-run/index.d.ts.map +1 -0
  23. package/dist/conventions/dry-run/index.js +10 -0
  24. package/dist/conventions/dry-run/index.js.map +1 -0
  25. package/dist/conventions/dry-run/mutating-tool.d.ts +64 -0
  26. package/dist/conventions/dry-run/mutating-tool.d.ts.map +1 -0
  27. package/dist/conventions/dry-run/mutating-tool.js +88 -0
  28. package/dist/conventions/dry-run/mutating-tool.js.map +1 -0
  29. package/dist/conventions/dry-run/summary.d.ts +66 -0
  30. package/dist/conventions/dry-run/summary.d.ts.map +1 -0
  31. package/dist/conventions/dry-run/summary.js +185 -0
  32. package/dist/conventions/dry-run/summary.js.map +1 -0
  33. package/dist/conventions/dry-run/types.d.ts +597 -0
  34. package/dist/conventions/dry-run/types.d.ts.map +1 -0
  35. package/dist/conventions/dry-run/types.js +108 -0
  36. package/dist/conventions/dry-run/types.js.map +1 -0
  37. package/dist/conventions/dry-run/with-dry-run.d.ts +66 -0
  38. package/dist/conventions/dry-run/with-dry-run.d.ts.map +1 -0
  39. package/dist/conventions/dry-run/with-dry-run.js +219 -0
  40. package/dist/conventions/dry-run/with-dry-run.js.map +1 -0
  41. package/dist/conventions/env.d.ts +49 -0
  42. package/dist/conventions/env.d.ts.map +1 -0
  43. package/dist/conventions/env.js +84 -0
  44. package/dist/conventions/env.js.map +1 -0
  45. package/dist/conventions/errors.d.ts +68 -0
  46. package/dist/conventions/errors.d.ts.map +1 -0
  47. package/dist/conventions/errors.js +81 -0
  48. package/dist/conventions/errors.js.map +1 -0
  49. package/dist/conventions/logger.d.ts +28 -0
  50. package/dist/conventions/logger.d.ts.map +1 -0
  51. package/dist/conventions/logger.js +105 -0
  52. package/dist/conventions/logger.js.map +1 -0
  53. package/dist/conventions/pagination.d.ts +37 -0
  54. package/dist/conventions/pagination.d.ts.map +1 -0
  55. package/dist/conventions/pagination.js +53 -0
  56. package/dist/conventions/pagination.js.map +1 -0
  57. package/dist/conventions/rate-limiter.d.ts +54 -0
  58. package/dist/conventions/rate-limiter.d.ts.map +1 -0
  59. package/dist/conventions/rate-limiter.js +143 -0
  60. package/dist/conventions/rate-limiter.js.map +1 -0
  61. package/dist/conventions/response-budget.d.ts +66 -0
  62. package/dist/conventions/response-budget.d.ts.map +1 -0
  63. package/dist/conventions/response-budget.js +89 -0
  64. package/dist/conventions/response-budget.js.map +1 -0
  65. package/dist/conventions/schema-version.d.ts +27 -0
  66. package/dist/conventions/schema-version.d.ts.map +1 -0
  67. package/dist/conventions/schema-version.js +29 -0
  68. package/dist/conventions/schema-version.js.map +1 -0
  69. package/dist/conventions/state-store-redis.d.ts +32 -0
  70. package/dist/conventions/state-store-redis.d.ts.map +1 -0
  71. package/dist/conventions/state-store-redis.js +77 -0
  72. package/dist/conventions/state-store-redis.js.map +1 -0
  73. package/dist/conventions/state-store.d.ts +46 -0
  74. package/dist/conventions/state-store.d.ts.map +1 -0
  75. package/dist/conventions/state-store.js +105 -0
  76. package/dist/conventions/state-store.js.map +1 -0
  77. package/dist/index.d.ts +5 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +421 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/prompts/collection-audit.d.ts +13 -0
  82. package/dist/prompts/collection-audit.d.ts.map +1 -0
  83. package/dist/prompts/collection-audit.js +168 -0
  84. package/dist/prompts/collection-audit.js.map +1 -0
  85. package/dist/prompts/create-distribution.d.ts +15 -0
  86. package/dist/prompts/create-distribution.d.ts.map +1 -0
  87. package/dist/prompts/create-distribution.js +111 -0
  88. package/dist/prompts/create-distribution.js.map +1 -0
  89. package/dist/prompts/helpers.d.ts +20 -0
  90. package/dist/prompts/helpers.d.ts.map +1 -0
  91. package/dist/prompts/helpers.js +53 -0
  92. package/dist/prompts/helpers.js.map +1 -0
  93. package/dist/prompts/library-health-audit.d.ts +13 -0
  94. package/dist/prompts/library-health-audit.d.ts.map +1 -0
  95. package/dist/prompts/library-health-audit.js +131 -0
  96. package/dist/prompts/library-health-audit.js.map +1 -0
  97. package/dist/prompts/usage-insights.d.ts +13 -0
  98. package/dist/prompts/usage-insights.d.ts.map +1 -0
  99. package/dist/prompts/usage-insights.js +98 -0
  100. package/dist/prompts/usage-insights.js.map +1 -0
  101. package/dist/prompts/wrap-prompt-as-tool.d.ts +48 -0
  102. package/dist/prompts/wrap-prompt-as-tool.d.ts.map +1 -0
  103. package/dist/prompts/wrap-prompt-as-tool.js +61 -0
  104. package/dist/prompts/wrap-prompt-as-tool.js.map +1 -0
  105. package/dist/resources/asset-by-id.d.ts +4 -0
  106. package/dist/resources/asset-by-id.d.ts.map +1 -0
  107. package/dist/resources/asset-by-id.js +27 -0
  108. package/dist/resources/asset-by-id.js.map +1 -0
  109. package/dist/resources/collections.d.ts +5 -0
  110. package/dist/resources/collections.d.ts.map +1 -0
  111. package/dist/resources/collections.js +48 -0
  112. package/dist/resources/collections.js.map +1 -0
  113. package/dist/resources/custom-fields.d.ts +4 -0
  114. package/dist/resources/custom-fields.d.ts.map +1 -0
  115. package/dist/resources/custom-fields.js +30 -0
  116. package/dist/resources/custom-fields.js.map +1 -0
  117. package/dist/resources/folders.d.ts +5 -0
  118. package/dist/resources/folders.d.ts.map +1 -0
  119. package/dist/resources/folders.js +73 -0
  120. package/dist/resources/folders.js.map +1 -0
  121. package/dist/resources/helpers.d.ts +17 -0
  122. package/dist/resources/helpers.d.ts.map +1 -0
  123. package/dist/resources/helpers.js +59 -0
  124. package/dist/resources/helpers.js.map +1 -0
  125. package/dist/resources/portals.d.ts +5 -0
  126. package/dist/resources/portals.d.ts.map +1 -0
  127. package/dist/resources/portals.js +81 -0
  128. package/dist/resources/portals.js.map +1 -0
  129. package/dist/resources/recent-and-dashboard.d.ts +5 -0
  130. package/dist/resources/recent-and-dashboard.d.ts.map +1 -0
  131. package/dist/resources/recent-and-dashboard.js +42 -0
  132. package/dist/resources/recent-and-dashboard.js.map +1 -0
  133. package/dist/tools/asset-selection.d.ts +102 -0
  134. package/dist/tools/asset-selection.d.ts.map +1 -0
  135. package/dist/tools/asset-selection.js +133 -0
  136. package/dist/tools/asset-selection.js.map +1 -0
  137. package/dist/tools/audit/audit-folder-structure.d.ts +108 -0
  138. package/dist/tools/audit/audit-folder-structure.d.ts.map +1 -0
  139. package/dist/tools/audit/audit-folder-structure.js +260 -0
  140. package/dist/tools/audit/audit-folder-structure.js.map +1 -0
  141. package/dist/tools/audit/audit-naming-conventions.d.ts +83 -0
  142. package/dist/tools/audit/audit-naming-conventions.d.ts.map +1 -0
  143. package/dist/tools/audit/audit-naming-conventions.js +238 -0
  144. package/dist/tools/audit/audit-naming-conventions.js.map +1 -0
  145. package/dist/tools/audit/audit-tagging-hygiene.d.ts +77 -0
  146. package/dist/tools/audit/audit-tagging-hygiene.d.ts.map +1 -0
  147. package/dist/tools/audit/audit-tagging-hygiene.js +402 -0
  148. package/dist/tools/audit/audit-tagging-hygiene.js.map +1 -0
  149. package/dist/tools/audit/detect-duplicates.d.ts +62 -0
  150. package/dist/tools/audit/detect-duplicates.d.ts.map +1 -0
  151. package/dist/tools/audit/detect-duplicates.js +0 -0
  152. package/dist/tools/audit/detect-duplicates.js.map +1 -0
  153. package/dist/tools/audit/types.d.ts +526 -0
  154. package/dist/tools/audit/types.d.ts.map +1 -0
  155. package/dist/tools/audit/types.js +188 -0
  156. package/dist/tools/audit/types.js.map +1 -0
  157. package/dist/tools/bulk-move-assets.d.ts +78 -0
  158. package/dist/tools/bulk-move-assets.d.ts.map +1 -0
  159. package/dist/tools/bulk-move-assets.js +122 -0
  160. package/dist/tools/bulk-move-assets.js.map +1 -0
  161. package/dist/tools/bulk-normalize-filenames.d.ts +62 -0
  162. package/dist/tools/bulk-normalize-filenames.d.ts.map +1 -0
  163. package/dist/tools/bulk-normalize-filenames.js +237 -0
  164. package/dist/tools/bulk-normalize-filenames.js.map +1 -0
  165. package/dist/tools/bulk-rename-assets.d.ts +79 -0
  166. package/dist/tools/bulk-rename-assets.d.ts.map +1 -0
  167. package/dist/tools/bulk-rename-assets.js +139 -0
  168. package/dist/tools/bulk-rename-assets.js.map +1 -0
  169. package/dist/tools/bulk-tags.d.ts +107 -0
  170. package/dist/tools/bulk-tags.d.ts.map +1 -0
  171. package/dist/tools/bulk-tags.js +220 -0
  172. package/dist/tools/bulk-tags.js.map +1 -0
  173. package/dist/tools/client-adapters.d.ts +76 -0
  174. package/dist/tools/client-adapters.d.ts.map +1 -0
  175. package/dist/tools/client-adapters.js +648 -0
  176. package/dist/tools/client-adapters.js.map +1 -0
  177. package/dist/tools/collection-membership.d.ts +90 -0
  178. package/dist/tools/collection-membership.d.ts.map +1 -0
  179. package/dist/tools/collection-membership.js +195 -0
  180. package/dist/tools/collection-membership.js.map +1 -0
  181. package/dist/tools/create-collection.d.ts +63 -0
  182. package/dist/tools/create-collection.d.ts.map +1 -0
  183. package/dist/tools/create-collection.js +151 -0
  184. package/dist/tools/create-collection.js.map +1 -0
  185. package/dist/tools/create-folder.d.ts +46 -0
  186. package/dist/tools/create-folder.d.ts.map +1 -0
  187. package/dist/tools/create-folder.js +83 -0
  188. package/dist/tools/create-folder.js.map +1 -0
  189. package/dist/tools/create-share-link.d.ts +107 -0
  190. package/dist/tools/create-share-link.d.ts.map +1 -0
  191. package/dist/tools/create-share-link.js +239 -0
  192. package/dist/tools/create-share-link.js.map +1 -0
  193. package/dist/tools/get-asset-details.d.ts +401 -0
  194. package/dist/tools/get-asset-details.d.ts.map +1 -0
  195. package/dist/tools/get-asset-details.js +56 -0
  196. package/dist/tools/get-asset-details.js.map +1 -0
  197. package/dist/tools/get-collection.d.ts +126 -0
  198. package/dist/tools/get-collection.d.ts.map +1 -0
  199. package/dist/tools/get-collection.js +52 -0
  200. package/dist/tools/get-collection.js.map +1 -0
  201. package/dist/tools/get-embed-code.d.ts +195 -0
  202. package/dist/tools/get-embed-code.d.ts.map +1 -0
  203. package/dist/tools/get-embed-code.js +214 -0
  204. package/dist/tools/get-embed-code.js.map +1 -0
  205. package/dist/tools/insights/analyze-share-links.d.ts +159 -0
  206. package/dist/tools/insights/analyze-share-links.d.ts.map +1 -0
  207. package/dist/tools/insights/analyze-share-links.js +314 -0
  208. package/dist/tools/insights/analyze-share-links.js.map +1 -0
  209. package/dist/tools/insights/insight-cache.d.ts +36 -0
  210. package/dist/tools/insights/insight-cache.d.ts.map +1 -0
  211. package/dist/tools/insights/insight-cache.js +98 -0
  212. package/dist/tools/insights/insight-cache.js.map +1 -0
  213. package/dist/tools/insights/report-asset-activation.d.ts +149 -0
  214. package/dist/tools/insights/report-asset-activation.d.ts.map +1 -0
  215. package/dist/tools/insights/report-asset-activation.js +380 -0
  216. package/dist/tools/insights/report-asset-activation.js.map +1 -0
  217. package/dist/tools/insights/report-stale-assets.d.ts +120 -0
  218. package/dist/tools/insights/report-stale-assets.d.ts.map +1 -0
  219. package/dist/tools/insights/report-stale-assets.js +281 -0
  220. package/dist/tools/insights/report-stale-assets.js.map +1 -0
  221. package/dist/tools/insights/report-top-assets.d.ts +139 -0
  222. package/dist/tools/insights/report-top-assets.d.ts.map +1 -0
  223. package/dist/tools/insights/report-top-assets.js +407 -0
  224. package/dist/tools/insights/report-top-assets.js.map +1 -0
  225. package/dist/tools/list-categories.d.ts +127 -0
  226. package/dist/tools/list-categories.d.ts.map +1 -0
  227. package/dist/tools/list-categories.js +68 -0
  228. package/dist/tools/list-categories.js.map +1 -0
  229. package/dist/tools/list-collections.d.ts +127 -0
  230. package/dist/tools/list-collections.d.ts.map +1 -0
  231. package/dist/tools/list-collections.js +53 -0
  232. package/dist/tools/list-collections.js.map +1 -0
  233. package/dist/tools/list-custom-fields.d.ts +125 -0
  234. package/dist/tools/list-custom-fields.d.ts.map +1 -0
  235. package/dist/tools/list-custom-fields.js +51 -0
  236. package/dist/tools/list-custom-fields.js.map +1 -0
  237. package/dist/tools/list-share-links.d.ts +192 -0
  238. package/dist/tools/list-share-links.d.ts.map +1 -0
  239. package/dist/tools/list-share-links.js +92 -0
  240. package/dist/tools/list-share-links.js.map +1 -0
  241. package/dist/tools/list-workspaces.d.ts +88 -0
  242. package/dist/tools/list-workspaces.d.ts.map +1 -0
  243. package/dist/tools/list-workspaces.js +71 -0
  244. package/dist/tools/list-workspaces.js.map +1 -0
  245. package/dist/tools/move-asset.d.ts +48 -0
  246. package/dist/tools/move-asset.d.ts.map +1 -0
  247. package/dist/tools/move-asset.js +85 -0
  248. package/dist/tools/move-asset.js.map +1 -0
  249. package/dist/tools/rename-asset.d.ts +88 -0
  250. package/dist/tools/rename-asset.d.ts.map +1 -0
  251. package/dist/tools/rename-asset.js +100 -0
  252. package/dist/tools/rename-asset.js.map +1 -0
  253. package/dist/tools/rename-folder.d.ts +55 -0
  254. package/dist/tools/rename-folder.d.ts.map +1 -0
  255. package/dist/tools/rename-folder.js +101 -0
  256. package/dist/tools/rename-folder.js.map +1 -0
  257. package/dist/tools/revoke-share-link.d.ts +55 -0
  258. package/dist/tools/revoke-share-link.d.ts.map +1 -0
  259. package/dist/tools/revoke-share-link.js +77 -0
  260. package/dist/tools/revoke-share-link.js.map +1 -0
  261. package/dist/tools/search/facets.d.ts +34 -0
  262. package/dist/tools/search/facets.d.ts.map +1 -0
  263. package/dist/tools/search/facets.js +147 -0
  264. package/dist/tools/search/facets.js.map +1 -0
  265. package/dist/tools/search/filter-builder.d.ts +33 -0
  266. package/dist/tools/search/filter-builder.d.ts.map +1 -0
  267. package/dist/tools/search/filter-builder.js +111 -0
  268. package/dist/tools/search/filter-builder.js.map +1 -0
  269. package/dist/tools/search/search-assets.d.ts +41 -0
  270. package/dist/tools/search/search-assets.d.ts.map +1 -0
  271. package/dist/tools/search/search-assets.js +162 -0
  272. package/dist/tools/search/search-assets.js.map +1 -0
  273. package/dist/tools/search/search-collections.d.ts +35 -0
  274. package/dist/tools/search/search-collections.d.ts.map +1 -0
  275. package/dist/tools/search/search-collections.js +103 -0
  276. package/dist/tools/search/search-collections.js.map +1 -0
  277. package/dist/tools/search/types.d.ts +1047 -0
  278. package/dist/tools/search/types.d.ts.map +1 -0
  279. package/dist/tools/search/types.js +216 -0
  280. package/dist/tools/search/types.js.map +1 -0
  281. package/dist/tools/update-asset-metadata.d.ts +78 -0
  282. package/dist/tools/update-asset-metadata.d.ts.map +1 -0
  283. package/dist/tools/update-asset-metadata.js +203 -0
  284. package/dist/tools/update-asset-metadata.js.map +1 -0
  285. package/dist/tools/update-collection.d.ts +69 -0
  286. package/dist/tools/update-collection.d.ts.map +1 -0
  287. package/dist/tools/update-collection.js +142 -0
  288. package/dist/tools/update-collection.js.map +1 -0
  289. package/dist/tools/view-category-contents.d.ts +231 -0
  290. package/dist/tools/view-category-contents.d.ts.map +1 -0
  291. package/dist/tools/view-category-contents.js +97 -0
  292. package/dist/tools/view-category-contents.js.map +1 -0
  293. package/dist/types.d.ts +1326 -0
  294. package/dist/types.d.ts.map +1 -0
  295. package/dist/types.js +288 -0
  296. package/dist/types.js.map +1 -0
  297. package/dist/typesense.d.ts +84 -0
  298. package/dist/typesense.d.ts.map +1 -0
  299. package/dist/typesense.js +243 -0
  300. package/dist/typesense.js.map +1 -0
  301. package/docs/api-field-verification.md +244 -0
  302. package/docs/deployment-runbook.md +446 -0
  303. package/docs/security-review.md +195 -0
  304. package/docs/typesense-filter-schema.md +262 -0
  305. package/docs/verified-endpoints.md +38 -0
  306. package/package.json +72 -0
@@ -0,0 +1,83 @@
1
+ // ── create_folder ────────────────────────────────────────────────────
2
+ // Creates one new folder, optionally under a parent. Wraps the dry-run
3
+ // framework so the call is plan → preview → execute.
4
+ //
5
+ // Upstream surface (different paths for top-level vs sub-folder, same body
6
+ // shape modulo `category_id`):
7
+ // POST digital-assets/category/add { workspace_id, folder_name }
8
+ // POST digital-assets/category/add-sub-category { workspace_id, folder_name, category_id }
9
+ //
10
+ // MVP scope: one folder per call. Bulk create is Phase 1.5 if needed.
11
+ import { z } from 'zod';
12
+ import { MutatingTool, } from '../conventions/dry-run/index.js';
13
+ import { createToolError } from '../conventions/errors.js';
14
+ import { IdSchema } from '../types.js';
15
+ export const CreateFolderInputSchema = z.object({
16
+ folder_name: z.string().min(1).max(255),
17
+ parent_id: IdSchema.nullable().optional(),
18
+ });
19
+ export const CREATE_FOLDER_DESCRIPTION = 'Create a new folder (category) in the workspace. Pass `parent_id` to ' +
20
+ 'create a sub-folder, omit it to create a top-level folder. Two-step: ' +
21
+ 'first call returns a preview plus a confirmation_token; second call ' +
22
+ '(with the token) executes the create and returns the new folder id.';
23
+ export class CreateFolderTool extends MutatingTool {
24
+ name = 'create_folder';
25
+ chunkSize = 1;
26
+ client;
27
+ constructor(deps) {
28
+ super(deps);
29
+ this.client = deps.client;
30
+ }
31
+ plan(input) {
32
+ const parentId = input.parent_id ?? null;
33
+ const after = {
34
+ folder_name: input.folder_name,
35
+ parent_id: parentId === null ? null : String(parentId),
36
+ };
37
+ const change = {
38
+ id: 'new-folder',
39
+ operation: 'create',
40
+ before: null,
41
+ after,
42
+ metadata: {
43
+ folder_name: input.folder_name,
44
+ parent_id: parentId === null ? null : String(parentId),
45
+ },
46
+ };
47
+ const riskFlags = [];
48
+ if (input.folder_name.length > 100) {
49
+ riskFlags.push({
50
+ code: 'long_folder_name',
51
+ severity: 'warning',
52
+ message: 'folder name exceeds 100 characters',
53
+ count: 1,
54
+ });
55
+ }
56
+ return { changes: [change], riskFlags };
57
+ }
58
+ apply = async (change) => {
59
+ const meta = (change.metadata ?? {});
60
+ if (typeof meta.folder_name !== 'string' || meta.folder_name.length === 0) {
61
+ return {
62
+ ok: false,
63
+ error: createToolError('VALIDATION', `change ${change.id} missing folder_name`),
64
+ };
65
+ }
66
+ const result = await this.client.createFolder({
67
+ folder_name: meta.folder_name,
68
+ parent_id: meta.parent_id ?? null,
69
+ });
70
+ if (!result.ok) {
71
+ return { ok: false, error: result.error };
72
+ }
73
+ return {
74
+ ok: true,
75
+ result: {
76
+ folder_id: result.folder_id,
77
+ folder_name: meta.folder_name,
78
+ parent_id: meta.parent_id ?? null,
79
+ },
80
+ };
81
+ };
82
+ }
83
+ //# sourceMappingURL=create-folder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-folder.js","sourceRoot":"","sources":["../../src/tools/create-folder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { z } from 'zod';
2
+ import { MutatingTool, type ApplyFn, type MutatingToolDeps, type PlanResult } from '../conventions/dry-run/index.js';
3
+ import type { DryRunPlan } from '../conventions/dry-run/index.js';
4
+ import { type McpToolError } from '../conventions/errors.js';
5
+ export declare const CreateShareLinkInputSchema: z.ZodEffects<z.ZodObject<{
6
+ /** Target a single collection — its full asset roster is shared. */
7
+ collection_id: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodString]>>;
8
+ /** Target an explicit list of assets (≤50). */
9
+ asset_ids: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodNumber, z.ZodString]>, "many">>;
10
+ /** Optional human-readable title for the share. */
11
+ title: z.ZodOptional<z.ZodString>;
12
+ /** Optional description shown on the share landing page. */
13
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
14
+ /** Expiration in ISO 8601 datetime. Sent to upstream as 'MMM D, YYYY'. */
15
+ expiration: z.ZodOptional<z.ZodNullable<z.ZodString>>;
16
+ /** Optional password gate. */
17
+ password: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ /** When true, viewers cannot download the asset(s). Defaults to false. */
19
+ hide_download: z.ZodOptional<z.ZodBoolean>;
20
+ /** When true, surface that the workspace watermark setting will apply. */
21
+ watermark: z.ZodOptional<z.ZodBoolean>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ description?: string | null | undefined;
24
+ title?: string | undefined;
25
+ expiration?: string | null | undefined;
26
+ password?: string | null | undefined;
27
+ hide_download?: boolean | undefined;
28
+ asset_ids?: (string | number)[] | undefined;
29
+ collection_id?: string | number | undefined;
30
+ watermark?: boolean | undefined;
31
+ }, {
32
+ description?: string | null | undefined;
33
+ title?: string | undefined;
34
+ expiration?: string | null | undefined;
35
+ password?: string | null | undefined;
36
+ hide_download?: boolean | undefined;
37
+ asset_ids?: (string | number)[] | undefined;
38
+ collection_id?: string | number | undefined;
39
+ watermark?: boolean | undefined;
40
+ }>, {
41
+ description?: string | null | undefined;
42
+ title?: string | undefined;
43
+ expiration?: string | null | undefined;
44
+ password?: string | null | undefined;
45
+ hide_download?: boolean | undefined;
46
+ asset_ids?: (string | number)[] | undefined;
47
+ collection_id?: string | number | undefined;
48
+ watermark?: boolean | undefined;
49
+ }, {
50
+ description?: string | null | undefined;
51
+ title?: string | undefined;
52
+ expiration?: string | null | undefined;
53
+ password?: string | null | undefined;
54
+ hide_download?: boolean | undefined;
55
+ asset_ids?: (string | number)[] | undefined;
56
+ collection_id?: string | number | undefined;
57
+ watermark?: boolean | undefined;
58
+ }>;
59
+ export type CreateShareLinkInput = z.infer<typeof CreateShareLinkInputSchema>;
60
+ export declare const CREATE_SHARE_LINK_DESCRIPTION: string;
61
+ export interface CreateShareLinkItemResult {
62
+ share_id: string;
63
+ share_url: string;
64
+ target_kind: 'collection' | 'assets';
65
+ }
66
+ export interface CreateShareLinkRequest {
67
+ target_kind: 'collection' | 'assets';
68
+ collection_id?: string;
69
+ asset_ids: string[];
70
+ title: string;
71
+ description: string | null;
72
+ password: string | null;
73
+ hide_download: 0 | 1;
74
+ expiration: string | null;
75
+ }
76
+ export interface CreateShareLinkClient {
77
+ createShareLink(request: CreateShareLinkRequest): Promise<{
78
+ ok: true;
79
+ share_id: string;
80
+ share_url: string;
81
+ } | {
82
+ ok: false;
83
+ error: McpToolError;
84
+ }>;
85
+ }
86
+ export interface CreateShareLinkDeps extends MutatingToolDeps<CreateShareLinkInput> {
87
+ client: CreateShareLinkClient;
88
+ }
89
+ export declare class CreateShareLinkTool extends MutatingTool<CreateShareLinkInput, CreateShareLinkItemResult> {
90
+ readonly name = "create_share_link";
91
+ protected readonly chunkSize = 1;
92
+ private readonly client;
93
+ constructor(deps: CreateShareLinkDeps);
94
+ protected plan(input: CreateShareLinkInput): PlanResult;
95
+ protected apply: ApplyFn<CreateShareLinkItemResult>;
96
+ }
97
+ export declare function buildCreateShareLinkTool(deps: CreateShareLinkDeps): CreateShareLinkTool;
98
+ export type CreateShareLinkPlan = DryRunPlan<CreateShareLinkInput>;
99
+ /**
100
+ * Convert an ISO 8601 datetime to the `'MMM D, YYYY'` format expected by
101
+ * the Collage `generate-share-assets-url` endpoint. Mirrors the
102
+ * Admin-Frontend's `moment(...).format('MMM D, YYYY')` call. Returns the
103
+ * original string unchanged if parsing fails — the upstream will surface
104
+ * any validation error as UPSTREAM in that case.
105
+ */
106
+ export declare function formatExpirationForUpstream(iso: string): string;
107
+ //# sourceMappingURL=create-share-link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-share-link.d.ts","sourceRoot":"","sources":["../../src/tools/create-share-link.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,UAAU,EAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAK9E,eAAO,MAAM,0BAA0B;IAEnC,oEAAoE;;IAEpE,+CAA+C;;IAE/C,mDAAmD;;IAEnD,4DAA4D;;IAE5D,0EAA0E;;IAE1E,8BAA8B;;IAE9B,0EAA0E;;IAE1E,0EAA0E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe3E,CAAC;AACJ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,6BAA6B,QAMN,CAAC;AAIrC,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,YAAY,GAAG,QAAQ,CAAC;CACtC;AAID,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,YAAY,GAAG,QAAQ,CAAC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,CACb,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CACN;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GACjD;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CACrC,CAAC;CACH;AAID,MAAM,WAAW,mBACf,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC;IAC9C,MAAM,EAAE,qBAAqB,CAAC;CAC/B;AAED,qBAAa,mBAAoB,SAAQ,YAAY,CACnD,oBAAoB,EACpB,yBAAyB,CAC1B;IACC,QAAQ,CAAC,IAAI,uBAAuB;IACpC,mBAA4B,SAAS,KAAK;IAE1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;gBAEnC,IAAI,EAAE,mBAAmB;IAKrC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,GAAG,UAAU;IA6FvD,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAkEjD;CACH;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,mBAAmB,GACxB,mBAAmB,CAErB;AAED,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAgCnE;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO/D"}
@@ -0,0 +1,239 @@
1
+ // ── create_share_link ────────────────────────────────────────────────
2
+ // Generates a single governed share link for a Collage collection or an
3
+ // explicit asset list (≤50). Wraps the dry-run framework so every call is
4
+ // plan → preview → execute.
5
+ //
6
+ // Upstream surface (verified via Admin-Frontend `ShareAssetDialog/index.vue`):
7
+ // POST digital-assets/dashboard/generate-share-assets-url
8
+ // body: { workspace_id, assets, category, title?, description?,
9
+ // password?, hide_download?: 0|1, expiration?: 'MMM D, YYYY' }
10
+ // POST digital-assets/collection/generate-share-url
11
+ // body: { workspace_id, id (collection_id), assets, ... }
12
+ //
13
+ // The asset-list cap (50) mirrors the existing collection-membership tools.
14
+ // `expiration` is provided by the caller as ISO datetime; we format it as
15
+ // `'MMM D, YYYY'` to match what the Admin-Frontend sends. Watermarking is
16
+ // a workspace-level setting on Collage and isn't a per-share toggle on the
17
+ // generate endpoints, so we surface a `watermark` flag in the preview as
18
+ // an info-only acknowledgment that the workspace setting will apply (no
19
+ // request body parameter exists today — recorded as a Phase 1 limitation).
20
+ import { z } from 'zod';
21
+ import { MutatingTool, } from '../conventions/dry-run/index.js';
22
+ import { createToolError } from '../conventions/errors.js';
23
+ import { IdSchema } from '../types.js';
24
+ // ── Tool I/O Schema ──────────────────────────────────────────────────
25
+ export const CreateShareLinkInputSchema = z
26
+ .object({
27
+ /** Target a single collection — its full asset roster is shared. */
28
+ collection_id: IdSchema.optional(),
29
+ /** Target an explicit list of assets (≤50). */
30
+ asset_ids: z.array(IdSchema).min(1).max(50).optional(),
31
+ /** Optional human-readable title for the share. */
32
+ title: z.string().max(255).optional(),
33
+ /** Optional description shown on the share landing page. */
34
+ description: z.string().max(10_000).nullable().optional(),
35
+ /** Expiration in ISO 8601 datetime. Sent to upstream as 'MMM D, YYYY'. */
36
+ expiration: z.string().datetime({ offset: true }).nullable().optional(),
37
+ /** Optional password gate. */
38
+ password: z.string().min(1).max(255).nullable().optional(),
39
+ /** When true, viewers cannot download the asset(s). Defaults to false. */
40
+ hide_download: z.boolean().optional(),
41
+ /** When true, surface that the workspace watermark setting will apply. */
42
+ watermark: z.boolean().optional(),
43
+ })
44
+ .refine((input) => {
45
+ const present = [
46
+ input.collection_id !== undefined,
47
+ input.asset_ids !== undefined && input.asset_ids.length > 0,
48
+ ].filter(Boolean).length;
49
+ return present === 1;
50
+ }, {
51
+ message: 'Provide exactly one of `collection_id` or `asset_ids` (1-50 IDs).',
52
+ });
53
+ export const CREATE_SHARE_LINK_DESCRIPTION = 'Create a governed share link for a Collage collection or an explicit ' +
54
+ 'asset list (1-50 IDs). Supports optional title/description, ISO ' +
55
+ 'expiration, password protection, hide_download, and a watermark ' +
56
+ 'acknowledgment flag. Two-step: first call returns a preview plus a ' +
57
+ 'confirmation_token; second call (with the token) executes and returns ' +
58
+ 'the final share URL plus its id.';
59
+ export class CreateShareLinkTool extends MutatingTool {
60
+ name = 'create_share_link';
61
+ chunkSize = 1;
62
+ client;
63
+ constructor(deps) {
64
+ super(deps);
65
+ this.client = deps.client;
66
+ }
67
+ plan(input) {
68
+ const targetKind = input.collection_id !== undefined ? 'collection' : 'assets';
69
+ const assetIds = dedupeIds(input.asset_ids ?? []);
70
+ const collectionId = input.collection_id !== undefined ? String(input.collection_id) : null;
71
+ const expirationIso = input.expiration ?? null;
72
+ const expirationFormatted = expirationIso !== null ? formatExpirationForUpstream(expirationIso) : null;
73
+ const passwordEnabled = typeof input.password === 'string' && input.password.length > 0;
74
+ const hideDownload = input.hide_download === true;
75
+ const watermark = input.watermark === true;
76
+ const after = {
77
+ target_kind: targetKind,
78
+ collection_id: collectionId,
79
+ asset_ids: assetIds,
80
+ title: input.title ?? '',
81
+ description: input.description ?? null,
82
+ expiration_iso: expirationIso,
83
+ expiration_formatted: expirationFormatted,
84
+ password_protected: passwordEnabled,
85
+ hide_download: hideDownload,
86
+ watermark_acknowledged: watermark,
87
+ };
88
+ const change = {
89
+ id: 'new-share-link',
90
+ operation: 'create',
91
+ before: null,
92
+ after,
93
+ metadata: {
94
+ target_kind: targetKind,
95
+ ...(collectionId !== null ? { collection_id: collectionId } : {}),
96
+ asset_ids: assetIds,
97
+ title: input.title ?? '',
98
+ description: input.description ?? null,
99
+ password: passwordEnabled ? input.password : null,
100
+ hide_download: hideDownload ? 1 : 0,
101
+ expiration: expirationFormatted,
102
+ },
103
+ };
104
+ const riskFlags = [];
105
+ if (assetIds.length === 50) {
106
+ riskFlags.push({
107
+ code: 'asset_list_cap',
108
+ severity: 'info',
109
+ message: 'Asset list is at the 50-id cap — split into multiple share links if you need a larger surface.',
110
+ count: assetIds.length,
111
+ });
112
+ }
113
+ if (input.asset_ids !== undefined &&
114
+ input.asset_ids.length !== assetIds.length) {
115
+ riskFlags.push({
116
+ code: 'duplicate_asset_ids',
117
+ severity: 'info',
118
+ message: 'duplicate IDs in asset list were collapsed',
119
+ count: input.asset_ids.length - assetIds.length,
120
+ });
121
+ }
122
+ if (passwordEnabled === false && hideDownload === false) {
123
+ riskFlags.push({
124
+ code: 'public_link',
125
+ severity: 'info',
126
+ message: 'Share link will be public (no password, downloads allowed). Anyone with the URL can view and download.',
127
+ count: 1,
128
+ });
129
+ }
130
+ if (watermark) {
131
+ riskFlags.push({
132
+ code: 'watermark_workspace_setting',
133
+ severity: 'info',
134
+ message: 'Watermarking is a workspace-level setting on Collage; this flag is recorded for transparency but is not sent on the request body.',
135
+ count: 1,
136
+ });
137
+ }
138
+ const extraAggregates = {
139
+ target_assets: assetIds.length,
140
+ password_protected: passwordEnabled ? 1 : 0,
141
+ download_blocked: hideDownload ? 1 : 0,
142
+ };
143
+ return { changes: [change], riskFlags, extraAggregates };
144
+ }
145
+ apply = async (change) => {
146
+ const meta = (change.metadata ?? {});
147
+ const targetKind = meta.target_kind;
148
+ if (targetKind !== 'collection' && targetKind !== 'assets') {
149
+ return {
150
+ ok: false,
151
+ error: createToolError('VALIDATION', `change ${change.id} missing target_kind`),
152
+ };
153
+ }
154
+ if (targetKind === 'collection' && (meta.collection_id ?? '') === '') {
155
+ return {
156
+ ok: false,
157
+ error: createToolError('VALIDATION', `change ${change.id} missing collection_id for collection share`),
158
+ };
159
+ }
160
+ const assetIds = meta.asset_ids ?? [];
161
+ if (targetKind === 'assets' && assetIds.length === 0) {
162
+ return {
163
+ ok: false,
164
+ error: createToolError('VALIDATION', `change ${change.id} missing asset_ids for asset share`),
165
+ };
166
+ }
167
+ const request = {
168
+ target_kind: targetKind,
169
+ asset_ids: assetIds,
170
+ title: meta.title ?? '',
171
+ description: meta.description ?? null,
172
+ password: meta.password ?? null,
173
+ hide_download: meta.hide_download === 1 ? 1 : 0,
174
+ expiration: meta.expiration ?? null,
175
+ };
176
+ if (targetKind === 'collection' && meta.collection_id !== undefined) {
177
+ request.collection_id = meta.collection_id;
178
+ }
179
+ const result = await this.client.createShareLink(request);
180
+ if (!result.ok) {
181
+ return { ok: false, error: result.error };
182
+ }
183
+ return {
184
+ ok: true,
185
+ result: {
186
+ share_id: result.share_id,
187
+ share_url: result.share_url,
188
+ target_kind: targetKind,
189
+ },
190
+ };
191
+ };
192
+ }
193
+ export function buildCreateShareLinkTool(deps) {
194
+ return new CreateShareLinkTool(deps);
195
+ }
196
+ // ── Helpers ──────────────────────────────────────────────────────────
197
+ function dedupeIds(ids) {
198
+ const seen = new Set();
199
+ const out = [];
200
+ for (const raw of ids) {
201
+ const id = String(raw);
202
+ if (!seen.has(id)) {
203
+ seen.add(id);
204
+ out.push(id);
205
+ }
206
+ }
207
+ return out;
208
+ }
209
+ const MONTHS = [
210
+ 'Jan',
211
+ 'Feb',
212
+ 'Mar',
213
+ 'Apr',
214
+ 'May',
215
+ 'Jun',
216
+ 'Jul',
217
+ 'Aug',
218
+ 'Sep',
219
+ 'Oct',
220
+ 'Nov',
221
+ 'Dec',
222
+ ];
223
+ /**
224
+ * Convert an ISO 8601 datetime to the `'MMM D, YYYY'` format expected by
225
+ * the Collage `generate-share-assets-url` endpoint. Mirrors the
226
+ * Admin-Frontend's `moment(...).format('MMM D, YYYY')` call. Returns the
227
+ * original string unchanged if parsing fails — the upstream will surface
228
+ * any validation error as UPSTREAM in that case.
229
+ */
230
+ export function formatExpirationForUpstream(iso) {
231
+ const d = new Date(iso);
232
+ if (Number.isNaN(d.getTime()))
233
+ return iso;
234
+ const month = MONTHS[d.getUTCMonth()];
235
+ const day = d.getUTCDate();
236
+ const year = d.getUTCFullYear();
237
+ return `${month} ${day}, ${year}`;
238
+ }
239
+ //# sourceMappingURL=create-share-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-share-link.js","sourceRoot":"","sources":["../../src/tools/create-share-link.ts"],"names":[],"mappings":"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"}