@happyvertical/smrt-projects 0.40.65 → 0.40.67

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 (43) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +489 -420
  4. package/dist/index.js.map +1 -1
  5. package/dist/managed-client.d.ts +9 -0
  6. package/dist/managed-client.d.ts.map +1 -1
  7. package/dist/manifest.json +1 -1
  8. package/dist/playground.js +48 -3
  9. package/dist/playground.js.map +1 -1
  10. package/dist/project-board-types.d.ts +12 -0
  11. package/dist/project-board-types.d.ts.map +1 -0
  12. package/dist/project-board-types.js +0 -0
  13. package/dist/services/delivery-service.d.ts +1 -1
  14. package/dist/services/delivery-service.d.ts.map +1 -1
  15. package/dist/services/index.d.ts +1 -0
  16. package/dist/services/index.d.ts.map +1 -1
  17. package/dist/services/project-board-service.d.ts +32 -0
  18. package/dist/services/project-board-service.d.ts.map +1 -0
  19. package/dist/smrt-knowledge.json +1916 -91
  20. package/dist/svelte/DevelopmentBoard.svelte +54 -74
  21. package/dist/svelte/DevelopmentBoard.svelte.d.ts.map +1 -1
  22. package/dist/svelte/ProjectBoard.svelte +157 -0
  23. package/dist/svelte/ProjectBoard.svelte.d.ts +32 -0
  24. package/dist/svelte/ProjectBoard.svelte.d.ts.map +1 -0
  25. package/dist/svelte/components/__tests__/ProjectBoard.test.js +156 -0
  26. package/dist/svelte/i18n.d.ts +2 -0
  27. package/dist/svelte/i18n.d.ts.map +1 -1
  28. package/dist/svelte/i18n.js +2 -0
  29. package/dist/svelte/index.d.ts +4 -1
  30. package/dist/svelte/index.d.ts.map +1 -1
  31. package/dist/svelte/index.js +3 -1
  32. package/dist/svelte/playground.d.ts +99 -0
  33. package/dist/svelte/playground.d.ts.map +1 -1
  34. package/dist/svelte/playground.js +49 -3
  35. package/dist/svelte/project-board-types.d.ts +3 -0
  36. package/dist/svelte/project-board-types.d.ts.map +1 -0
  37. package/dist/svelte/project-board-types.js +1 -0
  38. package/dist/types.d.ts +1 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/ui.d.ts.map +1 -1
  41. package/dist/ui.js +10 -1
  42. package/dist/ui.js.map +1 -1
  43. package/package.json +17 -16
@@ -1,4 +1,5 @@
1
1
  import { DatabaseInterface } from '@happyvertical/sql';
2
+ import { ProjectBoardMoveIntent } from './services/project-board-service';
2
3
  import { ManagedDevelopmentRequestCreateInput } from './types';
3
4
  export declare class ManagedProjectClient {
4
5
  #private;
@@ -9,5 +10,13 @@ export declare class ManagedProjectClient {
9
10
  }): Promise<ManagedProjectClient>;
10
11
  createRequest(input: Omit<ManagedDevelopmentRequestCreateInput, 'requesterId'>): Promise<import('.').DevelopmentRequest>;
11
12
  listRequests(): Promise<import('.').DevelopmentRequest[]>;
13
+ /**
14
+ * Move a project-board item through this authenticated integration.
15
+ *
16
+ * The browser submits only the move intent. This client keeps the credential
17
+ * authentication boundary server-side and ProjectBoardService reloads active
18
+ * capability state again immediately before the provider mutation.
19
+ */
20
+ moveProjectBoardItem(input: ProjectBoardMoveIntent): Promise<import('./services').ProjectBoardMoveResult>;
12
21
  }
