@plusscommunities/pluss-maintenance-aws 2.0.2 → 2.0.3-archibus.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.
package/feature.config.js CHANGED
@@ -149,7 +149,7 @@ exports.serverless = {
149
149
  file: "jobChanged",
150
150
  function: "jobChanged",
151
151
  memorySize: 2048,
152
- timeout: 30,
152
+ timeout: 300,
153
153
  table: "maintenance",
154
154
  },
155
155
  ],
@@ -162,6 +162,14 @@ exports.serverless = {
162
162
  timeout: "300",
163
163
  rate: "1/5 * * * ? *",
164
164
  },
165
+ {
166
+ name: "scheduleJobImport",
167
+ file: "scheduleJobImport",
168
+ function: "scheduleJobImport",
169
+ memorySize: "2048",
170
+ timeout: "300",
171
+ rate: "2/3 * * * ? *",
172
+ },
165
173
  ],
166
174
  tables: [
167
175
  {
@@ -0,0 +1,35 @@
1
+ class IntegrationStrategy {
2
+ getEntityType = () => {
3
+ return "maintenance_null";
4
+ };
5
+
6
+ isValidIntegration = () => {
7
+ return false;
8
+ };
9
+
10
+ getRefreshInterval = () => {
11
+ return 15 * 60 * 1000; // 15 minutes
12
+ };
13
+
14
+ // creates a request on the integrated system
15
+ createRequest = async (request) => {
16
+ return null;
17
+ };
18
+
19
+ // gets a request from the integrated system
20
+ getRequest = async (requestId) => {
21
+ return null;
22
+ };
23
+
24
+ // refreshed a request from the integrated system
25
+ refreshFromSource = async (requestId) => {
26
+ return null;
27
+ };
28
+
29
+ // actions taken when a request is marked as completed
30
+ onCompleteRequest = async (request) => {
31
+ return null;
32
+ };
33
+ }
34
+
35
+ module.exports = IntegrationStrategy;
@@ -0,0 +1,460 @@
1
+ const axios = require("axios");
2
+ const moment = require("moment");
3
+ const _ = require("lodash");
4
+ const { encode } = require("base64-arraybuffer");
5
+ const IntegrationStrategy = require("../IntegrationStrategy");
6
+ const { log, getRowId } = require("@plusscommunities/pluss-core-aws/helper");
7
+ const editRef = require("@plusscommunities/pluss-core-aws/db/common/editRef");
8
+ const updateRef = require("@plusscommunities/pluss-core-aws/db/common/updateRef");
9
+ const indexQuery = require("@plusscommunities/pluss-core-aws/db/common/indexQuery");
10
+ const publishNotifications = require("@plusscommunities/pluss-core-aws/db/notifications/publishNotifications");
11
+ const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
12
+
13
+ class ArchibusStrategy extends IntegrationStrategy {
14
+ constructor(config) {
15
+ super();
16
+ this.baseUrl = config.BaseUrl; // base URL for the API
17
+ this.apiKeyHeader = config.APIKeyHeader; // header to use for API key
18
+ this.apiKey = config.APIKey; // API key
19
+
20
+ const url = new URL(this.baseUrl);
21
+ this.host = url.host;
22
+
23
+ this.statusMap = config.StatusMap;
24
+ }
25
+
26
+ /**
27
+ * Gets the entity type for the integration
28
+ *
29
+ * @returns {String} The entity type for the integration
30
+ */
31
+ getEntityType = () => {
32
+ return "maintenance_Archibus";
33
+ };
34
+
35
+ /**
36
+ * Validates the integration
37
+ *
38
+ * @returns {Boolean} Whether the integration is valid
39
+ */
40
+ isValidIntegration = () => {
41
+ return true;
42
+ };
43
+
44
+ /**
45
+ * Gets the refresh interval for the Archibus system
46
+ *
47
+ * @returns {Number} The refresh interval in milliseconds
48
+ */
49
+ getRefreshInterval = () => {
50
+ return 15 * 60 * 1000; // 15 minutes
51
+ };
52
+
53
+ /**
54
+ * Creates a request from the Archibus system
55
+ *
56
+ * @param {Object} request - Request definition on Pluss
57
+ * @returns {Boolean} Whether the request was created on Archibus
58
+ */
59
+ createRequest = async (request) => {
60
+ const logId = log("Archibus:CreateRequest", "Start", request);
61
+ try {
62
+ const response = await axios({
63
+ method: "PUT",
64
+ url: `${this.baseUrl}/createWorkRequest`,
65
+ timeout: 15000,
66
+ headers: {
67
+ [this.apiKeyHeader]: this.apiKey,
68
+ "Content-Type": "application/json",
69
+ Host: this.host,
70
+ },
71
+ data: {
72
+ prob_type: "1.ON-SITE",
73
+ requestor: "PLUSSDEV",
74
+ description: `${request.title}${
75
+ _.isEmpty(request.description) ? "" : `\n\n${request.description}`
76
+ }${_.isEmpty(request.room) ? "" : `\n\nLocation: ${request.room}`}${
77
+ _.isEmpty(request.userName) ? "" : `\n\nName: ${request.userName}`
78
+ }${_.isEmpty(request.phone) ? "" : `\n\nPhone: ${request.phone}`}${
79
+ _.isEmpty(request.type) ? "" : `\n\nJob Type: ${request.type}`
80
+ }${
81
+ _.isEmpty(request.images)
82
+ ? ""
83
+ : `\n\nImages: ${request.images.join("\n")}`
84
+ }`,
85
+ site_id: "1001", //TODO need to do site mapping 2025 is WooloowareShores in prod
86
+ },
87
+ });
88
+ log("Archibus:CreateRequest", "Response", response.data, logId);
89
+
90
+ // Save the ID to external entities for future reference
91
+ await updateRef("externalentities", {
92
+ RowId: `${this.getEntityType()}_${response.data.wrId}`,
93
+ LastUpdated: moment().valueOf(),
94
+ EntityType: this.getEntityType(),
95
+ InternalId: request.id,
96
+ ExternalId: response.data.wrId,
97
+ TrackedData: {},
98
+ });
99
+
100
+ // Save the Archibus ID as the job number
101
+ await editRef("maintenance", "id", request.id, {
102
+ jobNo: response.data.wrId,
103
+ jobId: response.data.wrId + "",
104
+ });
105
+
106
+ // add images
107
+ if (!_.isEmpty(request.images)) {
108
+ const imagePromises = [];
109
+ request.images.forEach((url) => {
110
+ imagePromises.push(this.addFileToRequest(response.data.wrId, url));
111
+ });
112
+ await Promise.all(imagePromises);
113
+ }
114
+
115
+ // await this.addCommentToRequest(response.data.wrId, "Some Comment Test");
116
+
117
+ await this.addFileToRequest(
118
+ response.data.wrId,
119
+ "https://anglicare-prd-uploads.s3.ap-southeast-2.amazonaws.com/uploads/users/05c46825-636e-4397-a043-7a8ebfdb8b8f/public/79975be54c9dad01fd22210b00/serviceimage.jpeg"
120
+ );
121
+
122
+ return true;
123
+ } catch (e) {
124
+ log("Archibus:CreateRequest", "Error", e, logId);
125
+
126
+ // trigger another attempt
127
+ // editRef("maintenance", "id", request.id, {
128
+ // ExtCreateRetry: moment().valueOf(),
129
+ // });
130
+ }
131
+ return false;
132
+ };
133
+
134
+ /**
135
+ * Fetches a request from the Archibus system
136
+ *
137
+ * @param {String} externalId - Id of the request on the Archibus
138
+ * @returns {Object} The request as it exists on Archibus
139
+ */
140
+ getRequest = async (externalId) => {
141
+ const logId = log("Archibus:GetRequest", "Start", externalId);
142
+ try {
143
+ const response = await axios({
144
+ method: "GET",
145
+ url: `${this.baseUrl}/getWorkRequest/${externalId}`,
146
+ timeout: 15000,
147
+ headers: {
148
+ [this.apiKeyHeader]: this.apiKey,
149
+ "Content-Type": "application/json",
150
+ Host: this.host,
151
+ },
152
+ });
153
+ log("Archibus:GetRequest", "Response", response.data, logId);
154
+
155
+ return response.data;
156
+ } catch (e) {
157
+ log("Archibus:GetRequest", "Error", e, logId);
158
+ }
159
+ return null;
160
+ };
161
+
162
+ /**
163
+ * Refreshes a request from the Archibus system
164
+ *
165
+ * @param {String} requestId - Id of the request on Pluss.
166
+ * @param {String} externalId - Id of the request on Archibus.
167
+ * @param {Object} trackedData - The set of fields tracked.
168
+ * @returns {Boolean} Whether the request had any changes on Archibus.
169
+ */
170
+ refreshFromSource = async (requestId, externalId, trackedData) => {
171
+ const logId = log("Archibus:RefreshFromSource", "Start", {
172
+ requestId,
173
+ externalId,
174
+ trackedData,
175
+ });
176
+ const request = await this.getRequest(externalId);
177
+ if (!request) {
178
+ log("Archibus:RefreshFromSource", "Result:NoResponse", false, logId);
179
+ return false;
180
+ }
181
+
182
+ if (trackedData && trackedData.status === request.status) {
183
+ log("Archibus:RefreshFromSource", "Result:UnchangedStatus", false, logId);
184
+ // status has not changed
185
+ return false;
186
+ }
187
+
188
+ const statusToUse = this.statusMap[request.status];
189
+ log("Archibus:RefreshFromSource", "UpdatedStatus", statusToUse, logId);
190
+
191
+ if (statusToUse) {
192
+ let plussRequest = await getRef("maintenance", "id", requestId);
193
+ // check how the new status map to what is saved in Pluss
194
+
195
+ if (statusToUse.Status !== plussRequest.status) {
196
+ // save updated status
197
+
198
+ plussRequest = await editRef("maintenance", "id", requestId, {
199
+ status: statusToUse.Status,
200
+ });
201
+ log(
202
+ "Archibus:RefreshFromSource",
203
+ "SavedStatus",
204
+ statusToUse.Status,
205
+ logId
206
+ );
207
+
208
+ if (statusToUse.Notification) {
209
+ publishNotifications(
210
+ [plussRequest.userID],
211
+ "MaintenanceJobStatusChanged",
212
+ plussRequest.site,
213
+ plussRequest.id,
214
+ plussRequest,
215
+ true
216
+ );
217
+ }
218
+ }
219
+ }
220
+
221
+ // save tracked data
222
+ await editRef(
223
+ "externalentities",
224
+ "RowId",
225
+ `${this.getEntityType()}_${externalId}`,
226
+ {
227
+ TrackedData: {
228
+ status: request.status,
229
+ },
230
+ }
231
+ );
232
+
233
+ log("Archibus:RefreshFromSource", "Result", true, logId);
234
+ return true;
235
+ };
236
+
237
+ /**
238
+ * Adds a comment to a request in Archibus
239
+ *
240
+ * @param {Number} externalId - Id of the request on Archibus.
241
+ * @param {String} comment - Text to add to Archibus request.
242
+ * @param {moment.Moment} time - The time to save against the comment
243
+ */
244
+ addCommentToRequest = async (externalId, comment, time) => {
245
+ const logId = log("Archibus:AddComment", "Start", {
246
+ externalId,
247
+ comment,
248
+ time,
249
+ });
250
+ try {
251
+ // Format the time
252
+ const timeToUse = (time || moment()).format("YYYY-MM-DD hh:mm:ss");
253
+
254
+ // Generate the POST data
255
+ const postData = {
256
+ actionTime: timeToUse,
257
+ comments: comment,
258
+ wr_id: externalId,
259
+ };
260
+
261
+ log("Archibus:AddComment", "PostData", postData, logId);
262
+
263
+ // Save to Archibus
264
+ const response = await axios({
265
+ method: "POST",
266
+ url: `${this.baseUrl}/addCommentsToWRSteps`,
267
+ data: postData,
268
+ timeout: 15000,
269
+ headers: {
270
+ [this.apiKeyHeader]: this.apiKey,
271
+ "Content-Type": "application/json",
272
+ Host: this.host,
273
+ },
274
+ });
275
+
276
+ log("Archibus:AddComment", "ResponseStatus", response.status, logId);
277
+
278
+ return response;
279
+ } catch (error) {
280
+ log("Archibus:AddComment", "Error", error, logId);
281
+ }
282
+ return false;
283
+ };
284
+
285
+ /**
286
+ * Adds a file to a request in Archibus
287
+ *
288
+ * @param {Number} externalId - Id of the request on Archibus.
289
+ * @param {String} fileUrl - URL of the file to attach
290
+ * @param {moment.Moment} time - The time to save against the file
291
+ * @returns
292
+ */
293
+ addFileToRequest = async (externalId, fileUrl, time) => {
294
+ const logId = log("Archibus:AddFile", "Start", {
295
+ externalId,
296
+ fileUrl,
297
+ time,
298
+ });
299
+
300
+ // This endpoint is not currently functional. Instead, use the addCommentToRequest method to add a comment with the file URL.
301
+ return this.addCommentToRequest(externalId, fileUrl, time);
302
+
303
+ try {
304
+ // Download the file content from the URL
305
+ const fileResponse = await axios.get(fileUrl, {
306
+ responseType: "arraybuffer",
307
+ });
308
+ log("Archibus:AddFile", "GotFileResponse", fileResponse.status, logId);
309
+
310
+ // Encode the file content in base64
311
+ const fileContentBase64 = encode(fileResponse.data);
312
+ log("Archibus:AddFile", "EncodedFileResponse", true, logId);
313
+
314
+ // Extract file name from the URL
315
+ const fileName = fileUrl.split("/").pop();
316
+
317
+ // Format the time
318
+ const timeToUse = (time || moment()).format("YYYY-MM-DD hh:mm:ss");
319
+
320
+ // Generate the POST data
321
+ const postData = {
322
+ actionTime: timeToUse,
323
+ docName: fileName,
324
+ docUrl: "https://anglicare.plusscommunities.com/",
325
+ fileContent: fileContentBase64,
326
+ fileName: fileName,
327
+ wrId: externalId,
328
+ };
329
+
330
+ log("Archibus:AddFile", "PostData", postData, logId);
331
+
332
+ // Save to Archibus
333
+ const response = await axios({
334
+ method: "POST",
335
+ url: `${this.baseUrl}/addDocumentToWorkRequest`,
336
+ data: postData,
337
+ timeout: 60000,
338
+ headers: {
339
+ [this.apiKeyHeader]: this.apiKey,
340
+ "Content-Type": "application/json",
341
+ Host: this.host,
342
+ },
343
+ });
344
+
345
+ log("Archibus:AddFile", "ResponseStatus", response.status, logId);
346
+
347
+ return response;
348
+ } catch (error) {
349
+ log("Archibus:AddFile", "Error", error, logId);
350
+ }
351
+ return false;
352
+ };
353
+
354
+ /**
355
+ *
356
+ * @param {Object} request - Request definition on Pluss
357
+ * @returns {Boolean} Represents whether the actions were successful
358
+ */
359
+ onCompleteRequest = async (request) => {
360
+ const logId = log("Archibus:OnComplete", "Start", {
361
+ Id: request.id,
362
+ });
363
+ try {
364
+ // get external id
365
+ const externalEntityQuery = await indexQuery("externalentities", {
366
+ IndexName: "InternalIdIndex",
367
+ KeyConditionExpression:
368
+ "EntityType = :entityType AND InternalId = :internalId",
369
+ ExpressionAttributeValues: {
370
+ ":entityType": this.getEntityType(),
371
+ ":internalId": request.id,
372
+ },
373
+ });
374
+
375
+ log(
376
+ "Archibus:OnComplete",
377
+ "ExternalLength",
378
+ externalEntityQuery.Items.length,
379
+ logId
380
+ );
381
+ if (_.isEmpty(externalEntityQuery.Items)) {
382
+ return true;
383
+ }
384
+
385
+ const externalId = externalEntityQuery.Items[0].ExternalId;
386
+ log("Archibus:OnComplete", "ExternalId", externalId, logId);
387
+
388
+ // get comments
389
+ const commentsQuery = {
390
+ IndexName: "CommentsEntityIdIndex",
391
+ KeyConditionExpression: "EntityId = :groupId",
392
+ ExpressionAttributeValues: {
393
+ ":groupId": getRowId(request.id, "maintenance"),
394
+ },
395
+ };
396
+
397
+ const commentsQueryRes = await indexQuery("comments", commentsQuery);
398
+ const comments = commentsQueryRes.Items;
399
+ log("Archibus:OnComplete", "CommentsLength", comments.length, logId);
400
+
401
+ const promises = [];
402
+
403
+ // save history as a comment
404
+ if (!_.isEmpty(request.history)) {
405
+ const historyComment = _.map(request.history, (entry) => {
406
+ if (entry.EntryType === "assignment") {
407
+ return "";
408
+ }
409
+ const time = moment(Number.parseFloat(entry.timestamp + "")).format(
410
+ "D MMM YYYY HH:mm:ss"
411
+ );
412
+ const user = entry.user ? ` by ${entry.user.displayName}` : "";
413
+ return `${time}: Marked ${entry.status}${user}`;
414
+ }).join("\n");
415
+ promises.push(this.addCommentToRequest(externalId, historyComment));
416
+ }
417
+
418
+ // save history as a comment
419
+ if (!_.isEmpty(request.Notes)) {
420
+ // format comment to save
421
+ const notesComment = _.map(request.Notes, (entry) => {
422
+ const time = moment(Number.parseFloat(entry.Timestamp + "")).format(
423
+ "YYYY-MM-DD HH:mm:ss"
424
+ );
425
+ const user = entry.User ? entry.User.displayName : "Unknown User";
426
+ const note = entry.Note ? `Note: ${entry.Note}` : "No Note";
427
+ const attachments =
428
+ entry.Attachments && entry.Attachments.length > 0
429
+ ? `Attachments: ${entry.Attachments.map(
430
+ (att) => `${att.Title} (${att.Source})`
431
+ ).join(", ")}`
432
+ : "No Attachments";
433
+ return `${time} by ${user}\n${note}\n${attachments}`;
434
+ }).join("\n\n");
435
+ // save comment
436
+ promises.push(this.addCommentToRequest(externalId, notesComment));
437
+ }
438
+
439
+ // save comments to Archibus
440
+ comments.forEach((comment) => {
441
+ const commentText = `${comment.User.displayName}:\n\n${
442
+ comment.Comment
443
+ }${!_.isEmpty(comment.Image) ? `\n\nImage: ${comment.Image}` : ""}}`;
444
+ const commentTime = moment(comment.Timestamp);
445
+ promises.push(
446
+ this.addCommentToRequest(externalId, commentText, commentTime)
447
+ );
448
+ });
449
+
450
+ await Promise.all(promises);
451
+
452
+ return true;
453
+ } catch (error) {
454
+ log("Archibus:OnComplete", "Error", error.toString(), logId);
455
+ }
456
+ return false;
457
+ };
458
+ }
459
+
460
+ module.exports = ArchibusStrategy;
@@ -0,0 +1,22 @@
1
+ const getString = require("@plusscommunities/pluss-core-aws/db/strings/getString");
2
+ const { getRowId, log } = require("@plusscommunities/pluss-core-aws/helper");
3
+ const ArchibusStrategy = require("./archibus/ArchibusStrategy");
4
+ const IntegrationStrategy = require("./IntegrationStrategy");
5
+
6
+ exports.getStrategy = async (site) => {
7
+ let importConfig;
8
+ const logId = log("getStrategy", "Site", site);
9
+ try {
10
+ importConfig = await getString(
11
+ getRowId(site, "maintenanceintegration"),
12
+ "plussSpace"
13
+ );
14
+
15
+ switch (importConfig.Strategy) {
16
+ case "Archibus":
17
+ return new ArchibusStrategy(importConfig);
18
+ default:
19
+ return new IntegrationStrategy();
20
+ }
21
+ } catch (e) {}
22
+ };
package/jobChanged.js CHANGED
@@ -2,9 +2,41 @@ const { Marshaller } = require("@aws/dynamodb-auto-marshaller");
2
2
  const config = require("./config.json");
3
3
  const { init } = require("@plusscommunities/pluss-core-aws/config");
4
4
  const logUpdate = require("@plusscommunities/pluss-core-aws/db/strings/logUpdate");
5
+ const { getStrategy } = require("./integration");
6
+ const { log } = require("@plusscommunities/pluss-core-aws/helper");
5
7
 
6
8
  const marshaller = new Marshaller();
7
9
 
10
+ const pushRequestToIntegration = async (request) => {
11
+ const integrationStrategy = await getStrategy(request.site);
12
+ await integrationStrategy.createRequest(request);
13
+ };
14
+
15
+ const onCompletedRequest = async (request) => {
16
+ const integrationStrategy = await getStrategy(request.site);
17
+ await integrationStrategy.onCompleteRequest(request);
18
+ };
19
+
20
+ /**
21
+ * Checks for any necessary integration actions based on the change in the request data
22
+ * @param {Object} request The new request data
23
+ * @param {Object} prevRequest The previous request data
24
+ */
25
+ const checkIntegrationActions = async (request, prevRequest) => {
26
+ if (
27
+ request.ExtCreateRetry &&
28
+ request.ExtCreateRetry !== prevRequest.ExtCreateRetry
29
+ ) {
30
+ log("checkIntegrationActions", "Retrying", true);
31
+ await pushRequestToIntegration(request);
32
+ }
33
+
34
+ if (request.status === "Completed" && prevRequest.status !== "Completed") {
35
+ log("checkIntegrationActions", "CompletedRequest", true);
36
+ await onCompletedRequest(request);
37
+ }
38
+ };
39
+
8
40
  module.exports.jobChanged = (event, context, callback) => {
9
41
  init(config);
10
42
 
@@ -16,6 +48,8 @@ module.exports.jobChanged = (event, context, callback) => {
16
48
  console.log("Record: ", JSON.stringify(data));
17
49
 
18
50
  site = data.site;
51
+
52
+ pushRequestToIntegration(data);
19
53
  } else if (record.eventName == "MODIFY") {
20
54
  console.log("MODIFY");
21
55
  const data = marshaller.unmarshallItem(record.dynamodb.NewImage);
@@ -23,6 +57,8 @@ module.exports.jobChanged = (event, context, callback) => {
23
57
  console.log("New record: ", JSON.stringify(data));
24
58
  console.log("Old record: ", JSON.stringify(previousData));
25
59
 
60
+ checkIntegrationActions(data, previousData);
61
+
26
62
  site = data.site;
27
63
  } else if (record.eventName == "REMOVE") {
28
64
  console.log("REMOVE");
package/package-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-maintenance-aws",
3
- "version": "2.0.2",
3
+ "version": "2.0.3-archibus.1",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -1468,9 +1468,9 @@
1468
1468
  }
1469
1469
  },
1470
1470
  "@plusscommunities/pluss-core-aws": {
1471
- "version": "2.0.7",
1472
- "resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-2.0.7.tgz",
1473
- "integrity": "sha512-YcBbnQbeeGWzR+j2O85Yzdo0n3oxlP9WoitPriXdY8VMnSG0TEAx6wOFHsFhCftJ2kxelm2Gzm3x7G6LeuGBPw==",
1471
+ "version": "2.0.8-beta.0",
1472
+ "resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-2.0.8-beta.0.tgz",
1473
+ "integrity": "sha512-z3ToWOdOnqkOF3w3r8l+kUTQlVWi2763WCyXa7iME0BaIAkPQbf+3M+2AKeu+Nl8lkpNyrKLOu/tH5Gj91WfIQ==",
1474
1474
  "requires": {
1475
1475
  "@aws/dynamodb-auto-marshaller": "^0.7.1",
1476
1476
  "amazon-cognito-identity-js": "^2.0.19",
@@ -2045,6 +2045,11 @@
2045
2045
  "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
2046
2046
  "dev": true
2047
2047
  },
2048
+ "base64-arraybuffer": {
2049
+ "version": "1.0.2",
2050
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
2051
+ "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="
2052
+ },
2048
2053
  "base64-js": {
2049
2054
  "version": "1.5.1",
2050
2055
  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-maintenance-aws",
3
- "version": "2.0.2",
3
+ "version": "2.0.3-archibus.1",
4
4
  "description": "Extension package to enable maintenance on Pluss Communities Platform",
5
5
  "scripts": {
6
6
  "gc": "node ../../tools/gc ./",
@@ -18,10 +18,11 @@
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
20
  "@aws/dynamodb-auto-marshaller": "^0.7.1",
21
- "@plusscommunities/pluss-core-aws": "2.0.7",
21
+ "@plusscommunities/pluss-core-aws": "2.0.8-beta.0",
22
22
  "amazon-cognito-identity-js": "^2.0.19",
23
- "axios": "^1.6.8",
24
23
  "aws-sdk": "^2.1591.0",
24
+ "axios": "^1.6.8",
25
+ "base64-arraybuffer": "^1.0.2",
25
26
  "expo-server-sdk": "^3.0.1",
26
27
  "https": "^1.0.0",
27
28
  "lodash": "^4.17.10",
@@ -42,6 +43,8 @@
42
43
  },
43
44
  "files": [
44
45
  "db/*",
46
+ "integration/*",
47
+ "requests/*",
45
48
  "ticketing/*",
46
49
  "*.js",
47
50
  "package*.json"