@benchcubed/today-cli 1.0.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 (210) hide show
  1. package/README.md +296 -0
  2. package/dist/ai/bedrock-client.d.ts +1 -0
  3. package/dist/ai/bedrock-client.d.ts.map +1 -0
  4. package/dist/ai/bedrock-client.js +2 -0
  5. package/dist/ai/bedrock-client.js.map +1 -0
  6. package/dist/ai/knowledge-processor.d.ts +1 -0
  7. package/dist/ai/knowledge-processor.d.ts.map +1 -0
  8. package/dist/ai/knowledge-processor.js +2 -0
  9. package/dist/ai/knowledge-processor.js.map +1 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +70 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/commands/ask.d.ts +3 -0
  15. package/dist/commands/ask.d.ts.map +1 -0
  16. package/dist/commands/ask.js +217 -0
  17. package/dist/commands/ask.js.map +1 -0
  18. package/dist/commands/audit.d.ts +3 -0
  19. package/dist/commands/audit.d.ts.map +1 -0
  20. package/dist/commands/audit.js +153 -0
  21. package/dist/commands/audit.js.map +1 -0
  22. package/dist/commands/auth.d.ts +3 -0
  23. package/dist/commands/auth.d.ts.map +1 -0
  24. package/dist/commands/auth.js +114 -0
  25. package/dist/commands/auth.js.map +1 -0
  26. package/dist/commands/config.d.ts +3 -0
  27. package/dist/commands/config.d.ts.map +1 -0
  28. package/dist/commands/config.js +72 -0
  29. package/dist/commands/config.js.map +1 -0
  30. package/dist/commands/embeddings.d.ts +3 -0
  31. package/dist/commands/embeddings.d.ts.map +1 -0
  32. package/dist/commands/embeddings.js +118 -0
  33. package/dist/commands/embeddings.js.map +1 -0
  34. package/dist/commands/experts.d.ts +3 -0
  35. package/dist/commands/experts.d.ts.map +1 -0
  36. package/dist/commands/experts.js +129 -0
  37. package/dist/commands/experts.js.map +1 -0
  38. package/dist/commands/export-import.d.ts +4 -0
  39. package/dist/commands/export-import.d.ts.map +1 -0
  40. package/dist/commands/export-import.js +285 -0
  41. package/dist/commands/export-import.js.map +1 -0
  42. package/dist/commands/git.d.ts +4 -0
  43. package/dist/commands/git.d.ts.map +1 -0
  44. package/dist/commands/git.js +274 -0
  45. package/dist/commands/git.js.map +1 -0
  46. package/dist/commands/impact.d.ts +3 -0
  47. package/dist/commands/impact.d.ts.map +1 -0
  48. package/dist/commands/impact.js +121 -0
  49. package/dist/commands/impact.js.map +1 -0
  50. package/dist/commands/insights.d.ts +3 -0
  51. package/dist/commands/insights.d.ts.map +1 -0
  52. package/dist/commands/insights.js +113 -0
  53. package/dist/commands/insights.js.map +1 -0
  54. package/dist/commands/learned.d.ts +3 -0
  55. package/dist/commands/learned.d.ts.map +1 -0
  56. package/dist/commands/learned.js +355 -0
  57. package/dist/commands/learned.js.map +1 -0
  58. package/dist/commands/onboard.d.ts +3 -0
  59. package/dist/commands/onboard.d.ts.map +1 -0
  60. package/dist/commands/onboard.js +141 -0
  61. package/dist/commands/onboard.js.map +1 -0
  62. package/dist/commands/recent.d.ts +3 -0
  63. package/dist/commands/recent.d.ts.map +1 -0
  64. package/dist/commands/recent.js +83 -0
  65. package/dist/commands/recent.js.map +1 -0
  66. package/dist/commands/secrets.d.ts +3 -0
  67. package/dist/commands/secrets.d.ts.map +1 -0
  68. package/dist/commands/secrets.js +203 -0
  69. package/dist/commands/secrets.js.map +1 -0
  70. package/dist/commands/stats.d.ts +3 -0
  71. package/dist/commands/stats.d.ts.map +1 -0
  72. package/dist/commands/stats.js +120 -0
  73. package/dist/commands/stats.js.map +1 -0
  74. package/dist/config/index.d.ts +12 -0
  75. package/dist/config/index.d.ts.map +1 -0
  76. package/dist/config/index.js +46 -0
  77. package/dist/config/index.js.map +1 -0
  78. package/dist/database/migrations.d.ts +13 -0
  79. package/dist/database/migrations.d.ts.map +1 -0
  80. package/dist/database/migrations.js +190 -0
  81. package/dist/database/migrations.js.map +1 -0
  82. package/dist/database/postgresql.d.ts +92 -0
  83. package/dist/database/postgresql.d.ts.map +1 -0
  84. package/dist/database/postgresql.js +382 -0
  85. package/dist/database/postgresql.js.map +1 -0
  86. package/dist/database/sqlite.d.ts +54 -0
  87. package/dist/database/sqlite.d.ts.map +1 -0
  88. package/dist/database/sqlite.js +337 -0
  89. package/dist/database/sqlite.js.map +1 -0
  90. package/dist/lambda/admin.d.ts +3 -0
  91. package/dist/lambda/admin.d.ts.map +1 -0
  92. package/dist/lambda/admin.js +818 -0
  93. package/dist/lambda/admin.js.map +1 -0
  94. package/dist/lambda/ai-services.d.ts +6 -0
  95. package/dist/lambda/ai-services.d.ts.map +1 -0
  96. package/dist/lambda/ai-services.js +472 -0
  97. package/dist/lambda/ai-services.js.map +1 -0
  98. package/dist/lambda/analytics.d.ts +3 -0
  99. package/dist/lambda/analytics.d.ts.map +1 -0
  100. package/dist/lambda/analytics.js +481 -0
  101. package/dist/lambda/analytics.js.map +1 -0
  102. package/dist/lambda/api-router.d.ts +3 -0
  103. package/dist/lambda/api-router.d.ts.map +1 -0
  104. package/dist/lambda/api-router.js +162 -0
  105. package/dist/lambda/api-router.js.map +1 -0
  106. package/dist/lambda/custom-topics.d.ts +3 -0
  107. package/dist/lambda/custom-topics.d.ts.map +1 -0
  108. package/dist/lambda/custom-topics.js +425 -0
  109. package/dist/lambda/custom-topics.js.map +1 -0
  110. package/dist/lambda/graph-builder.d.ts +3 -0
  111. package/dist/lambda/graph-builder.d.ts.map +1 -0
  112. package/dist/lambda/graph-builder.js +442 -0
  113. package/dist/lambda/graph-builder.js.map +1 -0
  114. package/dist/lambda/knowledge-ai.d.ts +3 -0
  115. package/dist/lambda/knowledge-ai.d.ts.map +1 -0
  116. package/dist/lambda/knowledge-ai.js +849 -0
  117. package/dist/lambda/knowledge-ai.js.map +1 -0
  118. package/dist/lambda/post-confirmation.d.ts +8 -0
  119. package/dist/lambda/post-confirmation.d.ts.map +1 -0
  120. package/dist/lambda/post-confirmation.js +92 -0
  121. package/dist/lambda/post-confirmation.js.map +1 -0
  122. package/dist/lambda/teams.d.ts +3 -0
  123. package/dist/lambda/teams.d.ts.map +1 -0
  124. package/dist/lambda/teams.js +568 -0
  125. package/dist/lambda/teams.js.map +1 -0
  126. package/dist/lib/export-helpers.d.ts +5 -0
  127. package/dist/lib/export-helpers.d.ts.map +1 -0
  128. package/dist/lib/export-helpers.js +137 -0
  129. package/dist/lib/export-helpers.js.map +1 -0
  130. package/dist/lib/import-helpers.d.ts +5 -0
  131. package/dist/lib/import-helpers.d.ts.map +1 -0
  132. package/dist/lib/import-helpers.js +185 -0
  133. package/dist/lib/import-helpers.js.map +1 -0
  134. package/dist/lib/insights-helpers.d.ts +123 -0
  135. package/dist/lib/insights-helpers.d.ts.map +1 -0
  136. package/dist/lib/insights-helpers.js +374 -0
  137. package/dist/lib/insights-helpers.js.map +1 -0
  138. package/dist/lib/search-helpers.d.ts +4 -0
  139. package/dist/lib/search-helpers.d.ts.map +1 -0
  140. package/dist/lib/search-helpers.js +124 -0
  141. package/dist/lib/search-helpers.js.map +1 -0
  142. package/dist/lib/secret-helpers.d.ts +2 -0
  143. package/dist/lib/secret-helpers.d.ts.map +1 -0
  144. package/dist/lib/secret-helpers.js +85 -0
  145. package/dist/lib/secret-helpers.js.map +1 -0
  146. package/dist/lib/stats-helpers.d.ts +41 -0
  147. package/dist/lib/stats-helpers.d.ts.map +1 -0
  148. package/dist/lib/stats-helpers.js +263 -0
  149. package/dist/lib/stats-helpers.js.map +1 -0
  150. package/dist/services/aws-api.d.ts +81 -0
  151. package/dist/services/aws-api.d.ts.map +1 -0
  152. package/dist/services/aws-api.js +388 -0
  153. package/dist/services/aws-api.js.map +1 -0
  154. package/dist/services/bedrock.d.ts +83 -0
  155. package/dist/services/bedrock.d.ts.map +1 -0
  156. package/dist/services/bedrock.js +434 -0
  157. package/dist/services/bedrock.js.map +1 -0
  158. package/dist/services/commit-learnings.d.ts +25 -0
  159. package/dist/services/commit-learnings.d.ts.map +1 -0
  160. package/dist/services/commit-learnings.js +180 -0
  161. package/dist/services/commit-learnings.js.map +1 -0
  162. package/dist/services/embedding-storage.d.ts +42 -0
  163. package/dist/services/embedding-storage.d.ts.map +1 -0
  164. package/dist/services/embedding-storage.js +124 -0
  165. package/dist/services/embedding-storage.js.map +1 -0
  166. package/dist/services/expert-engine.d.ts +21 -0
  167. package/dist/services/expert-engine.d.ts.map +1 -0
  168. package/dist/services/expert-engine.js +58 -0
  169. package/dist/services/expert-engine.js.map +1 -0
  170. package/dist/services/onboarding-accelerator.d.ts +118 -0
  171. package/dist/services/onboarding-accelerator.d.ts.map +1 -0
  172. package/dist/services/onboarding-accelerator.js +403 -0
  173. package/dist/services/onboarding-accelerator.js.map +1 -0
  174. package/dist/services/secret-detection.d.ts +46 -0
  175. package/dist/services/secret-detection.d.ts.map +1 -0
  176. package/dist/services/secret-detection.js +75 -0
  177. package/dist/services/secret-detection.js.map +1 -0
  178. package/dist/services/secret-manager-simple.d.ts +51 -0
  179. package/dist/services/secret-manager-simple.d.ts.map +1 -0
  180. package/dist/services/secret-manager-simple.js +119 -0
  181. package/dist/services/secret-manager-simple.js.map +1 -0
  182. package/dist/services/secret-manager.d.ts +150 -0
  183. package/dist/services/secret-manager.d.ts.map +1 -0
  184. package/dist/services/secret-manager.js +287 -0
  185. package/dist/services/secret-manager.js.map +1 -0
  186. package/dist/services/vector-embeddings.d.ts +70 -0
  187. package/dist/services/vector-embeddings.d.ts.map +1 -0
  188. package/dist/services/vector-embeddings.js +167 -0
  189. package/dist/services/vector-embeddings.js.map +1 -0
  190. package/dist/services/vector-search.d.ts +28 -0
  191. package/dist/services/vector-search.d.ts.map +1 -0
  192. package/dist/services/vector-search.js +192 -0
  193. package/dist/services/vector-search.js.map +1 -0
  194. package/dist/types/index.d.ts +86 -0
  195. package/dist/types/index.d.ts.map +1 -0
  196. package/dist/types/index.js +4 -0
  197. package/dist/types/index.js.map +1 -0
  198. package/dist/utils/formatting.d.ts +10 -0
  199. package/dist/utils/formatting.d.ts.map +1 -0
  200. package/dist/utils/formatting.js +82 -0
  201. package/dist/utils/formatting.js.map +1 -0
  202. package/dist/utils/git.d.ts +52 -0
  203. package/dist/utils/git.d.ts.map +1 -0
  204. package/dist/utils/git.js +182 -0
  205. package/dist/utils/git.js.map +1 -0
  206. package/dist/utils/validation.d.ts +17 -0
  207. package/dist/utils/validation.d.ts.map +1 -0
  208. package/dist/utils/validation.js +187 -0
  209. package/dist/utils/validation.js.map +1 -0
  210. package/package.json +81 -0
