@volontariapp/messaging 2.18.0-snap-9c4e6e9 → 2.18.0-snap-376f6c8
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/CHANGELOG.md +1 -1
- package/dist/events/storage/payloads.d.ts +15 -13
- package/dist/events/storage/payloads.d.ts.map +1 -1
- package/dist/events/storage/payloads.js +13 -15
- package/dist/events/storage/payloads.js.map +1 -1
- package/dist/test/storage-messaging.unit.spec.js +32 -2
- package/dist/test/storage-messaging.unit.spec.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
-
- Add the storage messaging domain: jobs `storage.scan_file` and `storage.cleanup_files` on `storage-queue`, events `storage.file_scanned`, `storage.file_rejected` and `storage.attachment_rejected` with their payloads, registered in `JobRegistry` and `EventRegistry`.
|
|
7
|
+
- Add the storage messaging domain: jobs `storage.scan_file` and `storage.cleanup_files` on `storage-queue`, events `storage.file_scanned`, `storage.file_rejected` and `storage.attachment_rejected` with their payloads (`StorageEntityType` and `StorageFileRejectionReason` are literal unions, so the matching enums of `@volontariapp/domain-storage` are assignable to them without a cast), registered in `JobRegistry` and `EventRegistry`.
|
|
8
8
|
|
|
9
9
|
## 2.17.6
|
|
10
10
|
|
|
@@ -3,19 +3,21 @@ export declare enum StorageEventMessagingType {
|
|
|
3
3
|
FILE_REJECTED = "storage.file_rejected",
|
|
4
4
|
ATTACHMENT_REJECTED = "storage.attachment_rejected"
|
|
5
5
|
}
|
|
6
|
-
export declare
|
|
7
|
-
POST
|
|
8
|
-
USER_AVATAR
|
|
9
|
-
BADGE_ICON
|
|
10
|
-
EVENT_COVER
|
|
11
|
-
}
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
export declare const StorageEntityType: {
|
|
7
|
+
readonly POST: "POST";
|
|
8
|
+
readonly USER_AVATAR: "USER_AVATAR";
|
|
9
|
+
readonly BADGE_ICON: "BADGE_ICON";
|
|
10
|
+
readonly EVENT_COVER: "EVENT_COVER";
|
|
11
|
+
};
|
|
12
|
+
export type StorageEntityType = (typeof StorageEntityType)[keyof typeof StorageEntityType];
|
|
13
|
+
export declare const StorageFileRejectionReason: {
|
|
14
|
+
readonly SIZE_MISMATCH: "SIZE_MISMATCH";
|
|
15
|
+
readonly MIME_MISMATCH: "MIME_MISMATCH";
|
|
16
|
+
readonly MALWARE: "MALWARE";
|
|
17
|
+
readonly UNDECODABLE: "UNDECODABLE";
|
|
18
|
+
readonly SCAN_TIMEOUT: "SCAN_TIMEOUT";
|
|
19
|
+
};
|
|
20
|
+
export type StorageFileRejectionReason = (typeof StorageFileRejectionReason)[keyof typeof StorageFileRejectionReason];
|
|
19
21
|
export declare enum StorageAttachmentRejectionReason {
|
|
20
22
|
NOT_FOUND = "NOT_FOUND",
|
|
21
23
|
WRONG_ENTITY_TYPE = "WRONG_ENTITY_TYPE",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../src/events/storage/payloads.ts"],"names":[],"mappings":"AAAA,oBAAY,yBAAyB;IACnC,YAAY,yBAAyB;IACrC,aAAa,0BAA0B;IACvC,mBAAmB,gCAAgC;CACpD;
|
|
1
|
+
{"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../src/events/storage/payloads.ts"],"names":[],"mappings":"AAAA,oBAAY,yBAAyB;IACnC,YAAY,yBAAyB;IACrC,aAAa,0BAA0B;IACvC,mBAAmB,gCAAgC;CACpD;AAUD,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AACX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAM3F,eAAO,MAAM,0BAA0B;;;;;;CAM7B,CAAC;AACX,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,OAAO,0BAA0B,CAAC,CAAC;AAG/E,oBAAY,gCAAgC;IAC1C,SAAS,cAAc;IACvB,iBAAiB,sBAAsB;IACvC,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,MAAM,EAAE,0BAA0B,CAAC;CACpC;AAED,MAAM,WAAW,0BAA2B,SAAQ,yBAAyB;IAC3E,MAAM,EAAE,gCAAgC,CAAC;CAC1C"}
|
|
@@ -4,21 +4,19 @@ export var StorageEventMessagingType;
|
|
|
4
4
|
StorageEventMessagingType["FILE_REJECTED"] = "storage.file_rejected";
|
|
5
5
|
StorageEventMessagingType["ATTACHMENT_REJECTED"] = "storage.attachment_rejected";
|
|
6
6
|
})(StorageEventMessagingType || (StorageEventMessagingType = {}));
|
|
7
|
-
export
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
StorageFileRejectionReason["SCAN_TIMEOUT"] = "SCAN_TIMEOUT";
|
|
21
|
-
})(StorageFileRejectionReason || (StorageFileRejectionReason = {}));
|
|
7
|
+
export const StorageEntityType = {
|
|
8
|
+
POST: 'POST',
|
|
9
|
+
USER_AVATAR: 'USER_AVATAR',
|
|
10
|
+
BADGE_ICON: 'BADGE_ICON',
|
|
11
|
+
EVENT_COVER: 'EVENT_COVER',
|
|
12
|
+
};
|
|
13
|
+
export const StorageFileRejectionReason = {
|
|
14
|
+
SIZE_MISMATCH: 'SIZE_MISMATCH',
|
|
15
|
+
MIME_MISMATCH: 'MIME_MISMATCH',
|
|
16
|
+
MALWARE: 'MALWARE',
|
|
17
|
+
UNDECODABLE: 'UNDECODABLE',
|
|
18
|
+
SCAN_TIMEOUT: 'SCAN_TIMEOUT',
|
|
19
|
+
};
|
|
22
20
|
export var StorageAttachmentRejectionReason;
|
|
23
21
|
(function (StorageAttachmentRejectionReason) {
|
|
24
22
|
StorageAttachmentRejectionReason["NOT_FOUND"] = "NOT_FOUND";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../../src/events/storage/payloads.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACnC,kEAAqC,CAAA;IACrC,oEAAuC,CAAA;IACvC,gFAAmD,CAAA;AACrD,CAAC,EAJW,yBAAyB,KAAzB,yBAAyB,QAIpC;
|
|
1
|
+
{"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../../src/events/storage/payloads.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACnC,kEAAqC,CAAA;IACrC,oEAAuC,CAAA;IACvC,gFAAmD,CAAA;AACrD,CAAC,EAJW,yBAAyB,KAAzB,yBAAyB,QAIpC;AAUD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;CAClB,CAAC;AAOX,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;CACpB,CAAC;AAKX,MAAM,CAAN,IAAY,gCAMX;AAND,WAAY,gCAAgC;IAC1C,2DAAuB,CAAA;IACvB,2EAAuC,CAAA;IACvC,mEAA+B,CAAA;IAC/B,yEAAqC,CAAA;IACrC,yEAAqC,CAAA;AACvC,CAAC,EANW,gCAAgC,KAAhC,gCAAgC,QAM3C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from '@jest/globals';
|
|
2
|
-
import { EventMessagingType, JobMessagingType, StorageAttachmentRejectionReason, StorageEventMessagingType, StorageJobType, StorageQueue, } from '../index.js';
|
|
2
|
+
import { EventMessagingType, JobMessagingType, StorageAttachmentRejectionReason, StorageEntityType, StorageEventMessagingType, StorageFileRejectionReason, StorageJobType, StorageQueue, } from '../index.js';
|
|
3
3
|
import { buildAttachmentRejectedPayload, buildFileRejectedPayload, buildFileScannedPayload, buildScanFilePayload, } from './storage-messaging.factory.js';
|
|
4
4
|
describe('Storage messaging', () => {
|
|
5
5
|
describe('names', () => {
|
|
@@ -15,6 +15,23 @@ describe('Storage messaging', () => {
|
|
|
15
15
|
expect(StorageEventMessagingType.FILE_REJECTED).toBe('storage.file_rejected');
|
|
16
16
|
expect(StorageEventMessagingType.ATTACHMENT_REJECTED).toBe('storage.attachment_rejected');
|
|
17
17
|
});
|
|
18
|
+
it('should keep the entity types identical to domain-storage', () => {
|
|
19
|
+
expect(Object.values(StorageEntityType).sort()).toEqual([
|
|
20
|
+
'BADGE_ICON',
|
|
21
|
+
'EVENT_COVER',
|
|
22
|
+
'POST',
|
|
23
|
+
'USER_AVATAR',
|
|
24
|
+
]);
|
|
25
|
+
});
|
|
26
|
+
it('should keep the file rejection reasons identical to domain-storage', () => {
|
|
27
|
+
expect(Object.values(StorageFileRejectionReason).sort()).toEqual([
|
|
28
|
+
'MALWARE',
|
|
29
|
+
'MIME_MISMATCH',
|
|
30
|
+
'SCAN_TIMEOUT',
|
|
31
|
+
'SIZE_MISMATCH',
|
|
32
|
+
'UNDECODABLE',
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
18
35
|
it('should list the attachment rejection reasons of the contract', () => {
|
|
19
36
|
expect(Object.values(StorageAttachmentRejectionReason).sort()).toEqual([
|
|
20
37
|
'ALREADY_ATTACHED',
|
|
@@ -62,7 +79,20 @@ describe('Storage messaging', () => {
|
|
|
62
79
|
...buildAttachmentRejectedPayload(),
|
|
63
80
|
reason: 'UNKNOWN',
|
|
64
81
|
};
|
|
65
|
-
|
|
82
|
+
const badFileReason = {
|
|
83
|
+
...buildFileRejectedPayload(),
|
|
84
|
+
reason: 'UNKNOWN',
|
|
85
|
+
};
|
|
86
|
+
const badEntityType = {
|
|
87
|
+
...buildFileRejectedPayload(),
|
|
88
|
+
entityType: 'INVALID',
|
|
89
|
+
};
|
|
90
|
+
expect(missingFileId).toEqual({});
|
|
91
|
+
expect(extraField).toEqual({ fileId: 'file-1' });
|
|
92
|
+
expect(withOwner.fileId).toBe('file-1');
|
|
93
|
+
expect(badReason.reason).toBe('UNKNOWN');
|
|
94
|
+
expect(badFileReason.reason).toBe('UNKNOWN');
|
|
95
|
+
expect(badEntityType.entityType).toBe('INVALID');
|
|
66
96
|
});
|
|
67
97
|
});
|
|
68
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-messaging.unit.spec.js","sourceRoot":"","sources":["../../src/test/storage-messaging.unit.spec.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"storage-messaging.unit.spec.js","sourceRoot":"","sources":["../../src/test/storage-messaging.unit.spec.ts"],"names":[],"mappings":"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"}
|