@nurama/sdk 0.0.0-stage → 1.4.1

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 (225) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +1080 -2
  4. package/dist/BotClient.d.ts +66 -0
  5. package/dist/BotClient.d.ts.map +1 -0
  6. package/dist/BotClient.js +68 -0
  7. package/dist/BotClient.js.map +1 -0
  8. package/dist/NuramaClient.d.ts +480 -0
  9. package/dist/NuramaClient.d.ts.map +1 -0
  10. package/dist/NuramaClient.js +902 -0
  11. package/dist/NuramaClient.js.map +1 -0
  12. package/dist/browser/nurama-bot-sdk.js +12051 -0
  13. package/dist/browser/nurama-bot-sdk.min.js +1 -0
  14. package/dist/browser/nurama-sdk.js +12003 -0
  15. package/dist/browser/nurama-sdk.min.js +1 -0
  16. package/dist/routes/ai.d.ts +280 -0
  17. package/dist/routes/ai.d.ts.map +1 -0
  18. package/dist/routes/ai.js +173 -0
  19. package/dist/routes/ai.js.map +1 -0
  20. package/dist/routes/asset.d.ts +493 -0
  21. package/dist/routes/asset.d.ts.map +1 -0
  22. package/dist/routes/asset.js +848 -0
  23. package/dist/routes/asset.js.map +1 -0
  24. package/dist/routes/auth.d.ts +218 -0
  25. package/dist/routes/auth.d.ts.map +1 -0
  26. package/dist/routes/auth.js +454 -0
  27. package/dist/routes/auth.js.map +1 -0
  28. package/dist/routes/blogPosts.d.ts +17 -0
  29. package/dist/routes/blogPosts.d.ts.map +1 -0
  30. package/dist/routes/blogPosts.js +29 -0
  31. package/dist/routes/blogPosts.js.map +1 -0
  32. package/dist/routes/board.d.ts +187 -0
  33. package/dist/routes/board.d.ts.map +1 -0
  34. package/dist/routes/board.js +270 -0
  35. package/dist/routes/board.js.map +1 -0
  36. package/dist/routes/bot.d.ts +202 -0
  37. package/dist/routes/bot.d.ts.map +1 -0
  38. package/dist/routes/bot.js +229 -0
  39. package/dist/routes/bot.js.map +1 -0
  40. package/dist/routes/chat.d.ts +842 -0
  41. package/dist/routes/chat.d.ts.map +1 -0
  42. package/dist/routes/chat.js +863 -0
  43. package/dist/routes/chat.js.map +1 -0
  44. package/dist/routes/chatAi.d.ts +51 -0
  45. package/dist/routes/chatAi.d.ts.map +1 -0
  46. package/dist/routes/chatAi.js +109 -0
  47. package/dist/routes/chatAi.js.map +1 -0
  48. package/dist/routes/config.d.ts +11 -0
  49. package/dist/routes/config.d.ts.map +1 -0
  50. package/dist/routes/config.js +24 -0
  51. package/dist/routes/config.js.map +1 -0
  52. package/dist/routes/convo.d.ts +169 -0
  53. package/dist/routes/convo.d.ts.map +1 -0
  54. package/dist/routes/convo.js +284 -0
  55. package/dist/routes/convo.js.map +1 -0
  56. package/dist/routes/credits.d.ts +82 -0
  57. package/dist/routes/credits.d.ts.map +1 -0
  58. package/dist/routes/credits.js +49 -0
  59. package/dist/routes/credits.js.map +1 -0
  60. package/dist/routes/device.d.ts +74 -0
  61. package/dist/routes/device.d.ts.map +1 -0
  62. package/dist/routes/device.js +122 -0
  63. package/dist/routes/device.js.map +1 -0
  64. package/dist/routes/folder.d.ts +75 -0
  65. package/dist/routes/folder.d.ts.map +1 -0
  66. package/dist/routes/folder.js +99 -0
  67. package/dist/routes/folder.js.map +1 -0
  68. package/dist/routes/invite.d.ts +61 -0
  69. package/dist/routes/invite.d.ts.map +1 -0
  70. package/dist/routes/invite.js +86 -0
  71. package/dist/routes/invite.js.map +1 -0
  72. package/dist/routes/joinLink.d.ts +88 -0
  73. package/dist/routes/joinLink.d.ts.map +1 -0
  74. package/dist/routes/joinLink.js +205 -0
  75. package/dist/routes/joinLink.js.map +1 -0
  76. package/dist/routes/membership.d.ts +116 -0
  77. package/dist/routes/membership.d.ts.map +1 -0
  78. package/dist/routes/membership.js +183 -0
  79. package/dist/routes/membership.js.map +1 -0
  80. package/dist/routes/notification.d.ts +103 -0
  81. package/dist/routes/notification.d.ts.map +1 -0
  82. package/dist/routes/notification.js +89 -0
  83. package/dist/routes/notification.js.map +1 -0
  84. package/dist/routes/oauthGrant.d.ts +45 -0
  85. package/dist/routes/oauthGrant.d.ts.map +1 -0
  86. package/dist/routes/oauthGrant.js +32 -0
  87. package/dist/routes/oauthGrant.js.map +1 -0
  88. package/dist/routes/payment.d.ts +56 -0
  89. package/dist/routes/payment.d.ts.map +1 -0
  90. package/dist/routes/payment.js +78 -0
  91. package/dist/routes/payment.js.map +1 -0
  92. package/dist/routes/product.d.ts +43 -0
  93. package/dist/routes/product.d.ts.map +1 -0
  94. package/dist/routes/product.js +53 -0
  95. package/dist/routes/product.js.map +1 -0
  96. package/dist/routes/project.d.ts +821 -0
  97. package/dist/routes/project.d.ts.map +1 -0
  98. package/dist/routes/project.js +1153 -0
  99. package/dist/routes/project.js.map +1 -0
  100. package/dist/routes/public.d.ts +269 -0
  101. package/dist/routes/public.d.ts.map +1 -0
  102. package/dist/routes/public.js +412 -0
  103. package/dist/routes/public.js.map +1 -0
  104. package/dist/routes/scratch.d.ts +70 -0
  105. package/dist/routes/scratch.d.ts.map +1 -0
  106. package/dist/routes/scratch.js +67 -0
  107. package/dist/routes/scratch.js.map +1 -0
  108. package/dist/routes/settings.d.ts +102 -0
  109. package/dist/routes/settings.d.ts.map +1 -0
  110. package/dist/routes/settings.js +94 -0
  111. package/dist/routes/settings.js.map +1 -0
  112. package/dist/routes/shortlink.d.ts +79 -0
  113. package/dist/routes/shortlink.d.ts.map +1 -0
  114. package/dist/routes/shortlink.js +25 -0
  115. package/dist/routes/shortlink.js.map +1 -0
  116. package/dist/routes/socket.d.ts +108 -0
  117. package/dist/routes/socket.d.ts.map +1 -0
  118. package/dist/routes/socket.js +573 -0
  119. package/dist/routes/socket.js.map +1 -0
  120. package/dist/routes/storage.d.ts +44 -0
  121. package/dist/routes/storage.d.ts.map +1 -0
  122. package/dist/routes/storage.js +49 -0
  123. package/dist/routes/storage.js.map +1 -0
  124. package/dist/routes/subscription.d.ts +184 -0
  125. package/dist/routes/subscription.d.ts.map +1 -0
  126. package/dist/routes/subscription.js +219 -0
  127. package/dist/routes/subscription.js.map +1 -0
  128. package/dist/routes/supportChat.d.ts +40 -0
  129. package/dist/routes/supportChat.d.ts.map +1 -0
  130. package/dist/routes/supportChat.js +53 -0
  131. package/dist/routes/supportChat.js.map +1 -0
  132. package/dist/routes/supportTicket.d.ts +89 -0
  133. package/dist/routes/supportTicket.d.ts.map +1 -0
  134. package/dist/routes/supportTicket.js +54 -0
  135. package/dist/routes/supportTicket.js.map +1 -0
  136. package/dist/routes/tag.d.ts +72 -0
  137. package/dist/routes/tag.d.ts.map +1 -0
  138. package/dist/routes/tag.js +81 -0
  139. package/dist/routes/tag.js.map +1 -0
  140. package/dist/routes/task.d.ts +252 -0
  141. package/dist/routes/task.d.ts.map +1 -0
  142. package/dist/routes/task.js +284 -0
  143. package/dist/routes/task.js.map +1 -0
  144. package/dist/routes/taskRelation.d.ts +80 -0
  145. package/dist/routes/taskRelation.d.ts.map +1 -0
  146. package/dist/routes/taskRelation.js +71 -0
  147. package/dist/routes/taskRelation.js.map +1 -0
  148. package/dist/routes/token.d.ts +97 -0
  149. package/dist/routes/token.d.ts.map +1 -0
  150. package/dist/routes/token.js +73 -0
  151. package/dist/routes/token.js.map +1 -0
  152. package/dist/routes/user.d.ts +112 -0
  153. package/dist/routes/user.d.ts.map +1 -0
  154. package/dist/routes/user.js +151 -0
  155. package/dist/routes/user.js.map +1 -0
  156. package/dist/routes/version.d.ts +42 -0
  157. package/dist/routes/version.d.ts.map +1 -0
  158. package/dist/routes/version.js +38 -0
  159. package/dist/routes/version.js.map +1 -0
  160. package/dist/routes/webhook.d.ts +170 -0
  161. package/dist/routes/webhook.d.ts.map +1 -0
  162. package/dist/routes/webhook.js +173 -0
  163. package/dist/routes/webhook.js.map +1 -0
  164. package/dist/routes/workspace.d.ts +120 -0
  165. package/dist/routes/workspace.d.ts.map +1 -0
  166. package/dist/routes/workspace.js +199 -0
  167. package/dist/routes/workspace.js.map +1 -0
  168. package/dist/utils/uploadSessionManager.d.ts +133 -0
  169. package/dist/utils/uploadSessionManager.d.ts.map +1 -0
  170. package/dist/utils/uploadSessionManager.js +321 -0
  171. package/dist/utils/uploadSessionManager.js.map +1 -0
  172. package/dist/utils/urlParams.d.ts +35 -0
  173. package/dist/utils/urlParams.d.ts.map +1 -0
  174. package/dist/utils/urlParams.js +146 -0
  175. package/dist/utils/urlParams.js.map +1 -0
  176. package/dist/version.d.ts +15 -0
  177. package/dist/version.d.ts.map +1 -0
  178. package/dist/version.js +12 -0
  179. package/dist/version.js.map +1 -0
  180. package/package.json +87 -3
  181. package/src/BotClient.ts +113 -0
  182. package/src/NuramaClient.ts +1253 -0
  183. package/src/bot-browser-entry.js +15 -0
  184. package/src/browser-entry.js +20 -0
  185. package/src/routes/ai.ts +378 -0
  186. package/src/routes/asset.ts +1104 -0
  187. package/src/routes/auth.ts +587 -0
  188. package/src/routes/blogPosts.ts +29 -0
  189. package/src/routes/board.ts +403 -0
  190. package/src/routes/bot.ts +356 -0
  191. package/src/routes/chat.ts +1292 -0
  192. package/src/routes/chatAi.ts +125 -0
  193. package/src/routes/config.ts +31 -0
  194. package/src/routes/convo.ts +321 -0
  195. package/src/routes/credits.ts +112 -0
  196. package/src/routes/device.ts +133 -0
  197. package/src/routes/folder.ts +154 -0
  198. package/src/routes/invite.ts +133 -0
  199. package/src/routes/joinLink.ts +233 -0
  200. package/src/routes/membership.ts +237 -0
  201. package/src/routes/notification.ts +166 -0
  202. package/src/routes/oauthGrant.ts +64 -0
  203. package/src/routes/payment.ts +104 -0
  204. package/src/routes/product.ts +67 -0
  205. package/src/routes/project.ts +1528 -0
  206. package/src/routes/public.ts +496 -0
  207. package/src/routes/scratch.ts +94 -0
  208. package/src/routes/settings.ts +152 -0
  209. package/src/routes/shortlink.ts +90 -0
  210. package/src/routes/socket.ts +757 -0
  211. package/src/routes/storage.ts +83 -0
  212. package/src/routes/subscription.ts +307 -0
  213. package/src/routes/supportChat.ts +62 -0
  214. package/src/routes/supportTicket.ts +114 -0
  215. package/src/routes/tag.ts +131 -0
  216. package/src/routes/task.ts +431 -0
  217. package/src/routes/taskRelation.ts +125 -0
  218. package/src/routes/token.ts +152 -0
  219. package/src/routes/user.ts +214 -0
  220. package/src/routes/version.ts +62 -0
  221. package/src/routes/webhook.ts +295 -0
  222. package/src/routes/workspace.ts +223 -0
  223. package/src/utils/uploadSessionManager.ts +407 -0
  224. package/src/utils/urlParams.ts +181 -0
  225. package/src/version.ts +22 -0
