@webiny/api-audit-logs 5.43.0-beta.1 → 5.43.0-beta.3
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/app/app.js +6 -7
- package/app/app.js.map +1 -1
- package/package.json +24 -24
- package/utils/getAuditConfig.js +6 -4
- package/utils/getAuditConfig.js.map +1 -1
- package/utils/compressor.d.ts +0 -11
- package/utils/compressor.js +0 -109
- package/utils/compressor.js.map +0 -1
package/app/app.js
CHANGED
|
@@ -5,7 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createApp = void 0;
|
|
7
7
|
var _contants = require("./contants");
|
|
8
|
-
var _compressor = require("../utils/compressor");
|
|
9
8
|
var _apiSecurity = require("@webiny/api-security");
|
|
10
9
|
const toDate = value => {
|
|
11
10
|
if (value instanceof Date) {
|
|
@@ -17,7 +16,7 @@ const toDate = value => {
|
|
|
17
16
|
return value;
|
|
18
17
|
}
|
|
19
18
|
};
|
|
20
|
-
const decompressData = async entry => {
|
|
19
|
+
const decompressData = async (entry, context) => {
|
|
21
20
|
if (!entry.data?.data) {
|
|
22
21
|
return entry;
|
|
23
22
|
}
|
|
@@ -26,7 +25,7 @@ const decompressData = async entry => {
|
|
|
26
25
|
data: {
|
|
27
26
|
...entry.data,
|
|
28
27
|
timestamp: toDate(entry.data.timestamp),
|
|
29
|
-
data: await
|
|
28
|
+
data: await context.compressor.decompress(JSON.parse(entry.data.data))
|
|
30
29
|
}
|
|
31
30
|
};
|
|
32
31
|
};
|
|
@@ -92,12 +91,12 @@ const createApp = () => {
|
|
|
92
91
|
storageId: "text@initiator",
|
|
93
92
|
label: "Initiator"
|
|
94
93
|
}],
|
|
95
|
-
onEntry: async entry => {
|
|
96
|
-
return decompressData(entry);
|
|
94
|
+
onEntry: async (entry, context) => {
|
|
95
|
+
return decompressData(entry, context);
|
|
97
96
|
},
|
|
98
|
-
onEntryList: async entries => {
|
|
97
|
+
onEntryList: async (entries, context) => {
|
|
99
98
|
return await Promise.all(entries.map(async entry => {
|
|
100
|
-
return decompressData(entry);
|
|
99
|
+
return decompressData(entry, context);
|
|
101
100
|
}));
|
|
102
101
|
},
|
|
103
102
|
onAnyRequest: async (context, action) => {
|
package/app/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_contants","require","
|
|
1
|
+
{"version":3,"names":["_contants","require","_apiSecurity","toDate","value","Date","decompressData","entry","context","data","timestamp","compressor","decompress","JSON","parse","createApp","name","AUDIT_LOGS_TYPE","apiName","fields","id","fieldId","type","storageId","label","settings","onEntry","onEntryList","entries","Promise","all","map","onAnyRequest","action","permissions","security","getPermissions","permission","NotAuthorizedError","message","exports"],"sources":["app.ts"],"sourcesContent":["import type { AcoContext } from \"@webiny/api-aco/types\";\nimport { IAcoAppRegisterParams, SearchRecord } from \"@webiny/api-aco/types\";\nimport { AUDIT_LOGS_TYPE } from \"./contants\";\nimport { NotAuthorizedError } from \"@webiny/api-security\";\n\nconst toDate = (value: string | Date) => {\n if (value instanceof Date) {\n return value;\n }\n try {\n return new Date(value);\n } catch {\n return value;\n }\n};\n\nconst decompressData = async (\n entry: SearchRecord<any>,\n context: Pick<AcoContext, \"compressor\">\n): Promise<SearchRecord<any>> => {\n if (!entry.data?.data) {\n return entry;\n }\n\n return {\n ...entry,\n data: {\n ...entry.data,\n timestamp: toDate(entry.data.timestamp),\n data: await context.compressor.decompress(JSON.parse(entry.data.data))\n }\n };\n};\n\nexport const createApp = (): IAcoAppRegisterParams => {\n return {\n name: AUDIT_LOGS_TYPE,\n apiName: \"AuditLogs\",\n fields: [\n {\n id: \"id\",\n fieldId: \"id\",\n type: \"text\",\n storageId: \"text@id\",\n label: \"ID\"\n },\n {\n id: \"message\",\n fieldId: \"message\",\n type: \"text\",\n storageId: \"text@message\",\n label: \"Message\"\n },\n {\n id: \"app\",\n fieldId: \"app\",\n type: \"text\",\n storageId: \"text@app\",\n label: \"App\"\n },\n {\n id: \"entity\",\n fieldId: \"entity\",\n type: \"text\",\n storageId: \"text@entity\",\n label: \"Entity\"\n },\n {\n id: \"entityId\",\n fieldId: \"entityId\",\n type: \"text\",\n storageId: \"text@entityId\",\n label: \"Entity ID\"\n },\n {\n id: \"action\",\n fieldId: \"action\",\n type: \"text\",\n storageId: \"text@action\",\n label: \"Action\"\n },\n {\n id: \"data\",\n fieldId: \"data\",\n type: \"text\",\n storageId: \"text@data\",\n label: \"Data\"\n },\n {\n id: \"timestamp\",\n fieldId: \"timestamp\",\n type: \"datetime\",\n settings: {\n type: \"dateTimeWithoutTimezone\"\n },\n storageId: \"datetime@timestamp\",\n label: \"Timestamp\"\n },\n {\n id: \"initiator\",\n fieldId: \"initiator\",\n type: \"text\",\n storageId: \"text@initiator\",\n label: \"Initiator\"\n }\n ],\n onEntry: async (entry, context) => {\n return decompressData(entry, context);\n },\n onEntryList: async (entries, context) => {\n return await Promise.all(\n entries.map(async entry => {\n return decompressData(entry, context);\n })\n );\n },\n onAnyRequest: async (context, action) => {\n const permissions = await context.security.getPermissions(\"al.*\");\n for (const permission of permissions) {\n if (permission.name === \"al.*\") {\n return;\n } else if (permission.name === `al.${action}`) {\n return;\n }\n }\n\n throw new NotAuthorizedError({\n message: \"You cannot access audit logs.\"\n });\n }\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-audit-logs",
|
|
3
|
-
"version": "5.43.0-beta.
|
|
3
|
+
"version": "5.43.0-beta.3",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -19,32 +19,32 @@
|
|
|
19
19
|
"directory": "dist"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@webiny/api-admin-users": "5.43.0-beta.
|
|
23
|
-
"@webiny/api-file-manager": "5.43.0-beta.
|
|
24
|
-
"@webiny/api-headless-cms": "5.43.0-beta.
|
|
25
|
-
"@webiny/api-i18n": "5.43.0-beta.
|
|
26
|
-
"@webiny/api-security": "5.43.0-beta.
|
|
27
|
-
"@webiny/api-tenancy": "5.43.0-beta.
|
|
28
|
-
"@webiny/api-wcp": "5.43.0-beta.
|
|
29
|
-
"@webiny/handler-aws": "5.43.0-beta.
|
|
30
|
-
"@webiny/handler-graphql": "5.43.0-beta.
|
|
31
|
-
"@webiny/plugins": "5.43.0-beta.
|
|
32
|
-
"@webiny/project-utils": "5.43.0-beta.
|
|
22
|
+
"@webiny/api-admin-users": "5.43.0-beta.3",
|
|
23
|
+
"@webiny/api-file-manager": "5.43.0-beta.3",
|
|
24
|
+
"@webiny/api-headless-cms": "5.43.0-beta.3",
|
|
25
|
+
"@webiny/api-i18n": "5.43.0-beta.3",
|
|
26
|
+
"@webiny/api-security": "5.43.0-beta.3",
|
|
27
|
+
"@webiny/api-tenancy": "5.43.0-beta.3",
|
|
28
|
+
"@webiny/api-wcp": "5.43.0-beta.3",
|
|
29
|
+
"@webiny/handler-aws": "5.43.0-beta.3",
|
|
30
|
+
"@webiny/handler-graphql": "5.43.0-beta.3",
|
|
31
|
+
"@webiny/plugins": "5.43.0-beta.3",
|
|
32
|
+
"@webiny/project-utils": "5.43.0-beta.3",
|
|
33
33
|
"graphql": "15.9.0",
|
|
34
34
|
"typescript": "5.3.3"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@webiny/api": "5.43.0-beta.
|
|
38
|
-
"@webiny/api-aco": "5.43.0-beta.
|
|
39
|
-
"@webiny/api-apw": "5.43.0-beta.
|
|
40
|
-
"@webiny/api-form-builder": "5.43.0-beta.
|
|
41
|
-
"@webiny/api-mailer": "5.43.0-beta.
|
|
42
|
-
"@webiny/api-page-builder": "5.43.0-beta.
|
|
43
|
-
"@webiny/api-page-builder-import-export": "5.43.0-beta.
|
|
44
|
-
"@webiny/error": "5.43.0-beta.
|
|
45
|
-
"@webiny/handler": "5.43.0-beta.
|
|
46
|
-
"@webiny/utils": "5.43.0-beta.
|
|
47
|
-
"@webiny/wcp": "5.43.0-beta.
|
|
37
|
+
"@webiny/api": "5.43.0-beta.3",
|
|
38
|
+
"@webiny/api-aco": "5.43.0-beta.3",
|
|
39
|
+
"@webiny/api-apw": "5.43.0-beta.3",
|
|
40
|
+
"@webiny/api-form-builder": "5.43.0-beta.3",
|
|
41
|
+
"@webiny/api-mailer": "5.43.0-beta.3",
|
|
42
|
+
"@webiny/api-page-builder": "5.43.0-beta.3",
|
|
43
|
+
"@webiny/api-page-builder-import-export": "5.43.0-beta.3",
|
|
44
|
+
"@webiny/error": "5.43.0-beta.3",
|
|
45
|
+
"@webiny/handler": "5.43.0-beta.3",
|
|
46
|
+
"@webiny/utils": "5.43.0-beta.3",
|
|
47
|
+
"@webiny/wcp": "5.43.0-beta.3"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "bb3de95f65a48bc7264719fcd2d78bf78749fc69"
|
|
50
50
|
}
|
package/utils/getAuditConfig.js
CHANGED
|
@@ -7,12 +7,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.getAuditConfig = void 0;
|
|
8
8
|
var _error = _interopRequireDefault(require("@webiny/error"));
|
|
9
9
|
var _utils = require("@webiny/utils");
|
|
10
|
-
var _compressor = require("./compressor");
|
|
11
10
|
const createAuditLog = async params => {
|
|
12
11
|
const {
|
|
13
12
|
app,
|
|
14
13
|
payload
|
|
15
14
|
} = params;
|
|
15
|
+
const compressor = app.context.compressor;
|
|
16
16
|
const payloadData = JSON.stringify(payload.data);
|
|
17
17
|
try {
|
|
18
18
|
const entry = {
|
|
@@ -29,11 +29,12 @@ const createAuditLog = async params => {
|
|
|
29
29
|
data: payloadData
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
|
+
const data = await compressor.compress(entry.data.data);
|
|
32
33
|
await app.search.create({
|
|
33
34
|
...entry,
|
|
34
35
|
data: {
|
|
35
36
|
...entry.data,
|
|
36
|
-
data:
|
|
37
|
+
data: JSON.stringify(data)
|
|
37
38
|
}
|
|
38
39
|
});
|
|
39
40
|
return entry;
|
|
@@ -50,6 +51,7 @@ const createOrMergeAuditLog = async params => {
|
|
|
50
51
|
payload,
|
|
51
52
|
delay
|
|
52
53
|
} = params;
|
|
54
|
+
const compressor = app.context.compressor;
|
|
53
55
|
// Get the latest audit log of this entry.
|
|
54
56
|
const [records] = await app.search.list({
|
|
55
57
|
where: {
|
|
@@ -68,7 +70,7 @@ const createOrMergeAuditLog = async params => {
|
|
|
68
70
|
|
|
69
71
|
// Check if the latest audit log is saved within delay range.
|
|
70
72
|
if (newLogDate - existingLogDate < delay * 1000) {
|
|
71
|
-
const existingLogData = await
|
|
73
|
+
const existingLogData = await compressor.decompress(existingLog.data);
|
|
72
74
|
// Update latest audit log with new "after" payload.
|
|
73
75
|
const beforePayloadData = JSON.parse(existingLogData?.data.data)?.before;
|
|
74
76
|
const afterPayloadData = payload.data?.after;
|
|
@@ -76,7 +78,7 @@ const createOrMergeAuditLog = async params => {
|
|
|
76
78
|
before: beforePayloadData,
|
|
77
79
|
after: afterPayloadData
|
|
78
80
|
}) : JSON.stringify(payload.data);
|
|
79
|
-
const data = await
|
|
81
|
+
const data = await compressor.compress(updatedPayloadData);
|
|
80
82
|
try {
|
|
81
83
|
await app.search.update(existingLog.id, {
|
|
82
84
|
data: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_error","_interopRequireDefault","require","_utils","
|
|
1
|
+
{"version":3,"names":["_error","_interopRequireDefault","require","_utils","createAuditLog","params","app","payload","compressor","context","payloadData","JSON","stringify","data","entry","id","mdbid","title","message","content","tags","type","location","folderId","compress","search","create","error","WebinyError","from","code","createOrMergeAuditLog","delay","records","list","where","entityId","initiator","limit","existingLog","existingLogDate","Date","parse","savedOn","newLogDate","timestamp","getTime","existingLogData","decompress","beforePayloadData","before","afterPayloadData","after","updatedPayloadData","update","getAuditConfig","audit","aco","security","console","log","identity","getIdentity","auditLogPayload","entity","action","getApp","newEntryDelay","exports"],"sources":["getAuditConfig.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { mdbid } from \"@webiny/utils\";\nimport { IAcoApp } from \"@webiny/api-aco/types\";\nimport { AuditAction, AuditLog, AuditLogsContext } from \"~/types\";\nimport type { GenericRecord } from \"@webiny/api/types\";\n\ninterface AuditLogPayload extends Omit<AuditLog, \"id\" | \"data\"> {\n data: Record<string, any>;\n}\n\ninterface CreateAuditLogParams {\n app: IAcoApp;\n payload: AuditLogPayload;\n}\n\nconst createAuditLog = async (params: CreateAuditLogParams) => {\n const { app, payload } = params;\n\n const compressor = app.context.compressor;\n\n const payloadData = JSON.stringify(payload.data);\n\n try {\n const entry = {\n id: mdbid(),\n title: payload.message,\n content: payload.message,\n tags: [],\n type: \"AuditLogs\",\n location: { folderId: \"root\" },\n data: {\n ...payload,\n data: payloadData\n }\n };\n const data = await compressor.compress(entry.data.data);\n await app.search.create({\n ...entry,\n data: {\n ...entry.data,\n data: JSON.stringify(data)\n }\n });\n return entry;\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while creating new audit log\",\n code: \"CREATE_AUDIT_LOG\"\n });\n }\n};\n\ninterface CreateOrMergeAuditLogParams {\n app: IAcoApp;\n payload: AuditLogPayload;\n delay: number;\n}\n\nconst createOrMergeAuditLog = async (params: CreateOrMergeAuditLogParams) => {\n const { app, payload, delay } = params;\n\n const compressor = app.context.compressor;\n // Get the latest audit log of this entry.\n const [records] = await app.search.list({\n where: {\n type: \"AuditLogs\",\n data: {\n entityId: payload.entityId,\n initiator: payload.initiator\n }\n },\n limit: 1\n });\n const existingLog = records?.[0];\n\n if (existingLog) {\n const existingLogDate = Date.parse(existingLog.savedOn);\n const newLogDate = payload.timestamp.getTime();\n\n // Check if the latest audit log is saved within delay range.\n if (newLogDate - existingLogDate < delay * 1000) {\n const existingLogData = (await compressor.decompress(\n existingLog.data\n )) as unknown as GenericRecord;\n // Update latest audit log with new \"after\" payload.\n const beforePayloadData = JSON.parse(existingLogData?.data.data)?.before;\n const afterPayloadData = payload.data?.after;\n const updatedPayloadData = beforePayloadData\n ? JSON.stringify({ before: beforePayloadData, after: afterPayloadData })\n : JSON.stringify(payload.data);\n\n const data = await compressor.compress(updatedPayloadData);\n try {\n await app.search.update(existingLog.id, {\n data: {\n ...payload,\n data\n }\n });\n\n return {\n ...existingLog,\n data: updatedPayloadData\n };\n } catch (error) {\n throw WebinyError.from(error, {\n message: \"Error while updating audit log\",\n code: \"UPDATE_AUDIT_LOG\"\n });\n }\n }\n }\n\n return createAuditLog(params);\n};\n\nexport const getAuditConfig = (audit: AuditAction) => {\n return async (\n message: string,\n data: Record<string, any>,\n entityId: string,\n context: AuditLogsContext\n ) => {\n const { aco, security } = context;\n\n if (!aco) {\n console.log(\"No ACO defined.\");\n return;\n }\n\n const identity = security.getIdentity();\n\n const auditLogPayload = {\n message,\n app: audit.app.app,\n entity: audit.entity.type,\n entityId,\n action: audit.action.type,\n data,\n timestamp: new Date(),\n initiator: identity?.id\n };\n\n const app = aco.getApp(\"AuditLogs\");\n const delay = audit.action.newEntryDelay;\n\n // Check if there is delay on audit log creation for this action.\n if (delay) {\n try {\n return await createOrMergeAuditLog({\n app,\n payload: auditLogPayload,\n delay\n });\n } catch {\n // Don't care at this point!\n } finally {\n return JSON.stringify({});\n }\n }\n return await createAuditLog({\n app,\n payload: auditLogPayload\n });\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
package/utils/compressor.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export interface OriginalData {
|
|
2
|
-
[key: string]: any;
|
|
3
|
-
}
|
|
4
|
-
export interface Compressor {
|
|
5
|
-
canCompress(data: any): boolean;
|
|
6
|
-
compress(data: any): Promise<string>;
|
|
7
|
-
canDecompress(data: string): boolean;
|
|
8
|
-
decompress(data: string): Promise<OriginalData | null>;
|
|
9
|
-
}
|
|
10
|
-
declare const compressor: Pick<Compressor, "compress" | "decompress">;
|
|
11
|
-
export { compressor };
|
package/utils/compressor.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.compressor = void 0;
|
|
7
|
-
var _gzip = require("@webiny/utils/compression/gzip");
|
|
8
|
-
const GZIP = "gzip";
|
|
9
|
-
const TO_STORAGE_ENCODING = "base64";
|
|
10
|
-
const FROM_STORAGE_ENCODING = "utf8";
|
|
11
|
-
const convertToBuffer = value => {
|
|
12
|
-
if (typeof value === "string") {
|
|
13
|
-
return Buffer.from(value, TO_STORAGE_ENCODING);
|
|
14
|
-
}
|
|
15
|
-
return value;
|
|
16
|
-
};
|
|
17
|
-
class GzipCompression {
|
|
18
|
-
canCompress(data) {
|
|
19
|
-
let compression;
|
|
20
|
-
try {
|
|
21
|
-
const result = JSON.parse(data);
|
|
22
|
-
if (!result?.compression) {
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
compression = result.compression;
|
|
26
|
-
} catch {
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* If already compressed, skip this.
|
|
31
|
-
*/
|
|
32
|
-
if (compression) {
|
|
33
|
-
if (compression !== "GZIP") {
|
|
34
|
-
console.log(`Data is compressed with "${compression}". Cannot compress again.`);
|
|
35
|
-
}
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
async compress(data) {
|
|
41
|
-
try {
|
|
42
|
-
const value = await (0, _gzip.compress)(JSON.stringify(data));
|
|
43
|
-
return JSON.stringify({
|
|
44
|
-
compression: GZIP,
|
|
45
|
-
value: value.toString(TO_STORAGE_ENCODING)
|
|
46
|
-
});
|
|
47
|
-
} catch (ex) {
|
|
48
|
-
console.log(`Could not compress given data.`, ex.message);
|
|
49
|
-
return data;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
canDecompress(data) {
|
|
53
|
-
let compression;
|
|
54
|
-
try {
|
|
55
|
-
const result = JSON.parse(data);
|
|
56
|
-
if (!result?.compression) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
compression = result.compression;
|
|
60
|
-
} catch {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
if (compression !== GZIP) {
|
|
64
|
-
console.log(`Could not decompress given data since its compression is not "${GZIP}". It is "${compression}".`);
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
async decompress(data) {
|
|
70
|
-
let compressedValue;
|
|
71
|
-
try {
|
|
72
|
-
const result = JSON.parse(data);
|
|
73
|
-
if (!result.value) {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
compressedValue = result.value;
|
|
77
|
-
} catch {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
try {
|
|
81
|
-
const buf = await (0, _gzip.decompress)(convertToBuffer(compressedValue));
|
|
82
|
-
const value = buf.toString(FROM_STORAGE_ENCODING);
|
|
83
|
-
return JSON.parse(value);
|
|
84
|
-
} catch (ex) {
|
|
85
|
-
console.log(`Could not decompress given data.`, ex.message);
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const createCompressor = () => {
|
|
91
|
-
const instance = new GzipCompression();
|
|
92
|
-
return {
|
|
93
|
-
compress: async data => {
|
|
94
|
-
if (!instance.canCompress(data)) {
|
|
95
|
-
return data;
|
|
96
|
-
}
|
|
97
|
-
return instance.compress(data);
|
|
98
|
-
},
|
|
99
|
-
decompress(data) {
|
|
100
|
-
if (!instance.canDecompress(data)) {
|
|
101
|
-
return data;
|
|
102
|
-
}
|
|
103
|
-
return instance.decompress(data);
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
const compressor = exports.compressor = createCompressor();
|
|
108
|
-
|
|
109
|
-
//# sourceMappingURL=compressor.js.map
|
package/utils/compressor.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["_gzip","require","GZIP","TO_STORAGE_ENCODING","FROM_STORAGE_ENCODING","convertToBuffer","value","Buffer","from","GzipCompression","canCompress","data","compression","result","JSON","parse","console","log","compress","gzip","stringify","toString","ex","message","canDecompress","decompress","compressedValue","buf","ungzip","createCompressor","instance","compressor","exports"],"sources":["compressor.ts"],"sourcesContent":["import { compress as gzip, decompress as ungzip } from \"@webiny/utils/compression/gzip\";\n\nconst GZIP = \"gzip\";\nconst TO_STORAGE_ENCODING = \"base64\";\nconst FROM_STORAGE_ENCODING = \"utf8\";\n\nconst convertToBuffer = (value: string | Buffer) => {\n if (typeof value === \"string\") {\n return Buffer.from(value, TO_STORAGE_ENCODING);\n }\n return value;\n};\n\nexport interface OriginalData {\n [key: string]: any;\n}\n\nexport interface Compressor {\n canCompress(data: any): boolean;\n compress(data: any): Promise<string>;\n canDecompress(data: string): boolean;\n decompress(data: string): Promise<OriginalData | null>;\n}\n\nclass GzipCompression implements Compressor {\n public canCompress(data: any): boolean {\n let compression: string | undefined;\n try {\n const result = JSON.parse(data);\n if (!result?.compression) {\n return true;\n }\n compression = result.compression;\n } catch {\n return true;\n }\n /**\n * If already compressed, skip this.\n */\n if (compression) {\n if (compression !== \"GZIP\") {\n console.log(`Data is compressed with \"${compression}\". Cannot compress again.`);\n }\n return false;\n }\n return true;\n }\n public async compress(data: any) {\n try {\n const value = await gzip(JSON.stringify(data));\n\n return JSON.stringify({\n compression: GZIP,\n value: value.toString(TO_STORAGE_ENCODING)\n });\n } catch (ex) {\n console.log(`Could not compress given data.`, ex.message);\n return data;\n }\n }\n\n public canDecompress(data: string): boolean {\n let compression: string;\n try {\n const result = JSON.parse(data);\n if (!result?.compression) {\n return false;\n }\n compression = result.compression;\n } catch {\n return false;\n }\n if (compression !== GZIP) {\n console.log(\n `Could not decompress given data since its compression is not \"${GZIP}\". It is \"${compression}\".`\n );\n return false;\n }\n return true;\n }\n\n public async decompress(data: string): Promise<OriginalData | null> {\n let compressedValue: string;\n try {\n const result = JSON.parse(data);\n if (!result.value) {\n return null;\n }\n compressedValue = result.value;\n } catch {\n return null;\n }\n try {\n const buf = await ungzip(convertToBuffer(compressedValue));\n const value = buf.toString(FROM_STORAGE_ENCODING);\n return JSON.parse(value);\n } catch (ex) {\n console.log(`Could not decompress given data.`, ex.message);\n return null;\n }\n }\n}\n\nconst createCompressor = (): Pick<Compressor, \"compress\" | \"decompress\"> => {\n const instance = new GzipCompression();\n\n return {\n compress: async (data: any) => {\n if (!instance.canCompress(data)) {\n return data;\n }\n return instance.compress(data);\n },\n decompress(data: any) {\n if (!instance.canDecompress(data)) {\n return data;\n }\n return instance.decompress(data);\n }\n };\n};\n\nconst compressor = createCompressor();\n\nexport { compressor };\n"],"mappings":"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","ignoreList":[]}
|