@webiny/api-audit-logs 6.3.0 → 6.4.0-beta.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/abstractions.js +2 -3
- package/abstractions.js.map +1 -1
- package/config.js +2 -1
- package/config.js.map +1 -1
- package/context/AuditLogsContextValue.js +115 -125
- package/context/AuditLogsContextValue.js.map +1 -1
- package/context/index.js +21 -27
- package/context/index.js.map +1 -1
- package/events/AuditLogAfterCreateEvent.js +8 -5
- package/events/AuditLogAfterCreateEvent.js.map +1 -1
- package/events/AuditLogAfterUpdateEvent.js +8 -5
- package/events/AuditLogAfterUpdateEvent.js.map +1 -1
- package/events/AuditLogBeforeCreateEvent.js +8 -5
- package/events/AuditLogBeforeCreateEvent.js.map +1 -1
- package/events/AuditLogBeforeUpdateEvent.js +8 -5
- package/events/AuditLogBeforeUpdateEvent.js.map +1 -1
- package/events/abstractions.js +5 -24
- package/events/abstractions.js.map +1 -1
- package/events/index.js +0 -2
- package/graphql/schema.js +37 -48
- package/graphql/schema.js.map +1 -1
- package/graphql/validation.d.ts +3 -3
- package/graphql/validation.js +26 -30
- package/graphql/validation.js.map +1 -1
- package/index.js +18 -15
- package/index.js.map +1 -1
- package/package.json +26 -26
- package/storage/AccessPatternHandler.js +31 -52
- package/storage/AccessPatternHandler.js.map +1 -1
- package/storage/Converter.js +45 -48
- package/storage/Converter.js.map +1 -1
- package/storage/Storage.js +69 -77
- package/storage/Storage.js.map +1 -1
- package/storage/abstractions/AccessPattern.js +0 -3
- package/storage/abstractions/AccessPatternHandler.js +0 -3
- package/storage/abstractions/Converter.js +0 -3
- package/storage/abstractions/Storage.js +0 -3
- package/storage/accessPatterns/AppAccessPattern.js +31 -25
- package/storage/accessPatterns/AppAccessPattern.js.map +1 -1
- package/storage/accessPatterns/AppCreatedByAccessPattern.js +34 -28
- package/storage/accessPatterns/AppCreatedByAccessPattern.js.map +1 -1
- package/storage/accessPatterns/AppEntityAccessPattern.js +31 -25
- package/storage/accessPatterns/AppEntityAccessPattern.js.map +1 -1
- package/storage/accessPatterns/AppEntityActionAccessPattern.js +31 -25
- package/storage/accessPatterns/AppEntityActionAccessPattern.js.map +1 -1
- package/storage/accessPatterns/AppEntityActionCreatedByAccessPattern.js +34 -28
- package/storage/accessPatterns/AppEntityActionCreatedByAccessPattern.js.map +1 -1
- package/storage/accessPatterns/AppEntityCreatedByAccessPattern.js +34 -28
- package/storage/accessPatterns/AppEntityCreatedByAccessPattern.js.map +1 -1
- package/storage/accessPatterns/BaseAccessPattern.js +47 -70
- package/storage/accessPatterns/BaseAccessPattern.js.map +1 -1
- package/storage/accessPatterns/CreatedByAccessPattern.js +34 -28
- package/storage/accessPatterns/CreatedByAccessPattern.js.map +1 -1
- package/storage/accessPatterns/CreatedOnAccessPattern.js +34 -26
- package/storage/accessPatterns/CreatedOnAccessPattern.js.map +1 -1
- package/storage/accessPatterns/DefaultAccessPattern.js +31 -32
- package/storage/accessPatterns/DefaultAccessPattern.js.map +1 -1
- package/storage/accessPatterns/EntityIdAccessPattern.js +32 -27
- package/storage/accessPatterns/EntityIdAccessPattern.js.map +1 -1
- package/storage/accessPatterns/index.js +44 -34
- package/storage/accessPatterns/index.js.map +1 -1
- package/storage/cursorSchema.js +15 -18
- package/storage/cursorSchema.js.map +1 -1
- package/storage/entity.js +115 -122
- package/storage/entity.js.map +1 -1
- package/storage/results/ListErrorResult.js +9 -8
- package/storage/results/ListErrorResult.js.map +1 -1
- package/storage/results/ListSuccessResult.js +13 -12
- package/storage/results/ListSuccessResult.js.map +1 -1
- package/storage/results/index.js +0 -2
- package/storage/startKey.js +4 -5
- package/storage/startKey.js.map +1 -1
- package/storage/types.js +0 -3
- package/subscriptions/aco/handlers/AuditLogFolderAfterCreateHandler.js +26 -25
- package/subscriptions/aco/handlers/AuditLogFolderAfterCreateHandler.js.map +1 -1
- package/subscriptions/aco/handlers/AuditLogFolderAfterDeleteHandler.js +29 -28
- package/subscriptions/aco/handlers/AuditLogFolderAfterDeleteHandler.js.map +1 -1
- package/subscriptions/aco/handlers/AuditLogFolderAfterUpdateHandler.js +32 -32
- package/subscriptions/aco/handlers/AuditLogFolderAfterUpdateHandler.js.map +1 -1
- package/subscriptions/aco/index.js +5 -4
- package/subscriptions/aco/index.js.map +1 -1
- package/subscriptions/fileManager/handlers/AuditLogFileAfterCreateHandler.js +21 -20
- package/subscriptions/fileManager/handlers/AuditLogFileAfterCreateHandler.js.map +1 -1
- package/subscriptions/fileManager/handlers/AuditLogFileAfterDeleteHandler.js +21 -20
- package/subscriptions/fileManager/handlers/AuditLogFileAfterDeleteHandler.js.map +1 -1
- package/subscriptions/fileManager/handlers/AuditLogFileAfterUpdateHandler.js +24 -24
- package/subscriptions/fileManager/handlers/AuditLogFileAfterUpdateHandler.js.map +1 -1
- package/subscriptions/fileManager/handlers/AuditLogSettingsAfterUpdateHandler.js +24 -24
- package/subscriptions/fileManager/handlers/AuditLogSettingsAfterUpdateHandler.js.map +1 -1
- package/subscriptions/fileManager/index.js +6 -8
- package/subscriptions/fileManager/index.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterCreateEventHandler.js +21 -23
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterCreateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterDeleteEventHandler.js +26 -29
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterDeleteEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterPublishEventHandler.js +21 -23
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterPublishEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterRestoreFromBinEventHandler.js +21 -23
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterRestoreFromBinEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterUnpublishEventHandler.js +21 -23
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterUnpublishEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterUpdateEventHandler.js +24 -27
- package/subscriptions/headlessCms/handlers/AuditLogEntryAfterUpdateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryRevisionAfterCreateEventHandler.js +21 -23
- package/subscriptions/headlessCms/handlers/AuditLogEntryRevisionAfterCreateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogEntryRevisionAfterDeleteEventHandler.js +21 -23
- package/subscriptions/headlessCms/handlers/AuditLogEntryRevisionAfterDeleteEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogGroupAfterCreateEventHandler.js +21 -20
- package/subscriptions/headlessCms/handlers/AuditLogGroupAfterCreateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogGroupAfterDeleteEventHandler.js +21 -20
- package/subscriptions/headlessCms/handlers/AuditLogGroupAfterDeleteEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogGroupAfterUpdateEventHandler.js +24 -24
- package/subscriptions/headlessCms/handlers/AuditLogGroupAfterUpdateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogModelAfterCreateEventHandler.js +21 -20
- package/subscriptions/headlessCms/handlers/AuditLogModelAfterCreateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogModelAfterDeleteEventHandler.js +21 -20
- package/subscriptions/headlessCms/handlers/AuditLogModelAfterDeleteEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/handlers/AuditLogModelAfterUpdateEventHandler.js +24 -24
- package/subscriptions/headlessCms/handlers/AuditLogModelAfterUpdateEventHandler.js.map +1 -1
- package/subscriptions/headlessCms/index.js +16 -20
- package/subscriptions/headlessCms/index.js.map +1 -1
- package/subscriptions/index.js +8 -7
- package/subscriptions/index.js.map +1 -1
- package/subscriptions/mailer/handlers/AuditLogMailerSettingsAfterSaveHandler.js +23 -22
- package/subscriptions/mailer/handlers/AuditLogMailerSettingsAfterSaveHandler.js.map +1 -1
- package/subscriptions/mailer/index.js +3 -3
- package/subscriptions/mailer/index.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogApiKeyAfterCreateHandler.js +31 -37
- package/subscriptions/security/handlers/AuditLogApiKeyAfterCreateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogApiKeyAfterDeleteHandler.js +31 -37
- package/subscriptions/security/handlers/AuditLogApiKeyAfterDeleteHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogApiKeyAfterUpdateHandler.js +35 -42
- package/subscriptions/security/handlers/AuditLogApiKeyAfterUpdateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogRoleAfterCreateHandler.js +21 -20
- package/subscriptions/security/handlers/AuditLogRoleAfterCreateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogRoleAfterDeleteHandler.js +21 -20
- package/subscriptions/security/handlers/AuditLogRoleAfterDeleteHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogRoleAfterUpdateHandler.js +24 -24
- package/subscriptions/security/handlers/AuditLogRoleAfterUpdateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogTeamAfterCreateHandler.js +21 -20
- package/subscriptions/security/handlers/AuditLogTeamAfterCreateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogTeamAfterDeleteHandler.js +21 -20
- package/subscriptions/security/handlers/AuditLogTeamAfterDeleteHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogTeamAfterUpdateHandler.js +24 -24
- package/subscriptions/security/handlers/AuditLogTeamAfterUpdateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogUserAfterCreateHandler.js +21 -20
- package/subscriptions/security/handlers/AuditLogUserAfterCreateHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogUserAfterDeleteHandler.js +21 -20
- package/subscriptions/security/handlers/AuditLogUserAfterDeleteHandler.js.map +1 -1
- package/subscriptions/security/handlers/AuditLogUserAfterUpdateHandler.js +24 -24
- package/subscriptions/security/handlers/AuditLogUserAfterUpdateHandler.js.map +1 -1
- package/subscriptions/security/handlers/cleanupApiKey.js +10 -16
- package/subscriptions/security/handlers/cleanupApiKey.js.map +1 -1
- package/subscriptions/security/index.js +14 -20
- package/subscriptions/security/index.js.map +1 -1
- package/subscriptions/websiteBuilder/index.js +14 -16
- package/subscriptions/websiteBuilder/index.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterCreateHandler.js +20 -19
- package/subscriptions/websiteBuilder/pages/PageAfterCreateHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterCreateRevisionFromHandler.js +20 -19
- package/subscriptions/websiteBuilder/pages/PageAfterCreateRevisionFromHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterDeleteHandler.js +20 -19
- package/subscriptions/websiteBuilder/pages/PageAfterDeleteHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterDuplicateHandler.js +23 -23
- package/subscriptions/websiteBuilder/pages/PageAfterDuplicateHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterMoveHandler.js +20 -19
- package/subscriptions/websiteBuilder/pages/PageAfterMoveHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterPublishHandler.js +20 -19
- package/subscriptions/websiteBuilder/pages/PageAfterPublishHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterUnpublishHandler.js +20 -19
- package/subscriptions/websiteBuilder/pages/PageAfterUnpublishHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/pages/PageAfterUpdateHandler.js +23 -23
- package/subscriptions/websiteBuilder/pages/PageAfterUpdateHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/redirects/RedirectAfterCreateHandler.js +20 -19
- package/subscriptions/websiteBuilder/redirects/RedirectAfterCreateHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/redirects/RedirectAfterDeleteHandler.js +20 -19
- package/subscriptions/websiteBuilder/redirects/RedirectAfterDeleteHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/redirects/RedirectAfterMoveHandler.js +20 -19
- package/subscriptions/websiteBuilder/redirects/RedirectAfterMoveHandler.js.map +1 -1
- package/subscriptions/websiteBuilder/redirects/RedirectAfterUpdateHandler.js +23 -23
- package/subscriptions/websiteBuilder/redirects/RedirectAfterUpdateHandler.js.map +1 -1
- package/types.js +0 -3
- package/utils/expiresAt.js +14 -19
- package/utils/expiresAt.js.map +1 -1
- package/utils/getAuditConfig.js +79 -98
- package/utils/getAuditConfig.js.map +1 -1
- package/utils/getAuditObject.js +14 -15
- package/utils/getAuditObject.js.map +1 -1
- package/events/index.js.map +0 -1
- package/storage/abstractions/AccessPattern.js.map +0 -1
- package/storage/abstractions/AccessPatternHandler.js.map +0 -1
- package/storage/abstractions/Converter.js.map +0 -1
- package/storage/abstractions/Storage.js.map +0 -1
- package/storage/results/index.js.map +0 -1
- package/storage/types.js.map +0 -1
- package/types.js.map +0 -1
package/storage/Converter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"storage/Converter.js","sources":["../../src/storage/Converter.ts"],"sourcesContent":["import type { IConverter } from \"~/storage/abstractions/Converter.js\";\nimport type { IAuditLog, IStorageItem } from \"~/storage/types.js\";\nimport type { IAccessPatternHandler } from \"~/storage/abstractions/AccessPatternHandler.js\";\nimport { convertExpiresAtToUnixTimestamp } from \"~/utils/expiresAt.js\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nconst convertToDateTime = (value: string): Date => {\n return new Date(value);\n};\n\nexport interface IConverterParams {\n compressionHandler: CompressionHandler.Interface;\n patternHandler: IAccessPatternHandler;\n}\n\ntype PickOnlyGSIKeys<T> = {\n [K in keyof T]: K extends `GSI${string}` ? K : never;\n}[keyof T];\n\ntype PickedGSIKeys = Pick<IStorageItem, PickOnlyGSIKeys<IStorageItem>>;\n\nexport class Converter implements IConverter {\n private readonly compressionHandler;\n private readonly patternHandler;\n\n public constructor(params: IConverterParams) {\n this.compressionHandler = params.compressionHandler;\n this.patternHandler = params.patternHandler;\n }\n\n public async oneFromStorage(item: IStorageItem): Promise<IAuditLog> {\n return {\n ...item.data,\n expiresAt: convertToDateTime(item.data.expiresAt),\n content: await this.compressionHandler.decompress(JSON.parse(item.data.content)),\n createdOn: new Date(item.data.createdOn)\n };\n }\n\n public async listFromStorage(items: IStorageItem[]): Promise<IAuditLog[]> {\n return await Promise.all(\n items.map(async item => {\n return await this.oneFromStorage(item);\n })\n );\n }\n\n public async oneToStorage(auditLog: IAuditLog): Promise<IStorageItem> {\n const defaultPattern = this.patternHandler.getDefaultPattern();\n\n const defaultKeys = defaultPattern.createKeys(auditLog);\n\n const patterns = this.patternHandler.listIndexPatterns();\n\n const keys = patterns.reduce<PickedGSIKeys>((output, pattern) => {\n const patternKeys = pattern.createKeys(auditLog);\n return {\n ...output,\n [`${pattern.index}_PK`]: patternKeys.partitionKey,\n [`${pattern.index}_SK`]: patternKeys.sortKey\n };\n }, {} as PickedGSIKeys);\n\n return {\n PK: defaultKeys.partitionKey,\n SK: defaultKeys.sortKey as unknown as string,\n ...keys,\n TYPE: \"auditLog.log\",\n GSI_TENANT: auditLog.tenant,\n data: {\n ...auditLog,\n expiresAt: auditLog.expiresAt.toISOString(),\n content: JSON.stringify(await this.compressionHandler.compress(auditLog.content)),\n createdOn: auditLog.createdOn.toISOString()\n },\n expiresAt: convertExpiresAtToUnixTimestamp(auditLog.expiresAt)\n };\n }\n}\n"],"names":["convertToDateTime","value","Date","Converter","params","item","JSON","items","Promise","auditLog","defaultPattern","defaultKeys","patterns","keys","output","pattern","patternKeys","convertExpiresAtToUnixTimestamp"],"mappings":";AAMA,MAAMA,oBAAoB,CAACC,QAChB,IAAIC,KAAKD;AAcb,MAAME;IAIT,YAAmBC,MAAwB,CAAE;QACzC,IAAI,CAAC,kBAAkB,GAAGA,OAAO,kBAAkB;QACnD,IAAI,CAAC,cAAc,GAAGA,OAAO,cAAc;IAC/C;IAEA,MAAa,eAAeC,IAAkB,EAAsB;QAChE,OAAO;YACH,GAAGA,KAAK,IAAI;YACZ,WAAWL,kBAAkBK,KAAK,IAAI,CAAC,SAAS;YAChD,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAACC,KAAK,KAAK,CAACD,KAAK,IAAI,CAAC,OAAO;YAC9E,WAAW,IAAIH,KAAKG,KAAK,IAAI,CAAC,SAAS;QAC3C;IACJ;IAEA,MAAa,gBAAgBE,KAAqB,EAAwB;QACtE,OAAO,MAAMC,QAAQ,GAAG,CACpBD,MAAM,GAAG,CAAC,OAAMF,OACL,MAAM,IAAI,CAAC,cAAc,CAACA;IAG7C;IAEA,MAAa,aAAaI,QAAmB,EAAyB;QAClE,MAAMC,iBAAiB,IAAI,CAAC,cAAc,CAAC,iBAAiB;QAE5D,MAAMC,cAAcD,eAAe,UAAU,CAACD;QAE9C,MAAMG,WAAW,IAAI,CAAC,cAAc,CAAC,iBAAiB;QAEtD,MAAMC,OAAOD,SAAS,MAAM,CAAgB,CAACE,QAAQC;YACjD,MAAMC,cAAcD,QAAQ,UAAU,CAACN;YACvC,OAAO;gBACH,GAAGK,MAAM;gBACT,CAAC,GAAGC,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,EAAEC,YAAY,YAAY;gBACjD,CAAC,GAAGD,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,EAAEC,YAAY,OAAO;YAChD;QACJ,GAAG,CAAC;QAEJ,OAAO;YACH,IAAIL,YAAY,YAAY;YAC5B,IAAIA,YAAY,OAAO;YACvB,GAAGE,IAAI;YACP,MAAM;YACN,YAAYJ,SAAS,MAAM;YAC3B,MAAM;gBACF,GAAGA,QAAQ;gBACX,WAAWA,SAAS,SAAS,CAAC,WAAW;gBACzC,SAASH,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAACG,SAAS,OAAO;gBAC/E,WAAWA,SAAS,SAAS,CAAC,WAAW;YAC7C;YACA,WAAWQ,gCAAgCR,SAAS,SAAS;QACjE;IACJ;AACJ"}
|
package/storage/Storage.js
CHANGED
|
@@ -3,87 +3,79 @@ import { Converter } from "./Converter.js";
|
|
|
3
3
|
import { createAccessPatterns } from "./accessPatterns/index.js";
|
|
4
4
|
import { AccessPatternHandler } from "./AccessPatternHandler.js";
|
|
5
5
|
import { ListSuccessResult } from "./results/index.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
6
|
+
class Storage {
|
|
7
|
+
constructor(params){
|
|
8
|
+
const { entity } = createEntity({
|
|
9
|
+
client: params.client,
|
|
10
|
+
tableName: params.tableName,
|
|
11
|
+
gsiAmount: 10
|
|
12
|
+
});
|
|
13
|
+
this.entity = entity;
|
|
14
|
+
const patterns = createAccessPatterns({
|
|
15
|
+
entity
|
|
16
|
+
});
|
|
17
|
+
this.patternHandler = new AccessPatternHandler({
|
|
18
|
+
patterns
|
|
19
|
+
});
|
|
20
|
+
this.converter = new Converter({
|
|
21
|
+
compressionHandler: params.compressionHandler,
|
|
22
|
+
patternHandler: this.patternHandler
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
async fetch(params) {
|
|
26
|
+
const { id, tenant } = params;
|
|
27
|
+
try {
|
|
28
|
+
const result = await this.entity.get({
|
|
29
|
+
PK: `T#${tenant}#AUDIT_LOG`,
|
|
30
|
+
SK: `${id}`
|
|
31
|
+
});
|
|
32
|
+
if (!result) return {
|
|
33
|
+
error: new Error(`Audit log entry "${id}" not found.`),
|
|
34
|
+
success: false
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
data: await this.converter.oneFromStorage(result),
|
|
38
|
+
success: true
|
|
39
|
+
};
|
|
40
|
+
} catch (ex) {
|
|
41
|
+
return {
|
|
42
|
+
error: ex,
|
|
43
|
+
success: false
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async store(params) {
|
|
48
|
+
const auditLog = structuredClone(params.data);
|
|
49
|
+
try {
|
|
50
|
+
const item = await this.converter.oneToStorage(auditLog);
|
|
51
|
+
await this.entity.put(item);
|
|
52
|
+
} catch (ex) {
|
|
53
|
+
return {
|
|
54
|
+
error: ex,
|
|
55
|
+
success: false
|
|
56
|
+
};
|
|
57
|
+
}
|
|
38
58
|
return {
|
|
39
|
-
|
|
40
|
-
|
|
59
|
+
success: true,
|
|
60
|
+
data: auditLog
|
|
41
61
|
};
|
|
42
|
-
}
|
|
43
|
-
return {
|
|
44
|
-
data: await this.converter.oneFromStorage(result),
|
|
45
|
-
success: true
|
|
46
|
-
};
|
|
47
|
-
} catch (ex) {
|
|
48
|
-
return {
|
|
49
|
-
error: ex,
|
|
50
|
-
success: false
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
async store(params) {
|
|
55
|
-
const auditLog = structuredClone(params.data);
|
|
56
|
-
try {
|
|
57
|
-
const item = await this.converter.oneToStorage(auditLog);
|
|
58
|
-
await this.entity.put(item);
|
|
59
|
-
} catch (ex) {
|
|
60
|
-
return {
|
|
61
|
-
error: ex,
|
|
62
|
-
success: false
|
|
63
|
-
};
|
|
64
62
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return {
|
|
79
|
-
error: ex,
|
|
80
|
-
success: false
|
|
81
|
-
};
|
|
63
|
+
async list(params) {
|
|
64
|
+
try {
|
|
65
|
+
const result = await this.patternHandler.handle(params);
|
|
66
|
+
return ListSuccessResult.create({
|
|
67
|
+
data: await this.converter.listFromStorage(result.items),
|
|
68
|
+
lastEvaluatedKey: result.lastEvaluatedKey
|
|
69
|
+
});
|
|
70
|
+
} catch (ex) {
|
|
71
|
+
return {
|
|
72
|
+
error: ex,
|
|
73
|
+
success: false
|
|
74
|
+
};
|
|
75
|
+
}
|
|
82
76
|
}
|
|
83
|
-
}
|
|
84
77
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
};
|
|
78
|
+
const createStorage = (params)=>new Storage(params);
|
|
79
|
+
export { Storage, createStorage };
|
|
88
80
|
|
|
89
81
|
//# sourceMappingURL=Storage.js.map
|
package/storage/Storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"storage/Storage.js","sources":["../../src/storage/Storage.ts"],"sourcesContent":["import type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { createEntity } from \"~/storage/entity.js\";\nimport type {\n IStorage,\n IStorageFetchParams,\n IStorageFetchResult,\n IStorageListParams,\n IStorageListResult,\n IStorageStoreParams,\n IStorageStoreResult\n} from \"~/storage/abstractions/Storage.js\";\nimport { Converter } from \"~/storage/Converter.js\";\nimport { createAccessPatterns } from \"~/storage/accessPatterns/index.js\";\nimport { AccessPatternHandler } from \"~/storage/AccessPatternHandler.js\";\nimport { ListSuccessResult } from \"~/storage/results/index.js\";\nimport { CompressionHandler } from \"@webiny/utils/exports/api.js\";\n\nexport interface IStorageParams {\n compressionHandler: CompressionHandler.Interface;\n client: DynamoDBDocument;\n tableName: string | undefined;\n}\n\nexport class Storage implements IStorage {\n private readonly entity;\n private readonly converter;\n private readonly patternHandler;\n\n public constructor(params: IStorageParams) {\n const { entity } = createEntity({\n client: params.client,\n tableName: params.tableName,\n gsiAmount: 10\n });\n\n this.entity = entity;\n\n const patterns = createAccessPatterns({\n entity\n });\n this.patternHandler = new AccessPatternHandler({\n patterns\n });\n\n this.converter = new Converter({\n compressionHandler: params.compressionHandler,\n patternHandler: this.patternHandler\n });\n }\n\n public async fetch(params: IStorageFetchParams): Promise<IStorageFetchResult> {\n const { id, tenant } = params;\n\n try {\n const result = await this.entity.get({\n PK: `T#${tenant}#AUDIT_LOG`,\n SK: `${id}`\n });\n if (!result) {\n return {\n error: new Error(`Audit log entry \"${id}\" not found.`),\n success: false\n };\n }\n return {\n data: await this.converter.oneFromStorage(result),\n success: true\n };\n } catch (ex) {\n return {\n error: ex,\n success: false\n };\n }\n }\n\n public async store(params: IStorageStoreParams): Promise<IStorageStoreResult> {\n const auditLog = structuredClone(params.data);\n\n try {\n const item = await this.converter.oneToStorage(auditLog);\n await this.entity.put(item);\n } catch (ex) {\n return {\n error: ex,\n success: false\n };\n }\n\n return {\n success: true,\n data: auditLog\n };\n }\n\n public async list(params: IStorageListParams): Promise<IStorageListResult> {\n try {\n const result = await this.patternHandler.handle(params);\n\n return ListSuccessResult.create({\n data: await this.converter.listFromStorage(result.items),\n lastEvaluatedKey: result.lastEvaluatedKey\n });\n } catch (ex) {\n return {\n error: ex,\n success: false\n };\n }\n }\n}\n\nexport const createStorage = (params: IStorageParams): IStorage => {\n return new Storage(params);\n};\n"],"names":["Storage","params","entity","createEntity","patterns","createAccessPatterns","AccessPatternHandler","Converter","id","tenant","result","Error","ex","auditLog","structuredClone","item","ListSuccessResult","createStorage"],"mappings":";;;;;AAuBO,MAAMA;IAKT,YAAmBC,MAAsB,CAAE;QACvC,MAAM,EAAEC,MAAM,EAAE,GAAGC,aAAa;YAC5B,QAAQF,OAAO,MAAM;YACrB,WAAWA,OAAO,SAAS;YAC3B,WAAW;QACf;QAEA,IAAI,CAAC,MAAM,GAAGC;QAEd,MAAME,WAAWC,qBAAqB;YAClCH;QACJ;QACA,IAAI,CAAC,cAAc,GAAG,IAAII,qBAAqB;YAC3CF;QACJ;QAEA,IAAI,CAAC,SAAS,GAAG,IAAIG,UAAU;YAC3B,oBAAoBN,OAAO,kBAAkB;YAC7C,gBAAgB,IAAI,CAAC,cAAc;QACvC;IACJ;IAEA,MAAa,MAAMA,MAA2B,EAAgC;QAC1E,MAAM,EAAEO,EAAE,EAAEC,MAAM,EAAE,GAAGR;QAEvB,IAAI;YACA,MAAMS,SAAS,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBACjC,IAAI,CAAC,EAAE,EAAED,OAAO,UAAU,CAAC;gBAC3B,IAAI,GAAGD,IAAI;YACf;YACA,IAAI,CAACE,QACD,OAAO;gBACH,OAAO,IAAIC,MAAM,CAAC,iBAAiB,EAAEH,GAAG,YAAY,CAAC;gBACrD,SAAS;YACb;YAEJ,OAAO;gBACH,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAACE;gBAC1C,SAAS;YACb;QACJ,EAAE,OAAOE,IAAI;YACT,OAAO;gBACH,OAAOA;gBACP,SAAS;YACb;QACJ;IACJ;IAEA,MAAa,MAAMX,MAA2B,EAAgC;QAC1E,MAAMY,WAAWC,gBAAgBb,OAAO,IAAI;QAE5C,IAAI;YACA,MAAMc,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,CAACF;YAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAACE;QAC1B,EAAE,OAAOH,IAAI;YACT,OAAO;gBACH,OAAOA;gBACP,SAAS;YACb;QACJ;QAEA,OAAO;YACH,SAAS;YACT,MAAMC;QACV;IACJ;IAEA,MAAa,KAAKZ,MAA0B,EAA+B;QACvE,IAAI;YACA,MAAMS,SAAS,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAACT;YAEhD,OAAOe,kBAAkB,MAAM,CAAC;gBAC5B,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAACN,OAAO,KAAK;gBACvD,kBAAkBA,OAAO,gBAAgB;YAC7C;QACJ,EAAE,OAAOE,IAAI;YACT,OAAO;gBACH,OAAOA;gBACP,SAAS;YACb;QACJ;IACJ;AACJ;AAEO,MAAMK,gBAAgB,CAAChB,SACnB,IAAID,QAAQC"}
|
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
import { BaseAccessPattern } from "./BaseAccessPattern.js";
|
|
2
|
-
const createPartitionKey = params
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
const createPartitionKey = (params)=>`T#${params.tenant}#AUDIT_LOG#APP#${params.app}`;
|
|
3
|
+
class AppAccessPattern extends BaseAccessPattern {
|
|
4
|
+
handles() {
|
|
5
|
+
return {
|
|
6
|
+
mustInclude: [
|
|
7
|
+
"app"
|
|
8
|
+
],
|
|
9
|
+
mustNotInclude: [
|
|
10
|
+
"createdBy",
|
|
11
|
+
"action",
|
|
12
|
+
"entityId",
|
|
13
|
+
"entity"
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async list(params) {
|
|
18
|
+
const options = this.createOptions(params);
|
|
19
|
+
const result = await this.query({
|
|
20
|
+
partitionKey: createPartitionKey(params),
|
|
21
|
+
options
|
|
22
|
+
});
|
|
23
|
+
return this.populateResult(result);
|
|
24
|
+
}
|
|
25
|
+
createKeys(item) {
|
|
26
|
+
const time = item.createdOn.getTime();
|
|
27
|
+
return {
|
|
28
|
+
partitionKey: createPartitionKey(item),
|
|
29
|
+
sortKey: time
|
|
30
|
+
};
|
|
31
|
+
}
|
|
27
32
|
}
|
|
33
|
+
export { AppAccessPattern };
|
|
28
34
|
|
|
29
35
|
//# sourceMappingURL=AppAccessPattern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"storage/accessPatterns/AppAccessPattern.js","sources":["../../../src/storage/accessPatterns/AppAccessPattern.ts"],"sourcesContent":["import type { IAuditLog } from \"~/storage/types.js\";\nimport type { IStorageListByAppParams } from \"~/storage/abstractions/Storage.js\";\nimport { BaseAccessPattern } from \"~/storage/accessPatterns/BaseAccessPattern.js\";\nimport type {\n IAccessPatternCreateKeysResult,\n IAccessPatternHandles,\n IAccessPatternListResult\n} from \"~/storage/abstractions/AccessPattern.js\";\n\ninterface ICreatePartitionKeyParams {\n tenant: string;\n app: string;\n}\n\nconst createPartitionKey = (params: ICreatePartitionKeyParams) => {\n return `T#${params.tenant}#AUDIT_LOG#APP#${params.app}`;\n};\n\nexport class AppAccessPattern<\n T extends IStorageListByAppParams = IStorageListByAppParams\n> extends BaseAccessPattern<T> {\n public override handles(): IAccessPatternHandles {\n return {\n mustInclude: [\"app\"],\n mustNotInclude: [\"createdBy\", \"action\", \"entityId\", \"entity\"]\n };\n }\n\n public async list(params: T): Promise<IAccessPatternListResult> {\n const options = this.createOptions(params);\n\n const result = await this.query({\n partitionKey: createPartitionKey(params),\n options\n });\n return this.populateResult(result);\n }\n\n public createKeys(item: IAuditLog): IAccessPatternCreateKeysResult {\n const time = item.createdOn.getTime();\n return {\n partitionKey: createPartitionKey(item),\n sortKey: time\n };\n }\n}\n"],"names":["createPartitionKey","params","AppAccessPattern","BaseAccessPattern","options","result","item","time"],"mappings":";AAcA,MAAMA,qBAAqB,CAACC,SACjB,CAAC,EAAE,EAAEA,OAAO,MAAM,CAAC,eAAe,EAAEA,OAAO,GAAG,EAAE;AAGpD,MAAMC,yBAEHC;IACU,UAAiC;QAC7C,OAAO;YACH,aAAa;gBAAC;aAAM;YACpB,gBAAgB;gBAAC;gBAAa;gBAAU;gBAAY;aAAS;QACjE;IACJ;IAEA,MAAa,KAAKF,MAAS,EAAqC;QAC5D,MAAMG,UAAU,IAAI,CAAC,aAAa,CAACH;QAEnC,MAAMI,SAAS,MAAM,IAAI,CAAC,KAAK,CAAC;YAC5B,cAAcL,mBAAmBC;YACjCG;QACJ;QACA,OAAO,IAAI,CAAC,cAAc,CAACC;IAC/B;IAEO,WAAWC,IAAe,EAAkC;QAC/D,MAAMC,OAAOD,KAAK,SAAS,CAAC,OAAO;QACnC,OAAO;YACH,cAAcN,mBAAmBM;YACjC,SAASC;QACb;IACJ;AACJ"}
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import { BaseAccessPattern } from "./BaseAccessPattern.js";
|
|
2
|
-
const createPartitionKey = params
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
2
|
+
const createPartitionKey = (params)=>`T#${params.tenant}#AUDIT_LOG#APP#${params.app}#CREATEDBY#${params.createdBy}`;
|
|
3
|
+
class AppCreatedByAccessPattern extends BaseAccessPattern {
|
|
4
|
+
handles() {
|
|
5
|
+
return {
|
|
6
|
+
mustInclude: [
|
|
7
|
+
"app",
|
|
8
|
+
"createdBy"
|
|
9
|
+
],
|
|
10
|
+
mustNotInclude: [
|
|
11
|
+
"action",
|
|
12
|
+
"entityId",
|
|
13
|
+
"entity"
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async list(params) {
|
|
18
|
+
const options = this.createOptions(params);
|
|
19
|
+
const result = await this.query({
|
|
20
|
+
partitionKey: createPartitionKey(params),
|
|
21
|
+
options
|
|
22
|
+
});
|
|
23
|
+
return this.populateResult(result);
|
|
24
|
+
}
|
|
25
|
+
createKeys(item) {
|
|
26
|
+
const time = item.createdOn.getTime();
|
|
27
|
+
return {
|
|
28
|
+
partitionKey: createPartitionKey({
|
|
29
|
+
...item,
|
|
30
|
+
createdBy: item.createdBy.id
|
|
31
|
+
}),
|
|
32
|
+
sortKey: time
|
|
33
|
+
};
|
|
34
|
+
}
|
|
30
35
|
}
|
|
36
|
+
export { AppCreatedByAccessPattern };
|
|
31
37
|
|
|
32
38
|
//# sourceMappingURL=AppCreatedByAccessPattern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"storage/accessPatterns/AppCreatedByAccessPattern.js","sources":["../../../src/storage/accessPatterns/AppCreatedByAccessPattern.ts"],"sourcesContent":["import type { IAuditLog } from \"~/storage/types.js\";\nimport { BaseAccessPattern } from \"~/storage/accessPatterns/BaseAccessPattern.js\";\nimport type {\n IAccessPatternCreateKeysResult,\n IAccessPatternHandles,\n IAccessPatternListResult\n} from \"~/storage/abstractions/AccessPattern.js\";\nimport type { IStorageListByAppCreatedByParams } from \"~/storage/abstractions/Storage.js\";\n\ninterface ICreatePartitionKeyParams {\n tenant: string;\n app: string;\n createdBy: string;\n}\n\nconst createPartitionKey = (params: ICreatePartitionKeyParams) => {\n return `T#${params.tenant}#AUDIT_LOG#APP#${params.app}#CREATEDBY#${params.createdBy}`;\n};\n\nexport class AppCreatedByAccessPattern<\n T extends IStorageListByAppCreatedByParams = IStorageListByAppCreatedByParams\n> extends BaseAccessPattern<T> {\n public override handles(): IAccessPatternHandles {\n return {\n mustInclude: [\"app\", \"createdBy\"],\n mustNotInclude: [\"action\", \"entityId\", \"entity\"]\n };\n }\n\n public async list(params: T): Promise<IAccessPatternListResult> {\n const options = this.createOptions(params);\n\n const result = await this.query({\n partitionKey: createPartitionKey(params),\n options\n });\n return this.populateResult(result);\n }\n\n public createKeys(item: IAuditLog): IAccessPatternCreateKeysResult {\n const time = item.createdOn.getTime();\n\n return {\n partitionKey: createPartitionKey({\n ...item,\n createdBy: item.createdBy.id\n }),\n sortKey: time\n };\n }\n}\n"],"names":["createPartitionKey","params","AppCreatedByAccessPattern","BaseAccessPattern","options","result","item","time"],"mappings":";AAeA,MAAMA,qBAAqB,CAACC,SACjB,CAAC,EAAE,EAAEA,OAAO,MAAM,CAAC,eAAe,EAAEA,OAAO,GAAG,CAAC,WAAW,EAAEA,OAAO,SAAS,EAAE;AAGlF,MAAMC,kCAEHC;IACU,UAAiC;QAC7C,OAAO;YACH,aAAa;gBAAC;gBAAO;aAAY;YACjC,gBAAgB;gBAAC;gBAAU;gBAAY;aAAS;QACpD;IACJ;IAEA,MAAa,KAAKF,MAAS,EAAqC;QAC5D,MAAMG,UAAU,IAAI,CAAC,aAAa,CAACH;QAEnC,MAAMI,SAAS,MAAM,IAAI,CAAC,KAAK,CAAC;YAC5B,cAAcL,mBAAmBC;YACjCG;QACJ;QACA,OAAO,IAAI,CAAC,cAAc,CAACC;IAC/B;IAEO,WAAWC,IAAe,EAAkC;QAC/D,MAAMC,OAAOD,KAAK,SAAS,CAAC,OAAO;QAEnC,OAAO;YACH,cAAcN,mBAAmB;gBAC7B,GAAGM,IAAI;gBACP,WAAWA,KAAK,SAAS,CAAC,EAAE;YAChC;YACA,SAASC;QACb;IACJ;AACJ"}
|
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
import { BaseAccessPattern } from "./BaseAccessPattern.js";
|
|
2
|
-
const createPartitionKey = params
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
const createPartitionKey = (params)=>`T#${params.tenant}#AUDIT_LOG#APP#${params.app}#ENTITY#${params.entity}`;
|
|
3
|
+
class AppEntityAccessPattern extends BaseAccessPattern {
|
|
4
|
+
handles() {
|
|
5
|
+
return {
|
|
6
|
+
mustInclude: [
|
|
7
|
+
"app",
|
|
8
|
+
"entity"
|
|
9
|
+
],
|
|
10
|
+
mustNotInclude: [
|
|
11
|
+
"createdBy",
|
|
12
|
+
"action",
|
|
13
|
+
"entityId"
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async list(params) {
|
|
18
|
+
const options = this.createOptions(params);
|
|
19
|
+
const result = await this.query({
|
|
20
|
+
partitionKey: createPartitionKey(params),
|
|
21
|
+
options
|
|
22
|
+
});
|
|
23
|
+
return this.populateResult(result);
|
|
24
|
+
}
|
|
25
|
+
createKeys(item) {
|
|
26
|
+
const time = item.createdOn.getTime();
|
|
27
|
+
return {
|
|
28
|
+
partitionKey: createPartitionKey(item),
|
|
29
|
+
sortKey: time
|
|
30
|
+
};
|
|
31
|
+
}
|
|
27
32
|
}
|
|
33
|
+
export { AppEntityAccessPattern };
|
|
28
34
|
|
|
29
35
|
//# sourceMappingURL=AppEntityAccessPattern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"storage/accessPatterns/AppEntityAccessPattern.js","sources":["../../../src/storage/accessPatterns/AppEntityAccessPattern.ts"],"sourcesContent":["import type { IAuditLog } from \"~/storage/types.js\";\nimport type { IStorageListByAppEntityParams } from \"~/storage/abstractions/Storage.js\";\nimport { BaseAccessPattern } from \"~/storage/accessPatterns/BaseAccessPattern.js\";\nimport type {\n IAccessPatternCreateKeysResult,\n IAccessPatternHandles,\n IAccessPatternListResult\n} from \"~/storage/abstractions/AccessPattern.js\";\n\ninterface ICreatePartitionKeyParams {\n tenant: string;\n app: string;\n entity: string;\n}\n\nconst createPartitionKey = (params: ICreatePartitionKeyParams) => {\n return `T#${params.tenant}#AUDIT_LOG#APP#${params.app}#ENTITY#${params.entity}`;\n};\nexport class AppEntityAccessPattern<\n T extends IStorageListByAppEntityParams = IStorageListByAppEntityParams\n> extends BaseAccessPattern<T> {\n public override handles(): IAccessPatternHandles {\n return {\n mustInclude: [\"app\", \"entity\"],\n mustNotInclude: [\"createdBy\", \"action\", \"entityId\"]\n };\n }\n\n public async list(params: T): Promise<IAccessPatternListResult> {\n const options = this.createOptions(params);\n\n const result = await this.query({\n partitionKey: createPartitionKey(params),\n options\n });\n return this.populateResult(result);\n }\n\n public createKeys(item: IAuditLog): IAccessPatternCreateKeysResult {\n const time = item.createdOn.getTime();\n\n return {\n partitionKey: createPartitionKey(item),\n sortKey: time\n };\n }\n}\n"],"names":["createPartitionKey","params","AppEntityAccessPattern","BaseAccessPattern","options","result","item","time"],"mappings":";AAeA,MAAMA,qBAAqB,CAACC,SACjB,CAAC,EAAE,EAAEA,OAAO,MAAM,CAAC,eAAe,EAAEA,OAAO,GAAG,CAAC,QAAQ,EAAEA,OAAO,MAAM,EAAE;AAE5E,MAAMC,+BAEHC;IACU,UAAiC;QAC7C,OAAO;YACH,aAAa;gBAAC;gBAAO;aAAS;YAC9B,gBAAgB;gBAAC;gBAAa;gBAAU;aAAW;QACvD;IACJ;IAEA,MAAa,KAAKF,MAAS,EAAqC;QAC5D,MAAMG,UAAU,IAAI,CAAC,aAAa,CAACH;QAEnC,MAAMI,SAAS,MAAM,IAAI,CAAC,KAAK,CAAC;YAC5B,cAAcL,mBAAmBC;YACjCG;QACJ;QACA,OAAO,IAAI,CAAC,cAAc,CAACC;IAC/B;IAEO,WAAWC,IAAe,EAAkC;QAC/D,MAAMC,OAAOD,KAAK,SAAS,CAAC,OAAO;QAEnC,OAAO;YACH,cAAcN,mBAAmBM;YACjC,SAASC;QACb;IACJ;AACJ"}
|
|
@@ -1,29 +1,35 @@
|
|
|
1
1
|
import { BaseAccessPattern } from "./BaseAccessPattern.js";
|
|
2
|
-
const createPartitionKey = params
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
const createPartitionKey = (params)=>`T#${params.tenant}#AUDIT_LOG#APP#${params.app}#ENTITY#${params.entity}#ACTION#${params.action}`;
|
|
3
|
+
class AppEntityActionAccessPattern extends BaseAccessPattern {
|
|
4
|
+
handles() {
|
|
5
|
+
return {
|
|
6
|
+
mustInclude: [
|
|
7
|
+
"app",
|
|
8
|
+
"entity",
|
|
9
|
+
"action"
|
|
10
|
+
],
|
|
11
|
+
mustNotInclude: [
|
|
12
|
+
"entityId",
|
|
13
|
+
"createdBy"
|
|
14
|
+
]
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async list(params) {
|
|
18
|
+
const options = this.createOptions(params);
|
|
19
|
+
const result = await this.query({
|
|
20
|
+
partitionKey: createPartitionKey(params),
|
|
21
|
+
options
|
|
22
|
+
});
|
|
23
|
+
return this.populateResult(result);
|
|
24
|
+
}
|
|
25
|
+
createKeys(item) {
|
|
26
|
+
const time = item.createdOn.getTime();
|
|
27
|
+
return {
|
|
28
|
+
partitionKey: createPartitionKey(item),
|
|
29
|
+
sortKey: time
|
|
30
|
+
};
|
|
31
|
+
}
|
|
27
32
|
}
|
|
33
|
+
export { AppEntityActionAccessPattern };
|
|
28
34
|
|
|
29
35
|
//# sourceMappingURL=AppEntityActionAccessPattern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"storage/accessPatterns/AppEntityActionAccessPattern.js","sources":["../../../src/storage/accessPatterns/AppEntityActionAccessPattern.ts"],"sourcesContent":["import type { IAuditLog } from \"~/storage/types.js\";\nimport type { IStorageListByAppEntityActionParams } from \"~/storage/abstractions/Storage.js\";\nimport { BaseAccessPattern } from \"~/storage/accessPatterns/BaseAccessPattern.js\";\nimport type {\n IAccessPatternCreateKeysResult,\n IAccessPatternHandles,\n IAccessPatternListResult\n} from \"~/storage/abstractions/AccessPattern.js\";\n\ninterface ICreatePartitionKeyParams {\n tenant: string;\n app: string;\n entity: string;\n action: string;\n}\n\nconst createPartitionKey = (params: ICreatePartitionKeyParams) => {\n return `T#${params.tenant}#AUDIT_LOG#APP#${params.app}#ENTITY#${params.entity}#ACTION#${params.action}`;\n};\n\nexport class AppEntityActionAccessPattern<\n T extends IStorageListByAppEntityActionParams = IStorageListByAppEntityActionParams\n> extends BaseAccessPattern<T> {\n public override handles(): IAccessPatternHandles {\n return {\n mustInclude: [\"app\", \"entity\", \"action\"],\n mustNotInclude: [\"entityId\", \"createdBy\"]\n };\n }\n\n public async list(params: T): Promise<IAccessPatternListResult> {\n const options = this.createOptions(params);\n\n const result = await this.query({\n partitionKey: createPartitionKey(params),\n options\n });\n return this.populateResult(result);\n }\n\n public createKeys(item: IAuditLog): IAccessPatternCreateKeysResult {\n const time = item.createdOn.getTime();\n\n return {\n partitionKey: createPartitionKey(item),\n sortKey: time\n };\n }\n}\n"],"names":["createPartitionKey","params","AppEntityActionAccessPattern","BaseAccessPattern","options","result","item","time"],"mappings":";AAgBA,MAAMA,qBAAqB,CAACC,SACjB,CAAC,EAAE,EAAEA,OAAO,MAAM,CAAC,eAAe,EAAEA,OAAO,GAAG,CAAC,QAAQ,EAAEA,OAAO,MAAM,CAAC,QAAQ,EAAEA,OAAO,MAAM,EAAE;AAGpG,MAAMC,qCAEHC;IACU,UAAiC;QAC7C,OAAO;YACH,aAAa;gBAAC;gBAAO;gBAAU;aAAS;YACxC,gBAAgB;gBAAC;gBAAY;aAAY;QAC7C;IACJ;IAEA,MAAa,KAAKF,MAAS,EAAqC;QAC5D,MAAMG,UAAU,IAAI,CAAC,aAAa,CAACH;QAEnC,MAAMI,SAAS,MAAM,IAAI,CAAC,KAAK,CAAC;YAC5B,cAAcL,mBAAmBC;YACjCG;QACJ;QACA,OAAO,IAAI,CAAC,cAAc,CAACC;IAC/B;IAEO,WAAWC,IAAe,EAAkC;QAC/D,MAAMC,OAAOD,KAAK,SAAS,CAAC,OAAO;QAEnC,OAAO;YACH,cAAcN,mBAAmBM;YACjC,SAASC;QACb;IACJ;AACJ"}
|