13
22
  //# sourceMappingURL=managed-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"managed-client.d.ts","sourceRoot":"","sources":["../src/managed-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,SAAS,CAAC;AAEpE,qBAAa,oBAAoB;;IAK/B,OAAO;WASM,YAAY,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,EAAE,EAAE,iBAAiB,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GACtD,OAAO,CAAC,oBAAoB,CAAC;IAc1B,aAAa,CACjB,KAAK,EAAE,IAAI,CAAC,oCAAoC,EAAE,aAAa,CAAC;IAmB5D,YAAY;CAgCnB"}
1
+ {"version":3,"file":"managed-client.d.ts","sourceRoot":"","sources":["../src/managed-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAI5D,OAAO,EACL,KAAK,sBAAsB,EAE5B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,SAAS,CAAC;AAEpE,qBAAa,oBAAoB;;IAK/B,OAAO;WASM,YAAY,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;QAAE,EAAE,EAAE,iBAAiB,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GACtD,OAAO,CAAC,oBAAoB,CAAC;IAc1B,aAAa,CACjB,KAAK,EAAE,IAAI,CAAC,oCAAoC,EAAE,aAAa,CAAC;IAmB5D,YAAY;IAYlB;;;;;;OAMG;IACG,oBAAoB,CAAC,KAAK,EAAE,sBAAsB;CA0BzD"}
@@ -2,7 +2,7 @@
2
2
  "version": "1.0.0",
3
3
  "timestamp": 0,
4
4
  "packageName": "@happyvertical/smrt-projects",
5
- "packageVersion": "0.40.65",
5
+ "packageVersion": "0.40.67",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-projects:DevelopmentRequestHistoryCollection": {
8
8
  "name": "developmentrequesthistorycollection",
@@ -40,18 +40,63 @@ var pendingEntries = sampleTimeEntries.filter((entry) => entry.status === "submi
40
40
  var loadApprovalActions = () => import("./svelte/components/ApprovalActions.svelte");
41
41
  var loadTimeEntryList = () => import("./svelte/components/TimeEntryList.svelte");
42
42
  var loadTimeSummary = () => import("./svelte/components/TimeSummary.svelte");
43
+ var loadDevelopmentBoard = () => import("./svelte/DevelopmentBoard.svelte");
44
+ var loadProjectBoard = () => import("./svelte/ProjectBoard.svelte");
43
45
  var playground_default = {
44
46
  packageName: "@happyvertical/smrt-projects",
45
47
  displayName: PROJECTS_MODULE_META.displayName,
46
48
  description: PROJECTS_MODULE_META.description,
47
49
  moduleMeta: PROJECTS_MODULE_META,
48
50
  entries: [
51
+ {
52
+ id: "project-board",
53
+ title: "Project Board",
54
+ description: "Controlled provider project board with canonical statuses.",
55
+ loadComponent: loadProjectBoard,
56
+ order: 0,
57
+ props: {
58
+ projectId: "project-demo",
59
+ statuses: [{
60
+ id: "todo",
61
+ name: "Todo",
62
+ order: 0
63
+ }, {
64
+ id: "done",
65
+ name: "Done",
66
+ order: 1
67
+ }],
68
+ items: [{
69
+ id: "item-demo",
70
+ contentId: "content-demo",
71
+ title: "Publish project board",
72
+ status: "Todo",
73
+ fields: {},
74
+ type: "Issue"
75
+ }]
76
+ },
77
+ modes: { mock: { label: "Mock" } }
78
+ },
79
+ {
80
+ id: "development-board",
81
+ title: "Development Board",
82
+ description: "Read-only delivery-status projection.",
83
+ loadComponent: loadDevelopmentBoard,
84
+ order: 1,
85
+ props: { requests: [{
86
+ id: "request-demo",
87
+ description: "Publish project board",
88
+ type: "feature",
89
+ status: "planned",
90
+ requesterLabel: "Project owner"
91
+ }] },
92
+ modes: { mock: { label: "Mock" } }
93
+ },
49
94
  {
50
95
  id: "time-entry-list",
51
96
  title: "Time Entry List",
52
97
  description: "Selectable list view for recent time entries with billing context.",
53
98
  loadComponent: loadTimeEntryList,
54
- order: 1,
99
+ order: 2,
55
100
  props: {
56
101
  entries: sampleTimeEntries,
57
102
  selectable: true,
@@ -67,7 +112,7 @@ var playground_default = {
67
112
  title: "Time Summary",
68
113
  description: "Hours and value summary cards for a project review period.",
69
114
  loadComponent: loadTimeSummary,
70
- order: 2,
115
+ order: 3,
71
116
  props: {
72
117
  totalHours,
73
118
  totalAmount,
@@ -86,7 +131,7 @@ var playground_default = {
86
131
  title: "Approval Actions",
87
132
  description: "Status-sensitive action row for approving or returning submitted work.",
88
133
  loadComponent: loadApprovalActions,
89
- order: 3,
134
+ order: 4,
90
135
  props: {
91
136
  status: "submitted",
92
137
  onapprove: noop,
@@ -1 +1 @@
1
- {"version":3,"file":"playground.js","names":[],"sources":["../src/svelte/playground.ts"],"sourcesContent":["import { PROJECTS_MODULE_META } from '../ui.js';\n\nconst noop = () => {};\n\nconst sampleTimeEntries = [\n {\n id: 'time-entry-1',\n date: '2026-03-18T16:00:00.000Z',\n hours: 6.5,\n description: 'Editorial governance review and fact-linking pass',\n status: 'submitted',\n amount: 780,\n workerName: 'Taylor Rowan',\n hourlyRate: 120,\n mileage: 18,\n },\n {\n id: 'time-entry-2',\n date: '2026-03-19T16:00:00.000Z',\n hours: 4.25,\n description: 'Content workflow instrumentation and approval QA',\n status: 'approved',\n amount: 510,\n workerName: 'Jordan Lee',\n hourlyRate: 120,\n },\n {\n id: 'time-entry-3',\n date: '2026-03-20T16:00:00.000Z',\n hours: 2,\n description: 'Follow-up revisions for contributor feedback',\n status: 'draft',\n amount: 240,\n workerName: 'Casey Tran',\n hourlyRate: 120,\n },\n];\n\nconst totalHours = sampleTimeEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n);\nconst totalAmount = sampleTimeEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n);\nconst pendingEntries = sampleTimeEntries.filter(\n (entry) => entry.status === 'submitted',\n);\n\nconst loadApprovalActions = () => import('./components/ApprovalActions.svelte');\nconst loadTimeEntryList = () => import('./components/TimeEntryList.svelte');\nconst loadTimeSummary = () => import('./components/TimeSummary.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-projects',\n displayName: PROJECTS_MODULE_META.displayName,\n description: PROJECTS_MODULE_META.description,\n moduleMeta: PROJECTS_MODULE_META,\n entries: [\n {\n id: 'time-entry-list',\n title: 'Time Entry List',\n description:\n 'Selectable list view for recent time entries with billing context.',\n loadComponent: loadTimeEntryList,\n order: 1,\n props: {\n entries: sampleTimeEntries,\n selectable: true,\n selectedIds: ['time-entry-1'],\n currency: 'CAD',\n onselectionchange: noop,\n baseHref: '/projects/time-entries',\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'time-summary',\n title: 'Time Summary',\n description: 'Hours and value summary cards for a project review period.',\n loadComponent: loadTimeSummary,\n order: 2,\n props: {\n totalHours,\n totalAmount,\n pendingHours: pendingEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n ),\n pendingAmount: pendingEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n ),\n approvedHours: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + entry.hours, 0),\n approvedAmount: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + (entry.amount ?? 0), 0),\n entryCount: sampleTimeEntries.length,\n currency: 'CAD',\n showApproved: true,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'approval-actions',\n title: 'Approval Actions',\n description:\n 'Status-sensitive action row for approving or returning submitted work.',\n loadComponent: loadApprovalActions,\n order: 3,\n props: {\n status: 'submitted',\n onapprove: noop,\n onreject: noop,\n onedit: noop,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"mappings":";;AAEA,IAAM,aAAa,CAAC;AAEpB,IAAM,oBAAoB;CACxB;EACE,IAAI;EACJ,MAAM;EACN,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ;EACR,YAAY;EACZ,YAAY;EACZ,SAAS;CACX;CACA;EACE,IAAI;EACJ,MAAM;EACN,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ;EACR,YAAY;EACZ,YAAY;CACd;CACA;EACE,IAAI;EACJ,MAAM;EACN,OAAO;EACP,aAAa;EACb,QAAQ;EACR,QAAQ;EACR,YAAY;EACZ,YAAY;CACd;AACF;AAEA,IAAM,aAAa,kBAAkB,QAClC,KAAK,UAAU,MAAM,MAAM,OAC5B,CACF;AACA,IAAM,cAAc,kBAAkB,QACnC,KAAK,UAAU,OAAO,MAAM,UAAU,IACvC,CACF;AACA,IAAM,iBAAiB,kBAAkB,QACtC,UAAU,MAAM,WAAW,WAC9B;AAEA,IAAM,4BAA4B,OAAO;AACzC,IAAM,0BAA0B,OAAO;AACvC,IAAM,wBAAwB,OAAO;AAErC,IAAA,qBAAe;CACb,aAAa;CACb,aAAa,qBAAqB;CAClC,aAAa,qBAAqB;CAClC,YAAY;CACZ,SAAS;EACP;GACE,IAAI;GACJ,OAAO;GACP,aACE;GACF,eAAe;GACf,OAAO;GACP,OAAO;IACL,SAAS;IACT,YAAY;IACZ,aAAa,CAAC,cAAc;IAC5B,UAAU;IACV,mBAAmB;IACnB,UAAU;GACZ;GACA,OAAO,EACL,MAAM,EACJ,OAAO,OACT,EACF;EACF;EACA;GACE,IAAI;GACJ,OAAO;GACP,aAAa;GACb,eAAe;GACf,OAAO;GACP,OAAO;IACL;IACA;IACA,cAAc,eAAe,QAC1B,KAAK,UAAU,MAAM,MAAM,OAC5B,CACF;IACA,eAAe,eAAe,QAC3B,KAAK,UAAU,OAAO,MAAM,UAAU,IACvC,CACF;IACA,eAAe,kBACZ,QAAQ,UAAU,MAAM,WAAW,UAAU,CAAA,CAC7C,QAAQ,KAAK,UAAU,MAAM,MAAM,OAAO,CAAC;IAC9C,gBAAgB,kBACb,QAAQ,UAAU,MAAM,WAAW,UAAU,CAAA,CAC7C,QAAQ,KAAK,UAAU,OAAO,MAAM,UAAU,IAAI,CAAC;IACtD,YAAY,kBAAkB;IAC9B,UAAU;IACV,cAAc;GAChB;GACA,OAAO,EACL,MAAM,EACJ,OAAO,OACT,EACF;EACF;EACA;GACE,IAAI;GACJ,OAAO;GACP,aACE;GACF,eAAe;GACf,OAAO;GACP,OAAO;IACL,QAAQ;IACR,WAAW;IACX,UAAU;IACV,QAAQ;GACV;GACA,OAAO,EACL,MAAM,EACJ,OAAO,OACT,EACF;EACF;CACF;AACF"}
1
+ {"version":3,"file":"playground.js","names":[],"sources":["../src/svelte/playground.ts"],"sourcesContent":["import { PROJECTS_MODULE_META } from '../ui.js';\n\nconst noop = () => {};\n\nconst sampleTimeEntries = [\n {\n id: 'time-entry-1',\n date: '2026-03-18T16:00:00.000Z',\n hours: 6.5,\n description: 'Editorial governance review and fact-linking pass',\n status: 'submitted',\n amount: 780,\n workerName: 'Taylor Rowan',\n hourlyRate: 120,\n mileage: 18,\n },\n {\n id: 'time-entry-2',\n date: '2026-03-19T16:00:00.000Z',\n hours: 4.25,\n description: 'Content workflow instrumentation and approval QA',\n status: 'approved',\n amount: 510,\n workerName: 'Jordan Lee',\n hourlyRate: 120,\n },\n {\n id: 'time-entry-3',\n date: '2026-03-20T16:00:00.000Z',\n hours: 2,\n description: 'Follow-up revisions for contributor feedback',\n status: 'draft',\n amount: 240,\n workerName: 'Casey Tran',\n hourlyRate: 120,\n },\n];\n\nconst totalHours = sampleTimeEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n);\nconst totalAmount = sampleTimeEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n);\nconst pendingEntries = sampleTimeEntries.filter(\n (entry) => entry.status === 'submitted',\n);\n\nconst loadApprovalActions = () => import('./components/ApprovalActions.svelte');\nconst loadTimeEntryList = () => import('./components/TimeEntryList.svelte');\nconst loadTimeSummary = () => import('./components/TimeSummary.svelte');\nconst loadDevelopmentBoard = () => import('./DevelopmentBoard.svelte');\nconst loadProjectBoard = () => import('./ProjectBoard.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-projects',\n displayName: PROJECTS_MODULE_META.displayName,\n description: PROJECTS_MODULE_META.description,\n moduleMeta: PROJECTS_MODULE_META,\n entries: [\n {\n id: 'project-board',\n title: 'Project Board',\n description: 'Controlled provider project board with canonical statuses.',\n loadComponent: loadProjectBoard,\n order: 0,\n props: {\n projectId: 'project-demo',\n statuses: [\n { id: 'todo', name: 'Todo', order: 0 },\n { id: 'done', name: 'Done', order: 1 },\n ],\n items: [\n {\n id: 'item-demo',\n contentId: 'content-demo',\n title: 'Publish project board',\n status: 'Todo',\n fields: {},\n type: 'Issue',\n },\n ],\n },\n modes: { mock: { label: 'Mock' } },\n },\n {\n id: 'development-board',\n title: 'Development Board',\n description: 'Read-only delivery-status projection.',\n loadComponent: loadDevelopmentBoard,\n order: 1,\n props: {\n requests: [\n {\n id: 'request-demo',\n description: 'Publish project board',\n type: 'feature',\n status: 'planned',\n requesterLabel: 'Project owner',\n },\n ],\n },\n modes: { mock: { label: 'Mock' } },\n },\n {\n id: 'time-entry-list',\n title: 'Time Entry List',\n description:\n 'Selectable list view for recent time entries with billing context.',\n loadComponent: loadTimeEntryList,\n order: 2,\n props: {\n entries: sampleTimeEntries,\n selectable: true,\n selectedIds: ['time-entry-1'],\n currency: 'CAD',\n onselectionchange: noop,\n baseHref: '/projects/time-entries',\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'time-summary',\n title: 'Time Summary',\n description: 'Hours and value summary cards for a project review period.',\n loadComponent: loadTimeSummary,\n order: 3,\n props: {\n totalHours,\n totalAmount,\n pendingHours: pendingEntries.reduce(\n (sum, entry) => sum + entry.hours,\n 0,\n ),\n pendingAmount: pendingEntries.reduce(\n (sum, entry) => sum + (entry.amount ?? 0),\n 0,\n ),\n approvedHours: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + entry.hours, 0),\n approvedAmount: sampleTimeEntries\n .filter((entry) => entry.status === 'approved')\n .reduce((sum, entry) => sum + (entry.amount ?? 0), 0),\n entryCount: sampleTimeEntries.length,\n currency: 'CAD',\n showApproved: true,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'approval-actions',\n title: 'Approval Actions',\n description:\n 'Status-sensitive action row for approving or returning submitted work.',\n loadComponent: loadApprovalActions,\n order: 4,\n props: {\n status: 'submitted',\n onapprove: noop,\n onreject: noop,\n onedit: noop,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Browser-safe project-board move payload.
3
+ *
4
+ * This is the only board mutation data permitted to cross the browser/server
5
+ * boundary. Authorization and provider access are established server-side.
6
+ */
7
+ export interface ProjectBoardMoveIntent {
8
+ projectId: string;
9
+ itemId: string;
10
+ status: string;
11
+ }
12
+ //# sourceMappingURL=project-board-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-board-types.d.ts","sourceRoot":"","sources":["../src/project-board-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB"}
File without changes
@@ -51,5 +51,5 @@ export declare class ProjectDeliveryService {
51
51
  private upsertPreview;
52
52
  }
53
53
  export declare function requireIntegrationCapability(integration: ProjectIntegration, capability: string): void;
54
- export declare function requireActiveIntegrationCapability(integrations: ProjectIntegrationCollection, integration: ProjectIntegration, capability: string): Promise<ProjectIntegration>;
54
+ export declare function requireActiveIntegrationCapability(integrations: ProjectIntegrationCollection, integration: Pick<ProjectIntegration, 'id' | 'tenantId'>, capability: string): Promise<ProjectIntegration>;
55
55
  //# sourceMappingURL=delivery-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-service.d.ts","sourceRoot":"","sources":["../../src/services/delivery-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-service.d.ts","sourceRoot":"","sources":["../../src/services/delivery-service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  export * from './assistance-request-service.js';
2
2
  export * from './delivery-service.js';
3
3
  export * from './development-request-service.js';
4
+ export * from './project-board-service.js';
4
5
  export * from './service-evidence-service.js';
5
6
  export * from './subscription-commercial-resolver.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,uBAAuB,CAAC;AACtC,cAAc,kCAAkC,CAAC;AACjD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { SmrtClassOptions } from '@happyvertical/smrt-core';
2
+ import { ProjectIntegrationCollection } from '../collections/ProjectIntegrations.js';
3
+ import { ProjectCollection } from '../collections/Projects.js';
4
+ import { ProjectIntegration } from '../models/ProjectIntegration.js';
5
+ import { ProjectBoardMoveIntent } from '../project-board-types.js';
6
+ export type { ProjectBoardMoveIntent } from '../project-board-types.js';
7
+ /** Pure data returned after a provider-backed project board move. */
8
+ export interface ProjectBoardMoveResult {
9
+ projectId: string;
10
+ itemId: string;
11
+ previousStatus: string | null;
12
+ status: string;
13
+ }
14
+ /**
15
+ * Capability-checked server boundary for project-board mutations.
16
+ *
17
+ * This service intentionally exposes neither provider credentials nor the
18
+ * provider client. It reloads the supplied server-derived integration before
19
+ * every mutation, verifies its project binding and capability, validates the
20
+ * requested item and status against the authoritative Project, then delegates
21
+ * persistence to Project.updateItemStatus().
22
+ */
23
+ export declare class ProjectBoardService {
24
+ private readonly integrations;
25
+ private readonly projects;
26
+ constructor(integrations: ProjectIntegrationCollection, projects: ProjectCollection);
27
+ static create(options?: SmrtClassOptions): Promise<ProjectBoardService>;
28
+ moveItem(integration: ProjectIntegration, input: ProjectBoardMoveIntent): Promise<ProjectBoardMoveResult>;
29
+ private requireAuthorizedIntegration;
30
+ private findProject;
31
+ }
32
+ //# sourceMappingURL=project-board-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-board-service.d.ts","sourceRoot":"","sources":["../../src/services/project-board-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,qEAAqE;AACrE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,YAAY,EAAE,4BAA4B,EAC1C,QAAQ,EAAE,iBAAiB;WAGjC,MAAM,CACjB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IASzB,QAAQ,CACZ,WAAW,EAAE,kBAAkB,EAC/B,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;YAiCpB,4BAA4B;YAoB5B,WAAW;CAW1B"}