@@ -0,0 +1,187 @@
1
+ import NuramaClient from '../NuramaClient.js';
2
+ import { type Board, type BoardColumn, type BoardWithTasks, type Task } from '@nurama/types';
3
+ export interface CreateBoardData {
4
+ projectId: string;
5
+ name: string;
6
+ description?: string;
7
+ visibility?: ('creator' | 'reviewer')[];
8
+ columns?: {
9
+ name: string;
10
+ description?: string;
11
+ color?: string;
12
+ isDefault?: boolean;
13
+ taskStatus?: 'pending' | 'inProgress' | 'complete' | 'closed' | null;
14
+ sortOrder?: number;
15
+ }[];
16
+ }
17
+ export interface UpdateBoardData {
18
+ name?: string;
19
+ description?: string | null;
20
+ visibility?: ('creator' | 'reviewer')[];
21
+ status?: 'active' | 'archived';
22
+ sortOrder?: number;
23
+ /**
24
+ * When narrowing visibility, opt into automatic cleanup of dependent tasks,
25
+ * assignees, and relations. If omitted (or false) and dependents exist, the
26
+ * server returns 409 with a structured `errorData.blockers` payload.
27
+ */
28
+ cascade?: boolean;
29
+ }
30
+ export interface AddColumnData {
31
+ name: string;
32
+ description?: string;
33
+ color?: string;
34
+ isDefault?: boolean;
35
+ taskStatus?: 'pending' | 'inProgress' | 'complete' | 'closed' | null;
36
+ sortOrder?: number;
37
+ /** When true, reviewer-role users may create tasks in this column on a reviewer-visibility board. */
38
+ reviewersCanContribute?: boolean;
39
+ }
40
+ export interface UpdateColumnData {
41
+ name?: string;
42
+ description?: string | null;
43
+ color?: string | null;
44
+ isDefault?: boolean;
45
+ taskStatus?: 'pending' | 'inProgress' | 'complete' | 'closed' | null;
46
+ sortOrder?: number;
47
+ /** When true, reviewer-role users may create tasks in this column on a reviewer-visibility board. */
48
+ reviewersCanContribute?: boolean;
49
+ }
50
+ export interface ReorderColumnsData {
51
+ columns: {
52
+ id: string;
53
+ sortOrder: number;
54
+ }[];
55
+ }
56
+ export interface CreateBoardTaskData {
57
+ subject: string;
58
+ description?: string;
59
+ assignedToId?: string;
60
+ columnId?: string;
61
+ /** Optional announce flag. When supplied, after the task is created
62
+ * the server posts a Nu reply in `chatId` threaded under `messageId`
63
+ * with this task as a single taskCard and links them via TaskRelation.
64
+ * Mirrors the same flag on `tasks.bulkCreate`. */
65
+ announce?: {
66
+ chatId: string;
67
+ messageId: string;
68
+ };
69
+ }
70
+ export interface AddExistingTaskData {
71
+ taskId: string;
72
+ columnId?: string;
73
+ }
74
+ export interface MoveTaskData {
75
+ /** Required for same-board moves; optional when `targetBoardId` is
76
+ * set (server defaults to the target board's default column). */
77
+ columnId?: string;
78
+ sortOrder?: number;
79
+ /** When supplied AND different from the URL `boardId`, the server
80
+ * performs a cross-board move — `boardId` and `columnId` are
81
+ * updated together. Omit for the original same-board move. */
82
+ targetBoardId?: string;
83
+ }
84
+ export interface UpdateTaskDetailsData {
85
+ subject?: string;
86
+ description?: string | null;
87
+ assignedToId?: string | null;
88
+ }
89
+ export interface LinkTaskData {
90
+ linkedTaskId: string;
91
+ linkType?: 'related' | 'blocks' | 'blockedBy' | 'duplicate';
92
+ }
93
+ export default function createBoardMethods(client: NuramaClient): {
94
+ /**
95
+ * Create a new board inside a project. If `columns` are omitted the
96
+ * server seeds the standard four-column layout.
97
+ */
98
+ createBoard(data: CreateBoardData): Promise<Board>;
99
+ /**
100
+ * List boards in a project. Filters by visibility, free-text search,
101
+ * and tag ids.
102
+ */
103
+ getProjectBoards(projectId: string, params?: {
104
+ visibility?: string;
105
+ search?: string;
106
+ tags?: string[];
107
+ }): Promise<Board[]>;
108
+ /**
109
+ * List every task in a project across all boards. Use `boardId:
110
+ * 'unassigned'` to fetch only tasks not yet placed on a board.
111
+ */
112
+ getProjectTasks(projectId: string, params?: {
113
+ search?: string;
114
+ status?: string;
115
+ boardId?: string | "unassigned";
116
+ columnId?: string;
117
+ assignedToId?: string;
118
+ visibility?: string;
119
+ tags?: string[];
120
+ page?: number;
121
+ limit?: number;
122
+ sort?: Record<string, 1 | -1>;
123
+ }): Promise<any>;
124
+ /** Fetch a board with its columns and tasks populated. */
125
+ getBoard(boardId: string): Promise<BoardWithTasks>;
126
+ /**
127
+ * Update a board's metadata. Set `cascade: true` to opt into
128
+ * automatic cleanup of dependent tasks when narrowing visibility;
129
+ * otherwise the server returns 409 with a `blockers` payload.
130
+ */
131
+ updateBoard(boardId: string, data: UpdateBoardData): Promise<Board>;
132
+ /**
133
+ * Delete a board. `disposition` controls what happens to its tasks:
134
+ * `unassign` (default — tasks survive boardless), `delete`, or
135
+ * `reassign` to another board/column.
136
+ */
137
+ deleteBoard(boardId: string, body?: {
138
+ disposition?: "unassign" | "delete" | "reassign";
139
+ targetBoardId?: string;
140
+ targetColumnId?: string;
141
+ }): Promise<{
142
+ message: string;
143
+ disposition: string;
144
+ deletedTaskIds: string[];
145
+ reassignedTaskIds: string[];
146
+ }>;
147
+ /** Add a column to a board. Appended at the end unless `sortOrder` is provided. */
148
+ addColumn(boardId: string, data: AddColumnData): Promise<BoardColumn>;
149
+ /** Reorder a board's columns. The request must include every column id. */
150
+ reorderColumns(boardId: string, data: ReorderColumnsData): Promise<BoardColumn[]>;
151
+ /** Update column metadata (name, color, task-status mapping, etc.). */
152
+ updateColumn(boardId: string, columnId: string, data: UpdateColumnData): Promise<BoardColumn>;
153
+ /**
154
+ * Delete a column. If the column holds tasks, pass `targetColumnId`
155
+ * to move them; otherwise the call fails.
156
+ */
157
+ deleteColumn(boardId: string, columnId: string, targetColumnId?: string): Promise<void>;
158
+ /** List tasks on a board, optionally narrowed by column / assignee / tag / status / search. */
159
+ getBoardTasks(boardId: string, params?: {
160
+ columnId?: string;
161
+ search?: string;
162
+ status?: string;
163
+ assignedToId?: string;
164
+ tags?: string[];
165
+ }): Promise<Task[]>;
166
+ /**
167
+ * Create a task directly on a board. When `announce` is supplied the
168
+ * server also posts a Nu reply in the named chat threaded under the
169
+ * given message, with this task linked via TaskRelation.
170
+ */
171
+ createBoardTask(boardId: string, data: CreateBoardTaskData): Promise<Task>;
172
+ /** Attach an existing project task to a board (no new task is created). */
173
+ addExistingTaskToBoard(boardId: string, data: AddExistingTaskData): Promise<Task>;
174
+ /** Move a task to a different column on the same board. */
175
+ moveTask(boardId: string, taskId: string, data: MoveTaskData): Promise<Task>;
176
+ /** Detach a task from a board. The task itself is preserved as boardless. */
177
+ removeTaskFromBoard(boardId: string, taskId: string): Promise<Task>;
178
+ /** Attach a tag to a board. */
179
+ tagBoard(boardId: string, tagId: string): Promise<Board>;
180
+ /** Detach a tag from a board. */
181
+ untagBoard(boardId: string, tagId: string): Promise<Board>;
182
+ /** Follow a board to receive notifications about its tasks. */
183
+ followBoard(boardId: string): Promise<Board>;
184
+ /** Stop following a board. */
185
+ unfollowBoard(boardId: string): Promise<Board>;
186
+ };
187
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../src/routes/board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,270 @@
1
+ // --- Method Definitions ---
2
+ export default function createBoardMethods(client) {
3
+ return {
4
+ // ========================================================================
5
+ // Board CRUD
6
+ // ========================================================================
7
+ /**
8
+ * Create a new board inside a project. If `columns` are omitted the
9
+ * server seeds the standard four-column layout.
10
+ */
11
+ async createBoard(data) {
12
+ if (!data.projectId)
13
+ throw new Error('projectId is required.');
14
+ if (!data.name)
15
+ throw new Error('name is required.');
16
+ return client._request({
17
+ method: 'POST',
18
+ endpoint: '/v1/boards/',
19
+ body: data,
20
+ sendJWT: true,
21
+ });
22
+ },
23
+ /**
24
+ * List boards in a project. Filters by visibility, free-text search,
25
+ * and tag ids.
26
+ */
27
+ async getProjectBoards(projectId, params) {
28
+ if (!projectId)
29
+ throw new Error('projectId is required.');
30
+ return client._request({
31
+ method: 'GET',
32
+ endpoint: `/v1/boards/project/${projectId}`,
33
+ params,
34
+ sendJWT: true,
35
+ });
36
+ },
37
+ /**
38
+ * List every task in a project across all boards. Use `boardId:
39
+ * 'unassigned'` to fetch only tasks not yet placed on a board.
40
+ */
41
+ async getProjectTasks(projectId, params) {
42
+ if (!projectId)
43
+ throw new Error('projectId is required.');
44
+ return client._request({
45
+ method: 'GET',
46
+ endpoint: `/v1/boards/project/${projectId}/tasks`,
47
+ params,
48
+ sendJWT: true,
49
+ });
50
+ },
51
+ /** Fetch a board with its columns and tasks populated. */
52
+ async getBoard(boardId) {
53
+ if (!boardId)
54
+ throw new Error('boardId is required.');
55
+ return client._request({
56
+ method: 'GET',
57
+ endpoint: `/v1/boards/${boardId}`,
58
+ sendJWT: true,
59
+ });
60
+ },
61
+ /**
62
+ * Update a board's metadata. Set `cascade: true` to opt into
63
+ * automatic cleanup of dependent tasks when narrowing visibility;
64
+ * otherwise the server returns 409 with a `blockers` payload.
65
+ */
66
+ async updateBoard(boardId, data) {
67
+ if (!boardId)
68
+ throw new Error('boardId is required.');
69
+ return client._request({
70
+ method: 'PUT',
71
+ endpoint: `/v1/boards/${boardId}`,
72
+ body: data,
73
+ sendJWT: true,
74
+ });
75
+ },
76
+ /**
77
+ * Delete a board. `disposition` controls what happens to its tasks:
78
+ * `unassign` (default — tasks survive boardless), `delete`, or
79
+ * `reassign` to another board/column.
80
+ */
81
+ async deleteBoard(boardId, body) {
82
+ if (!boardId)
83
+ throw new Error('boardId is required.');
84
+ return client._request({
85
+ method: 'DELETE',
86
+ endpoint: `/v1/boards/${boardId}`,
87
+ body: body && Object.keys(body).length > 0 ? body : undefined,
88
+ sendJWT: true,
89
+ });
90
+ },
91
+ // ========================================================================
92
+ // Column Operations
93
+ // ========================================================================
94
+ /** Add a column to a board. Appended at the end unless `sortOrder` is provided. */
95
+ async addColumn(boardId, data) {
96
+ if (!boardId)
97
+ throw new Error('boardId is required.');
98
+ if (!data.name)
99
+ throw new Error('name is required.');
100
+ return client._request({
101
+ method: 'POST',
102
+ endpoint: `/v1/boards/${boardId}/columns`,
103
+ body: data,
104
+ sendJWT: true,
105
+ });
106
+ },
107
+ /** Reorder a board's columns. The request must include every column id. */
108
+ async reorderColumns(boardId, data) {
109
+ if (!boardId)
110
+ throw new Error('boardId is required.');
111
+ return client._request({
112
+ method: 'PUT',
113
+ endpoint: `/v1/boards/${boardId}/columns/reorder`,
114
+ body: data,
115
+ sendJWT: true,
116
+ });
117
+ },
118
+ /** Update column metadata (name, color, task-status mapping, etc.). */
119
+ async updateColumn(boardId, columnId, data) {
120
+ if (!boardId)
121
+ throw new Error('boardId is required.');
122
+ if (!columnId)
123
+ throw new Error('columnId is required.');
124
+ return client._request({
125
+ method: 'PUT',
126
+ endpoint: `/v1/boards/${boardId}/columns/${columnId}`,
127
+ body: data,
128
+ sendJWT: true,
129
+ });
130
+ },
131
+ /**
132
+ * Delete a column. If the column holds tasks, pass `targetColumnId`
133
+ * to move them; otherwise the call fails.
134
+ */
135
+ async deleteColumn(boardId, columnId, targetColumnId) {
136
+ if (!boardId)
137
+ throw new Error('boardId is required.');
138
+ if (!columnId)
139
+ throw new Error('columnId is required.');
140
+ return client._request({
141
+ method: 'DELETE',
142
+ endpoint: `/v1/boards/${boardId}/columns/${columnId}`,
143
+ body: targetColumnId ? { targetColumnId } : undefined,
144
+ sendJWT: true,
145
+ });
146
+ },
147
+ // ========================================================================
148
+ // Board Task Operations
149
+ // ========================================================================
150
+ /** List tasks on a board, optionally narrowed by column / assignee / tag / status / search. */
151
+ async getBoardTasks(boardId, params) {
152
+ if (!boardId)
153
+ throw new Error('boardId is required.');
154
+ return client._request({
155
+ method: 'GET',
156
+ endpoint: `/v1/boards/${boardId}/tasks`,
157
+ params,
158
+ sendJWT: true,
159
+ });
160
+ },
161
+ /**
162
+ * Create a task directly on a board. When `announce` is supplied the
163
+ * server also posts a Nu reply in the named chat threaded under the
164
+ * given message, with this task linked via TaskRelation.
165
+ */
166
+ async createBoardTask(boardId, data) {
167
+ if (!boardId)
168
+ throw new Error('boardId is required.');
169
+ if (!data.subject)
170
+ throw new Error('subject is required.');
171
+ return client._request({
172
+ method: 'POST',
173
+ endpoint: `/v1/boards/${boardId}/tasks`,
174
+ body: data,
175
+ sendJWT: true,
176
+ });
177
+ },
178
+ /** Attach an existing project task to a board (no new task is created). */
179
+ async addExistingTaskToBoard(boardId, data) {
180
+ if (!boardId)
181
+ throw new Error('boardId is required.');
182
+ if (!data.taskId)
183
+ throw new Error('taskId is required.');
184
+ return client._request({
185
+ method: 'POST',
186
+ endpoint: `/v1/boards/${boardId}/tasks/add`,
187
+ body: data,
188
+ sendJWT: true,
189
+ });
190
+ },
191
+ /** Move a task to a different column on the same board. */
192
+ async moveTask(boardId, taskId, data) {
193
+ if (!boardId)
194
+ throw new Error('boardId is required.');
195
+ if (!taskId)
196
+ throw new Error('taskId is required.');
197
+ if (!data.columnId)
198
+ throw new Error('columnId is required.');
199
+ return client._request({
200
+ method: 'PUT',
201
+ endpoint: `/v1/boards/${boardId}/tasks/${taskId}/move`,
202
+ body: data,
203
+ sendJWT: true,
204
+ });
205
+ },
206
+ /** Detach a task from a board. The task itself is preserved as boardless. */
207
+ async removeTaskFromBoard(boardId, taskId) {
208
+ if (!boardId)
209
+ throw new Error('boardId is required.');
210
+ if (!taskId)
211
+ throw new Error('taskId is required.');
212
+ return client._request({
213
+ method: 'DELETE',
214
+ endpoint: `/v1/boards/${boardId}/tasks/${taskId}`,
215
+ sendJWT: true,
216
+ });
217
+ },
218
+ // ========================================================================
219
+ // Task Detail Operations
220
+ // ========================================================================
221
+ // ========================================================================
222
+ // Task Link Operations
223
+ // ========================================================================
224
+ // ========================================================================
225
+ // Tagging
226
+ // ========================================================================
227
+ /** Attach a tag to a board. */
228
+ async tagBoard(boardId, tagId) {
229
+ return client._request({
230
+ method: 'PUT',
231
+ endpoint: `/v1/boards/${boardId}/tag`,
232
+ body: { tagId },
233
+ sendJWT: true,
234
+ });
235
+ },
236
+ /** Detach a tag from a board. */
237
+ async untagBoard(boardId, tagId) {
238
+ return client._request({
239
+ method: 'PUT',
240
+ endpoint: `/v1/boards/${boardId}/untag`,
241
+ body: { tagId },
242
+ sendJWT: true,
243
+ });
244
+ },
245
+ // ========================================================================
246
+ // Following
247
+ // ========================================================================
248
+ /** Follow a board to receive notifications about its tasks. */
249
+ async followBoard(boardId) {
250
+ if (!boardId)
251
+ throw new Error('boardId is required.');
252
+ return client._request({
253
+ method: 'PUT',
254
+ endpoint: `/v1/boards/${boardId}/follow`,
255
+ sendJWT: true,
256
+ });
257
+ },
258
+ /** Stop following a board. */
259
+ async unfollowBoard(boardId) {
260
+ if (!boardId)
261
+ throw new Error('boardId is required.');
262
+ return client._request({
263
+ method: 'PUT',
264
+ endpoint: `/v1/boards/${boardId}/unfollow`,
265
+ sendJWT: true,
266
+ });
267
+ },
268
+ };
269
+ }
270
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/routes/board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import NuramaClient from '../NuramaClient.js';
2
+ export interface BotApiKeySummary {
3
+ id: string;
4
+ keyPrefix: string;
5
+ name: string;
6
+ /** Discriminator. Bot keys mint as 'botAccess'. */
7
+ kind?: 'botAccess' | 'pat' | 'oauthAccess' | 'oauthRefresh' | null;
8
+ /** Granted scopes. A bot key is minted with the full registry when none are chosen. */
9
+ scopes?: string[];
10
+ lastUsed?: string | null;
11
+ expiresAt?: string | null;
12
+ status: 'active' | 'revoked';
13
+ createdAt: string;
14
+ }
15
+ export interface Bot {
16
+ id: string;
17
+ displayName: string;
18
+ color: string;
19
+ accountType: 'bot';
20
+ status: string;
21
+ avatarId: string | null;
22
+ /**
23
+ * Populated avatar Asset (joined server-side from `avatarId`). The web client
24
+ * resolves the image URL from this field via `getAvatarUrl()`.
25
+ */
26
+ avatar?: any | null;
27
+ roles?: string[];
28
+ membershipId?: string;
29
+ apiKeys?: BotApiKeySummary[];
30
+ apiKey?: BotApiKeySummary;
31
+ /**
32
+ * Project memberships within the workspace the bot belongs to. Populated by
33
+ * `listBots` and `getBot`. Empty array if the bot has no project assignments.
34
+ */
35
+ projectMemberships?: BotProjectMembership[];
36
+ createdAt: string;
37
+ updatedAt: string;
38
+ }
39
+ export interface CreateBotData {
40
+ /** Display name for the bot. 1–50 characters. */
41
+ name: string;
42
+ /** Optional hex color from the approved palette. Auto-assigned if omitted. */
43
+ color?: string;
44
+ /** Workspace roles to grant the bot. Must be one or more of:
45
+ * workspaceAdmin, workspaceMember, workspaceChatMember. */
46
+ roles: Array<'workspaceAdmin' | 'workspaceMember' | 'workspaceChatMember'>;
47
+ /**
48
+ * Optional API-key scopes. Omit (or pass an empty array) to mint the key
49
+ * with the full scope registry, which is what the bot's roles already allow
50
+ * — every route declares a scope now, so a genuinely empty set would leave
51
+ * the key unable to call anything. Pass a subset to narrow it.
52
+ */
53
+ scopes?: string[];
54
+ }
55
+ export interface CreateBotResponse {
56
+ bot: Bot;
57
+ /** Raw API key, returned ONCE at creation time. Store it immediately — it
58
+ * cannot be retrieved again. */
59
+ rawKey: string;
60
+ }
61
+ export interface UpdateBotData {
62
+ name?: string;
63
+ color?: string;
64
+ }
65
+ export interface RotateBotKeyResponse {
66
+ apiKey: BotApiKeySummary;
67
+ /** New raw API key. Returned once. */
68
+ rawKey: string;
69
+ }
70
+ export interface CreateBotKeyData {
71
+ /** Label shown in the bot's key list. */
72
+ name: string;
73
+ /** Validated server-side against the token-scope registry. Omit for the full set. */
74
+ scopes?: string[];
75
+ /** Optional expiry, ISO 8601. Must be in the future. */
76
+ expiresAt?: string;
77
+ }
78
+ export interface CreateBotKeyResponse {
79
+ apiKey: BotApiKeySummary;
80
+ /** Raw API key. Returned once and not recoverable afterwards. */
81
+ rawKey: string;
82
+ }
83
+ export interface UpdateBotKeyScopesData {
84
+ /**
85
+ * The COMPLETE new scope set, not a delta — the same shape `createBotKey`
86
+ * takes. At least one scope; a scopeless key authenticates and is then
87
+ * refused by every gated route, so revoke it instead of emptying it.
88
+ */
89
+ scopes: string[];
90
+ }
91
+ export interface UpdateBotAvatarFileData {
92
+ name: string;
93
+ sizeInMB: number;
94
+ checksum: string;
95
+ }
96
+ export interface UpdateBotAvatarResponse {
97
+ user: {
98
+ id: string;
99
+ avatarId: string | null;
100
+ };
101
+ asset?: {
102
+ id: string;
103
+ [k: string]: unknown;
104
+ };
105
+ signedUrlData?: {
106
+ key: string;
107
+ uploadId: string;
108
+ urls: string[];
109
+ };
110
+ [k: string]: unknown;
111
+ }
112
+ export type BotProjectRole = 'creator' | 'reviewer' | 'projectAdmin';
113
+ export interface BotProjectMembership {
114
+ membershipId: string;
115
+ projectId: string;
116
+ projectName: string;
117
+ roles: BotProjectRole[];
118
+ }
119
+ /**
120
+ * Bot user administration methods. Used by workspace owners/admins (callers
121
+ * holding a JWT) to manage bot users in a workspace. Bots themselves cannot
122
+ * call these endpoints — bot administration is restricted server-side.
123
+ */
124
+ export default function createBotMethods(client: NuramaClient): {
125
+ /**
126
+ * Create a bot user in a workspace.
127
+ * Returns the new bot and the raw API key (shown only once).
128
+ */
129
+ createBot(workspaceId: string, data: CreateBotData): Promise<CreateBotResponse>;
130
+ /** List bot users in a workspace. */
131
+ listBots(workspaceId: string): Promise<Bot[]>;
132
+ /** Get a single bot's details, including all of its API key metadata (no secrets). */
133
+ getBot(workspaceId: string, botId: string): Promise<Bot>;
134
+ /** Update a bot's display name and/or color. */
135
+ updateBot(workspaceId: string, botId: string, data: UpdateBotData): Promise<Bot>;
136
+ /**
137
+ * Delete a bot user. Revokes all API keys, removes the workspace
138
+ * membership, and marks the user inactive.
139
+ */
140
+ deleteBot(workspaceId: string, botId: string): Promise<void>;
141
+ /**
142
+ * Revoke the bot's current API key and issue a new one.
143
+ * The new raw key is returned once.
144
+ *
145
+ * The replacement carries the old key's scopes verbatim, so this is not a
146
+ * way to pick up scopes added to the registry since the key was minted —
147
+ * `updateBotKeyScopes` is.
148
+ */
149
+ rotateBotKey(workspaceId: string, botId: string): Promise<RotateBotKeyResponse>;
150
+ /**
151
+ * Mint an ADDITIONAL API key for the bot, up to 5 live keys.
152
+ *
153
+ * Unlike `rotateBotKey`, the bot's existing keys keep working — which is
154
+ * what makes a zero-downtime changeover possible: mint, move traffic over,
155
+ * then revoke the old key. The raw key is returned once.
156
+ */
157
+ createBotKey(workspaceId: string, botId: string, keyData: CreateBotKeyData): Promise<CreateBotKeyResponse>;
158
+ /**
159
+ * Replace the scopes on one of the bot's API keys, in place.
160
+ *
161
+ * A key's scopes are a snapshot taken when it was minted, and the registry
162
+ * grows — a key created before a scope existed cannot hold it. Rotation is
163
+ * not a substitute: `rotateBotKey` copies the old scope set onto the
164
+ * replacement, so a stale key stays stale through every rotation.
165
+ *
166
+ * This matters most for keys minted with `scopes` omitted, which means
167
+ * "the full registry" as it stood that day, not "whatever the full registry
168
+ * becomes".
169
+ *
170
+ * The secret is unchanged — every caller configured with this key keeps
171
+ * working, which is the whole point. Requires `canManageBots`.
172
+ */
173
+ updateBotKeyScopes(workspaceId: string, botId: string, keyId: string, data: UpdateBotKeyScopesData): Promise<BotApiKeySummary>;
174
+ /**
175
+ * Revoke one of the bot's API keys, leaving its others working.
176
+ * A revoked key stops authenticating immediately and frees a slot
177
+ * against the 5-key cap.
178
+ */
179
+ revokeBotKey(workspaceId: string, botId: string, keyId: string): Promise<void>;
180
+ /**
181
+ * Request signed URL data to upload a new avatar for the bot.
182
+ * Caller multipart-uploads the file to S3 using the returned `signedUrlData`,
183
+ * then calls `client.asset.completeUpload(...)` to finalize.
184
+ */
185
+ updateBotAvatar(workspaceId: string, botId: string, fileData: UpdateBotAvatarFileData): Promise<UpdateBotAvatarResponse>;
186
+ /**
187
+ * List the bot's project memberships within the workspace.
188
+ */
189
+ listProjectMemberships(workspaceId: string, botId: string): Promise<BotProjectMembership[]>;
190
+ /**
191
+ * Upsert the bot's membership on a project. Replaces roles if a membership
192
+ * already exists; creates one otherwise. Idempotent.
193
+ */
194
+ setProjectMembership(workspaceId: string, botId: string, projectId: string, data: {
195
+ roles: BotProjectRole[];
196
+ }): Promise<BotProjectMembership>;
197
+ /**
198
+ * Remove the bot's membership on a project. Idempotent.
199
+ */
200
+ removeProjectMembership(workspaceId: string, botId: string, projectId: string): Promise<void>;
201
+ };
202
+ //# sourceMappingURL=bot.d.ts.map