@@ -0,0 +1,568 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handler = void 0;
4
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
+ const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
6
+ const crypto_1 = require("crypto");
7
+ const dynamoClient = new client_dynamodb_1.DynamoDBClient({ region: process.env.AWS_REGION || 'eu-west-2' });
8
+ const docClient = lib_dynamodb_1.DynamoDBDocumentClient.from(dynamoClient);
9
+ const TEAMS_TABLE = process.env.TEAMS_TABLE_NAME;
10
+ const TEAM_MEMBERS_TABLE = process.env.TEAM_MEMBERS_TABLE_NAME;
11
+ const TEAM_INVITES_TABLE = process.env.TEAM_INVITES_TABLE_NAME;
12
+ const corsHeaders = {
13
+ 'Access-Control-Allow-Origin': '*',
14
+ 'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
15
+ 'Access-Control-Allow-Methods': 'GET,POST,PUT,DELETE,OPTIONS',
16
+ 'Content-Type': 'application/json'
17
+ };
18
+ // Extract user info from JWT token
19
+ // WARNING: This only validates token structure, not signature.
20
+ // In production, tokens should be verified against Cognito's public keys.
21
+ // API Gateway can be configured with Cognito authorizer for proper verification.
22
+ function getUserFromEvent(event) {
23
+ try {
24
+ const authHeader = event.headers?.Authorization || event.headers?.authorization;
25
+ if (!authHeader)
26
+ return null;
27
+ const token = authHeader.replace('Bearer ', '');
28
+ // Validate token structure
29
+ const parts = token.split('.');
30
+ if (parts.length !== 3) {
31
+ console.error('Invalid token structure');
32
+ return null;
33
+ }
34
+ const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
35
+ return {
36
+ userId: payload.sub || payload['cognito:username'],
37
+ username: payload['cognito:username'] || payload.sub
38
+ };
39
+ }
40
+ catch (error) {
41
+ console.error('Error extracting user from token:', error);
42
+ return null;
43
+ }
44
+ }
45
+ const handler = async (event) => {
46
+ console.log('Teams API Event:', JSON.stringify(event, null, 2));
47
+ // Handle CORS preflight
48
+ if (event.httpMethod === 'OPTIONS') {
49
+ return {
50
+ statusCode: 200,
51
+ headers: corsHeaders,
52
+ body: ''
53
+ };
54
+ }
55
+ try {
56
+ const path = event.path;
57
+ const method = event.httpMethod;
58
+ const pathParams = event.pathParameters || {};
59
+ const body = event.body ? JSON.parse(event.body) : {};
60
+ // Extract route from path
61
+ let routePath;
62
+ if (pathParams.proxy) {
63
+ routePath = `/${pathParams.proxy}`;
64
+ }
65
+ else {
66
+ const match = path.match(/\/api\/teams(\/.*)?$/);
67
+ routePath = match ? (match[1] || '') : '';
68
+ }
69
+ console.log('Route path:', routePath, 'Method:', method);
70
+ // Get authenticated user
71
+ const user = getUserFromEvent(event);
72
+ if (!user && !/^\/join\/[^/]+$/.test(routePath)) {
73
+ return {
74
+ statusCode: 401,
75
+ headers: corsHeaders,
76
+ body: JSON.stringify({ error: 'Unauthorized' })
77
+ };
78
+ }
79
+ // Route handlers
80
+ if (routePath === '' && method === 'POST') {
81
+ return await createTeam(body, user);
82
+ }
83
+ if (routePath === '' && method === 'GET') {
84
+ return await getUserTeams(user);
85
+ }
86
+ if (routePath.match(/^\/[^/]+$/) && method === 'GET') {
87
+ const teamId = routePath.substring(1);
88
+ return await getTeam(teamId, user);
89
+ }
90
+ if (routePath.match(/^\/[^/]+\/invite$/) && method === 'POST') {
91
+ const teamId = routePath.split('/')[1];
92
+ return await createInvite(teamId, user, body);
93
+ }
94
+ if (routePath.match(/^\/join\/[^/]+$/) && method === 'POST') {
95
+ const token = routePath.split('/')[2];
96
+ return await joinTeam(token, body);
97
+ }
98
+ if (routePath.match(/^\/[^/]+\/members$/) && method === 'GET') {
99
+ const teamId = routePath.split('/')[1];
100
+ return await getTeamMembers(teamId, user);
101
+ }
102
+ if (routePath.match(/^\/[^/]+\/members\/[^/]+$/) && method === 'DELETE') {
103
+ const [, teamId, , memberId] = routePath.split('/');
104
+ return await removeMember(teamId, memberId, user);
105
+ }
106
+ if (routePath.match(/^\/[^/]+\/members$/) && method === 'POST') {
107
+ const teamId = routePath.split('/')[1];
108
+ return await addMember(teamId, body, user);
109
+ }
110
+ return {
111
+ statusCode: 404,
112
+ headers: corsHeaders,
113
+ body: JSON.stringify({ error: 'Endpoint not found' })
114
+ };
115
+ }
116
+ catch (error) {
117
+ console.error('Teams API Error:', error);
118
+ return {
119
+ statusCode: 500,
120
+ headers: corsHeaders,
121
+ body: JSON.stringify({
122
+ error: 'Internal server error',
123
+ message: error instanceof Error ? error.message : 'Unknown error'
124
+ })
125
+ };
126
+ }
127
+ };
128
+ exports.handler = handler;
129
+ async function createTeam(data, user) {
130
+ if (!data.name || data.name.trim().length === 0) {
131
+ return {
132
+ statusCode: 400,
133
+ headers: corsHeaders,
134
+ body: JSON.stringify({ error: 'Team name is required' })
135
+ };
136
+ }
137
+ const teamId = `team-${(0, crypto_1.randomBytes)(16).toString('hex')}`;
138
+ const now = new Date().toISOString();
139
+ const team = {
140
+ team_id: teamId,
141
+ name: data.name.trim(),
142
+ description: data.description?.trim() ?? "",
143
+ owner_id: user.userId,
144
+ created_at: now,
145
+ updated_at: now,
146
+ member_count: 1
147
+ };
148
+ const member = {
149
+ team_id: teamId,
150
+ user_id: user.userId,
151
+ username: user.username,
152
+ email: '', // Will be populated from Cognito if needed
153
+ role: 'owner',
154
+ joined_at: now
155
+ };
156
+ // Use transaction to ensure both team and member are created atomically
157
+ await docClient.send(new lib_dynamodb_1.TransactWriteCommand({
158
+ TransactItems: [
159
+ {
160
+ Put: {
161
+ TableName: TEAMS_TABLE,
162
+ Item: team
163
+ }
164
+ },
165
+ {
166
+ Put: {
167
+ TableName: TEAM_MEMBERS_TABLE,
168
+ Item: member
169
+ }
170
+ }
171
+ ]
172
+ }));
173
+ return {
174
+ statusCode: 201,
175
+ headers: corsHeaders,
176
+ body: JSON.stringify({ team })
177
+ };
178
+ }
179
+ async function getUserTeams(user) {
180
+ // Query team_members table for user's teams
181
+ const result = await docClient.send(new lib_dynamodb_1.QueryCommand({
182
+ TableName: TEAM_MEMBERS_TABLE,
183
+ IndexName: 'user-teams-index',
184
+ KeyConditionExpression: 'user_id = :userId',
185
+ ExpressionAttributeValues: {
186
+ ':userId': user.userId
187
+ }
188
+ }));
189
+ const memberships = result.Items || [];
190
+ if (memberships.length === 0) {
191
+ return {
192
+ statusCode: 200,
193
+ headers: corsHeaders,
194
+ body: JSON.stringify({ teams: [] })
195
+ };
196
+ }
197
+ // Use BatchGetCommand to fetch all teams in one request
198
+ const batchGetResult = await docClient.send(new lib_dynamodb_1.BatchGetCommand({
199
+ RequestItems: {
200
+ [TEAMS_TABLE]: {
201
+ Keys: memberships.map(m => ({ team_id: m.team_id }))
202
+ }
203
+ }
204
+ }));
205
+ const teamsMap = new Map((batchGetResult.Responses?.[TEAMS_TABLE] || []).map(t => [t.team_id, t]));
206
+ const teams = memberships
207
+ .map(membership => {
208
+ const team = teamsMap.get(membership.team_id);
209
+ if (!team)
210
+ return null;
211
+ return {
212
+ ...team,
213
+ role: membership.role,
214
+ joined_at: membership.joined_at
215
+ };
216
+ })
217
+ .filter(t => t !== null);
218
+ return {
219
+ statusCode: 200,
220
+ headers: corsHeaders,
221
+ body: JSON.stringify({ teams })
222
+ };
223
+ }
224
+ async function getTeam(teamId, user) {
225
+ try {
226
+ // Check if user is a member of the team
227
+ const memberResult = await docClient.send(new lib_dynamodb_1.GetCommand({
228
+ TableName: TEAM_MEMBERS_TABLE,
229
+ Key: {
230
+ team_id: teamId,
231
+ user_id: user.userId
232
+ }
233
+ }));
234
+ if (!memberResult.Item) {
235
+ return {
236
+ statusCode: 403,
237
+ headers: corsHeaders,
238
+ body: JSON.stringify({ error: 'Not a member of this team' })
239
+ };
240
+ }
241
+ // Get team details
242
+ const teamResult = await docClient.send(new lib_dynamodb_1.GetCommand({
243
+ TableName: TEAMS_TABLE,
244
+ Key: { team_id: teamId }
245
+ }));
246
+ if (!teamResult.Item) {
247
+ return {
248
+ statusCode: 404,
249
+ headers: corsHeaders,
250
+ body: JSON.stringify({ error: 'Team not found' })
251
+ };
252
+ }
253
+ return {
254
+ statusCode: 200,
255
+ headers: corsHeaders,
256
+ body: JSON.stringify({ team: teamResult.Item })
257
+ };
258
+ }
259
+ catch (error) {
260
+ console.error('Error getting team:', error);
261
+ throw error;
262
+ }
263
+ }
264
+ async function createInvite(teamId, user, data) {
265
+ try {
266
+ // Check if user is owner or admin
267
+ const memberResult = await docClient.send(new lib_dynamodb_1.GetCommand({
268
+ TableName: TEAM_MEMBERS_TABLE,
269
+ Key: {
270
+ team_id: teamId,
271
+ user_id: user.userId
272
+ }
273
+ }));
274
+ if (!memberResult.Item || (memberResult.Item.role !== 'owner' && memberResult.Item.role !== 'admin')) {
275
+ return {
276
+ statusCode: 403,
277
+ headers: corsHeaders,
278
+ body: JSON.stringify({ error: 'Only team owners and admins can create invites' })
279
+ };
280
+ }
281
+ const token = (0, crypto_1.randomBytes)(32).toString('hex');
282
+ const now = new Date();
283
+ const expiresInDays = data.expiresInDays || 30;
284
+ const expiresAt = Math.floor(now.getTime() / 1000) + (expiresInDays * 24 * 60 * 60);
285
+ const invite = {
286
+ invite_token: token,
287
+ team_id: teamId,
288
+ created_by: user.userId,
289
+ created_at: now.toISOString(),
290
+ expires_at: expiresAt,
291
+ max_uses: data.maxUses ?? 1,
292
+ used_count: 0
293
+ };
294
+ await docClient.send(new lib_dynamodb_1.PutCommand({
295
+ TableName: TEAM_INVITES_TABLE,
296
+ Item: invite
297
+ }));
298
+ return {
299
+ statusCode: 201,
300
+ headers: corsHeaders,
301
+ body: JSON.stringify({
302
+ invite: {
303
+ token,
304
+ expires_at: expiresAt,
305
+ invite_link: `/teams/join/${token}`
306
+ }
307
+ })
308
+ };
309
+ }
310
+ catch (error) {
311
+ console.error('Error creating invite:', error);
312
+ throw error;
313
+ }
314
+ }
315
+ async function joinTeam(token, data) {
316
+ // Get invite
317
+ const inviteResult = await docClient.send(new lib_dynamodb_1.GetCommand({
318
+ TableName: TEAM_INVITES_TABLE,
319
+ Key: { invite_token: token }
320
+ }));
321
+ if (!inviteResult.Item) {
322
+ return {
323
+ statusCode: 404,
324
+ headers: corsHeaders,
325
+ body: JSON.stringify({ error: 'Invalid or expired invite link' })
326
+ };
327
+ }
328
+ const invite = inviteResult.Item;
329
+ // Check if invite is expired
330
+ const now = Math.floor(Date.now() / 1000);
331
+ if (invite.expires_at < now) {
332
+ return {
333
+ statusCode: 400,
334
+ headers: corsHeaders,
335
+ body: JSON.stringify({ error: 'Invite link has expired' })
336
+ };
337
+ }
338
+ // Check and atomically increment max uses
339
+ if (invite.max_uses) {
340
+ try {
341
+ await docClient.send(new lib_dynamodb_1.UpdateCommand({
342
+ TableName: TEAM_INVITES_TABLE,
343
+ Key: { invite_token: token },
344
+ UpdateExpression: 'SET used_count = if_not_exists(used_count, :zero) + :one',
345
+ ConditionExpression: 'attribute_not_exists(max_uses) OR used_count < max_uses',
346
+ ExpressionAttributeValues: {
347
+ ':zero': 0,
348
+ ':one': 1,
349
+ },
350
+ }));
351
+ }
352
+ catch (error) {
353
+ if (error && error.name === 'ConditionalCheckFailedException') {
354
+ return {
355
+ statusCode: 400,
356
+ headers: corsHeaders,
357
+ body: JSON.stringify({ error: 'Invite link has reached maximum uses' })
358
+ };
359
+ }
360
+ throw error;
361
+ }
362
+ }
363
+ else {
364
+ // Still increment used_count even without max_uses for tracking
365
+ await docClient.send(new lib_dynamodb_1.UpdateCommand({
366
+ TableName: TEAM_INVITES_TABLE,
367
+ Key: { invite_token: token },
368
+ UpdateExpression: 'SET used_count = if_not_exists(used_count, :zero) + :one',
369
+ ExpressionAttributeValues: {
370
+ ':zero': 0,
371
+ ':one': 1,
372
+ },
373
+ }));
374
+ }
375
+ // Get team info
376
+ const teamResult = await docClient.send(new lib_dynamodb_1.GetCommand({
377
+ TableName: TEAMS_TABLE,
378
+ Key: { team_id: invite.team_id }
379
+ }));
380
+ if (!teamResult.Item) {
381
+ return {
382
+ statusCode: 404,
383
+ headers: corsHeaders,
384
+ body: JSON.stringify({ error: 'Team not found' })
385
+ };
386
+ }
387
+ // Return team info for signup completion
388
+ // Note: Actual team member record will be created after signup via addMember endpoint
389
+ return {
390
+ statusCode: 200,
391
+ headers: corsHeaders,
392
+ body: JSON.stringify({
393
+ team: teamResult.Item,
394
+ teamId: invite.team_id,
395
+ inviteToken: token,
396
+ message: 'Complete signup to join this team'
397
+ })
398
+ };
399
+ }
400
+ async function getTeamMembers(teamId, user) {
401
+ try {
402
+ // Check if user is a member
403
+ const memberCheck = await docClient.send(new lib_dynamodb_1.GetCommand({
404
+ TableName: TEAM_MEMBERS_TABLE,
405
+ Key: {
406
+ team_id: teamId,
407
+ user_id: user.userId
408
+ }
409
+ }));
410
+ if (!memberCheck.Item) {
411
+ return {
412
+ statusCode: 403,
413
+ headers: corsHeaders,
414
+ body: JSON.stringify({ error: 'Not a member of this team' })
415
+ };
416
+ }
417
+ // Get all members
418
+ const result = await docClient.send(new lib_dynamodb_1.QueryCommand({
419
+ TableName: TEAM_MEMBERS_TABLE,
420
+ KeyConditionExpression: 'team_id = :teamId',
421
+ ExpressionAttributeValues: {
422
+ ':teamId': teamId
423
+ }
424
+ }));
425
+ return {
426
+ statusCode: 200,
427
+ headers: corsHeaders,
428
+ body: JSON.stringify({ members: result.Items || [] })
429
+ };
430
+ }
431
+ catch (error) {
432
+ console.error('Error getting team members:', error);
433
+ throw error;
434
+ }
435
+ }
436
+ async function removeMember(teamId, memberId, user) {
437
+ // Check if user is owner or admin
438
+ const userMemberResult = await docClient.send(new lib_dynamodb_1.GetCommand({
439
+ TableName: TEAM_MEMBERS_TABLE,
440
+ Key: {
441
+ team_id: teamId,
442
+ user_id: user.userId
443
+ }
444
+ }));
445
+ if (!userMemberResult.Item || (userMemberResult.Item.role !== 'owner' && userMemberResult.Item.role !== 'admin')) {
446
+ return {
447
+ statusCode: 403,
448
+ headers: corsHeaders,
449
+ body: JSON.stringify({ error: 'Only owners and admins can remove members' })
450
+ };
451
+ }
452
+ // Check if target is owner
453
+ const targetMemberResult = await docClient.send(new lib_dynamodb_1.GetCommand({
454
+ TableName: TEAM_MEMBERS_TABLE,
455
+ Key: {
456
+ team_id: teamId,
457
+ user_id: memberId
458
+ }
459
+ }));
460
+ if (targetMemberResult.Item?.role === 'owner') {
461
+ return {
462
+ statusCode: 403,
463
+ headers: corsHeaders,
464
+ body: JSON.stringify({ error: 'Cannot remove team owner' })
465
+ };
466
+ }
467
+ // Use transaction to atomically remove member and decrement count
468
+ await docClient.send(new lib_dynamodb_1.TransactWriteCommand({
469
+ TransactItems: [
470
+ {
471
+ Delete: {
472
+ TableName: TEAM_MEMBERS_TABLE,
473
+ Key: {
474
+ team_id: teamId,
475
+ user_id: memberId
476
+ }
477
+ }
478
+ },
479
+ {
480
+ Update: {
481
+ TableName: TEAMS_TABLE,
482
+ Key: { team_id: teamId },
483
+ UpdateExpression: 'SET member_count = if_not_exists(member_count, :one) - :dec',
484
+ ConditionExpression: 'member_count > :zero',
485
+ ExpressionAttributeValues: {
486
+ ':dec': 1,
487
+ ':zero': 0,
488
+ ':one': 1
489
+ }
490
+ }
491
+ }
492
+ ]
493
+ }));
494
+ return {
495
+ statusCode: 200,
496
+ headers: corsHeaders,
497
+ body: JSON.stringify({ message: 'Member removed successfully' })
498
+ };
499
+ }
500
+ async function addMember(teamId, data, requestUser) {
501
+ // Check if requesting user is owner or admin
502
+ const userMemberResult = await docClient.send(new lib_dynamodb_1.GetCommand({
503
+ TableName: TEAM_MEMBERS_TABLE,
504
+ Key: {
505
+ team_id: teamId,
506
+ user_id: requestUser.userId
507
+ }
508
+ }));
509
+ if (!userMemberResult.Item || (userMemberResult.Item.role !== 'owner' && userMemberResult.Item.role !== 'admin')) {
510
+ return {
511
+ statusCode: 403,
512
+ headers: corsHeaders,
513
+ body: JSON.stringify({ error: 'Only owners and admins can add members' })
514
+ };
515
+ }
516
+ // Check if user is already a member
517
+ const existingMember = await docClient.send(new lib_dynamodb_1.GetCommand({
518
+ TableName: TEAM_MEMBERS_TABLE,
519
+ Key: {
520
+ team_id: teamId,
521
+ user_id: data.user_id
522
+ }
523
+ }));
524
+ if (existingMember.Item) {
525
+ return {
526
+ statusCode: 400,
527
+ headers: corsHeaders,
528
+ body: JSON.stringify({ error: 'User is already a member of this team' })
529
+ };
530
+ }
531
+ // Add member
532
+ const member = {
533
+ team_id: teamId,
534
+ user_id: data.user_id,
535
+ username: data.username,
536
+ email: data.email || '',
537
+ role: data.role || 'member',
538
+ joined_at: new Date().toISOString()
539
+ };
540
+ // Use transaction to atomically add member and increment count
541
+ await docClient.send(new lib_dynamodb_1.TransactWriteCommand({
542
+ TransactItems: [
543
+ {
544
+ Put: {
545
+ TableName: TEAM_MEMBERS_TABLE,
546
+ Item: member
547
+ }
548
+ },
549
+ {
550
+ Update: {
551
+ TableName: TEAMS_TABLE,
552
+ Key: { team_id: teamId },
553
+ UpdateExpression: 'SET member_count = if_not_exists(member_count, :zero) + :inc',
554
+ ExpressionAttributeValues: {
555
+ ':inc': 1,
556
+ ':zero': 0
557
+ }
558
+ }
559
+ }
560
+ ]
561
+ }));
562
+ return {
563
+ statusCode: 201,
564
+ headers: corsHeaders,
565
+ body: JSON.stringify({ member, message: 'Member added successfully' })
566
+ };
567
+ }
568
+ //# sourceMappingURL=teams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/lambda/teams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function createKnowledgeBaseExport(entries: any[], options: any): Promise<any>;
2
+ export declare function convertToCSV(entries: any[]): string;
3
+ export declare function convertToMarkdown(exportData: any): string;
4
+ export declare function exportImpactData(impact: any, filename: string, format: string): void;
5
+ //# sourceMappingURL=export-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/export-helpers.ts"],"names":[],"mappings":"AAGA,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAkD1F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAkCnD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,CA6BzD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqBpF"}